Java] Class & Instance

Class와 Instance 관계

클래스는 붕어빵 틀이고 인스턴스는 붕어빵이다.

클래스와 인스턴스 관계를 이해했다면, 정말 이 말이 너무도 와닿는 말 일수 밖에 없다.

이와 유사한 예로서 검을 만드는 거푸집과 그로 인해 만들어진 검들을 예로 들어보자.

검을 만드는 거푸집이 클래스라면, 클래스는 사회적인 현상을 객체화한 것이다.

만들어진 검이 인스턴스이기에, 객체인 인스턴스는 사용된다면 하나의 검의 역할을 하게 되는 것이다.

1
ClassName name = new ClassName();

name은 참조 변수로서 인스턴스의 주소값(참조값)을 가지고 있다.

new는 객체 생성 명령어로서, new ClassName은 해당 클래스 객체를 생성한다는 것이다.

ClassName()의 ()는 해당 클래스의 기본 생성자를 가리킨다.

해당 클래스의 기본 생성자가 없다면 오류가 발생할 것이다.

(단, 해당 클래스에 생성자가 아무것도 없다면 default는 기본 생성자이다.)

메모리 관점

클래스에 존재하는 변수, 메소드는 메모리 공간 할당된 형태가 아니다.

인스턴스 객체는 메모리 공간에 할당된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*ClassInstance Class*/
public class ClassInstance {
private int num;

public int getNum() {
return num;
}

public void setNum(int num) {
this.num = num;
}
}

/*Test Class*/
public class Test {
public static void main(String[] args) {
ClassInstance ci1 = new ClassInstance();
ClassInstance ci2 = new ClassInstance();

ci1.setNum(5);
ci2.setNum(7);

System.out.println(ci1.getNum()); //5
System.out.println(ci2.getNum()); //7
}
}

인스턴스마다 서로 다른 주소값으로 접근하여 변수값이 다름을 알 수 있다.

객체와 인스턴스

객체와 인스턴스는 자바에서 같은 말로 쓰이나, 상황에 따라 더 어울리는 말이 있다.

객체가 더 어울릴 경우

“과일 장수를 하시는 옆집 철수 아버님을 의미하는 객체를 생성한다”

이는 철수 아버님을 프로그램상에서 표현한 것이므로 객체라는 표현이 더 어울린다.

인스턴스가 더 어울릴 경우

“클래스 FruitSeller의 인스턴스 두 개를 생성한다”

이 경우에는 FruitSeller 클래스가 틀로 사용됨을 강조하였기에 인스턴스라는 표현이 더 어울린다.

인스턴스 변수와 인스턴스 메소드

메소드라는 이름이 붙은 이유는 메소드가 인스턴스의 행위 및 행동을 표현하는 방법(method)으로 사용되기 때문이다. 자바에서는 인스턴스 변수를 가리켜 ‘인스턴스 필드’라고 부르기도 한다.