본문 바로가기

프로그래밍/JAVA

[JAVA} 클래스와 인스턴스(Class, Instance)

0. 들어가기 앞서


클래스는 기본 뼈대이고

인스턴스는 구체적인 "상태(변수)" 와 "행위(기능)"의 집합이라고 생각하자.


위 카드를 생각해본다면

카드 클래스에 대표적으로 들어가야 할 것들이 있을 것이다.


  1. 고객의 이름 (변수)

  2. 카드 유효기간 (변수)

  3. 카드 번호 (변수)

  4. 정보 인식 기능 (메서드)

  5. 정보 보안 기능 (메서드)


그런데 고객 A, 고객 B, 고객 C 마다 가지고 있어야 할 정보들이 각기 다를 것이다.

이렇게 찍어낸 카드는 각기 다른 "상태와 행위"를 갖는다.


VisaCard 고객 A = new VisaCard ( ) ; // 고객 이름 : A , 유효기간 06월/20년

VisaCard 고객 B = new VisaCard ( ) ; // 고객 이름 : B , 유효기간 05월/13년

VisaCard 고객 C = new VisaCard ( ) ; // 고객 이름 : C , 유효기간 12월/17년


인스턴스의 존재이유를 "서로 다른 상태를 가지게 하기 위해서!" 라고 생각하자!

인스턴스의 존재이류를 "서로 다른 개성을 존중하자!" 라고 생각하자.

공부하면서 그렇게 생각하는 것이 제일 간단하다고 느꼈다.



봐도봐도 헷갈리는 부분이다.

객체는 뭐고 인스턴스는 뭐고 클래스는 무엇인지..


객체 : 모든 인스턴스를 대표하는 포괄적 의미

인스턴스 : "어떤 클래스"로부터 만들어진 것인지를 강조하는 구체적 의미

( 일단, 인스턴스 ⊂ 객체라고 하자)


클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 한다.

어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.


(객체를 위와 같은 메모리에 저장된 것이라고 생각하자)


1. 객체(인스턴스)의 구성요소


속성(property) : 멤버변수, 특성, 필드, 상태

기능(function) : 메서드, 행위, 함수


사람 A가  "달리고" 있다면 속성일까 기능일까? => 기능에 해당

사람 A의 나이가 24살이라면 속성일까? 기능일까? => 속성에 해당


"속성" "기능"의 집합을 객체라고 한다.


2. 인스턴스의 생성과 사용

위 예제 다시 이용해보자.

비자카드에는 아래와 같은 "속성(멤버변수)"와 "기능(메서드)"가 있다.


  1. 고객의 이름 (변수)

  2. 카드 유효기간 (변수)

  3. 카드 번호 (변수)

  4. 정보 인식 기능 (메서드)

  5. 정보 보안 기능 (메서드)


고객마다 가지고 있는 정보가 다를 것이므로 서로 다른 상태를 갖게 하기 위해서 인스턴스를 생성한다.

.............................................................

Card personA  =  new Card();

Card personB  =  new Card();

Card personC  =  new Card();

..............................................................

personA를 도식화를 해보도록 하자.


언산자 ( new )에 의해 : TV클래스의 인스턴스가 메모리의 빈 공간에 생성된다(0x100)

대입연산자(=)에 의해 : 생성된 인스턴스의 주소값이 참조변수 personA에 저장된다.


참조변수 personA에 의해 인스턴스의 "멤버변수"와 "메서드"를 사용할 수 있게 된다.

사용하는 방법은 참조변수.변수명(or 메서드명)을 쓰면 된다.


ex) personA.name = "홍길동"; , personB.name = "추신수"; , personC.name = "오승환";







위 코드는 두 부분으로 나뉜다. "Tv 클래스"와 "tvtes클래스 내에 있는 메인 메서드"


1. Tv 클래스부터 살펴보자.


맨 위 그림에서, 클래스는 속성과 기능으로 이루어져있다.

속성(property)은 멤버변수, 기능(function)은 메서드이다.


2. TVtest 클래스 내 메인메서드의 역할이 무엇인지 살펴보자.


new 연산자에 의해 Tv 클래스의 인스턴스가 메모리의 빈 공간에 생성된다.

이 메모리의 주소값을 t1과 t2가 저장하고, 이 인스턴스를 가리킨다.


3. 출력값을 잘 살펴보자. 어떻게 변화하고 있는가?