본문 바로가기
JAVA

JAVA_객체지향 프로그래밍1(OOP, 클래스, 객체, 인스턴스)

by haheaven 2021. 7. 28.

- 객체지향 기본 개념
: 실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용


- 객체지향프로그래밍 (Object Oriented Programming)

: 프로그램을 구성하고 있는 로직을 상태와 행위로 이루어진 것을 그루핑하여 만드는 것
1. 특징
: 상속, 추상화, 캡슐화, 다형성
2. 장점
① 코드의 재사용성 : 새로운 코드를 작성할 때 기존 코드이용
② 유지보수 : 필요없는 코드만 변경 또는 보수 가능
③ 관리 용이 : 코드간의 관계를 이용해 적은 노력으로 코드 변경 가능


- 클래스와 객체

1. 클래스

: 객체를 정의해 놓은 것
클래스는 필드(속성)와 메소드(기능)로 구성


2. 객체

: 기능과 속성에 따라 객체는 달라짐

- 객체의 구성요소

① 속성 : 멤버변수, 필드, 특성, 상태
② 기능 : 메소드. 함수, 행위

* 클래스 왜 필요 ? 객체 생성 위해
ex) Tv 설계도(클래스) 왜 필요해? Tv(객체) 만들려고
* 객체 필요 이유? 객체 사용 위해
ex) Tv 왜 필요해? Tv 사용하려고
* 객체 사용의 의미? 객체가 가진 속성과 기능을 사용
ex) Tv 사용은 뭔데? 채널(속성)따라 영상(기능1), tv on/off(기능2) 시청하는거

 


- 클래스와 인스턴스

: 클래스로부터 객체를 만드는 과정을 '클래스의 인스턴스화'라고 하며,
클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.
* 객체 : 모든 인스턴스를 대표하는 일반적 용어
** 클래스, 인스턴스화, 객체, 프로그램 이해 돕기 위한 예시

(클래스) 손잡이 설계도 → (인스턴스화) → 객체1 손잡이
(클래스) 몸통 설계도 → (인스턴스화) → 객체2 몸통
(클래스) 바퀴 설계도 → (인스턴스화) → 객체3 바퀴
+ => 제품 자전거

** 예제를 보고 객체지향의 장점을 다시 살펴보면,
자전거(제품)에서 바퀴(객체3)만 고장나면,
① 바퀴만 따로 빼서 고치면 된다.-->유지보수용이
② 같은 제품의 자전거에서 멀쩡한 바퀴를 사용하면 된다. --> 재사용성
③ 특별한 장치를 달아 튼튼한 바퀴를 만든다. --> 확장



* 인스턴스의 생성과 사용(참조변수) 관련 예제(자바의정석 Ex6_3 변형)

class TvTest{
 public static void main(String[] args){
  Tv t1 = new Tv();  //t1 객체생성 
  Tv t2 = new Tv();  //t2 객체생성
  System.out.println("t1의 현재 volume : " + t1.volume);
  System.out.println("t2의 현재 volume : " + t2.volume);

  t2 = t1;
  t1.volume = 12;
System.out.println("t1의 volume을 12로 변경");
  t1.volumeDown();

System.out.println("t1의 현재 volume : " + t1.volume);
System.out.println("t2의 현재 channel : " + t2.volume);
   }
}

class Tv{
   //필드 
  String color = "white";
  boolean power;
  int channel ;
  int volume = 9;

   //메소드
  void power(){
     power = !power;
   }
  void channelUp() { ++channel; }
  void volumeDown() { --volume; }

} // Tv클래스 설계 끝

--> 실행과정 그림으로,, 참조변수는 자체가 아니라 "인스턴스의 주소"를 저장한다는걸 기억하자!

** 참조변수인 t1, t2에서 볼 수 있듯이 한개의 값 안에는 하나의 주소만 저장가능 

   t1. t2 두개의 참조변수는 --> 한개의 인스턴스 가리키는 것이 가능하다. 

    참조변수 한개가 두개의 인스턴스 가리키는 건 불가능!!

 

 

 

 

 

 

 

 

 



참고 : 자바의 정석(남궁성)

'JAVA' 카테고리의 다른 글

JAVA_JVM 메모리 구조  (0) 2021.07.28
JAVA_객체지향 프로그래밍2(변수, 메서드)  (0) 2021.07.28
JAVA_배열(String 배열, 다차원배열) 2  (0) 2021.07.27
JAVA_배열(Array) 1  (0) 2021.07.27
JAVA_도형 만들기(반복문)  (0) 2021.07.25

댓글