인스턴스는 new 연산자로 메모리에 할당된걸 말하고,
인스턴스 변수는 인스턴스가 생성되었을때 가지게되는 변수들을 말하는 것이다.
new night( ); 이렇게 하면 new 연산자로 메모리에 할당되는걸로 알고 있는데,
그렇다면 "할당 된게 변수로 들어가기 전까지는 객체(인스턴스)가 만들어졌다고 보면 안되는 건가요?"
정답은 객체가 만들어 지긴 한것이다. 변수가 참조를 안하고 있을뿐이다.
private static Singleton s = new Singleton();
이런 코드의 경우는,
static으로 선언 했으니깐 메모리에 올라 간다.
그리고 new Singleton() 에 의해 인스턴스를 만들며 메모리에 할당된다.
그 인스턴스화 된 주소를 s 인!! static 메모리에 넣는다.
그러면 s 는 null이 아니고 인스턴스 메모리 주소를 가지고 있는 것이다.
위코드의 s 는 스태틱 붙어 있으므로 스태틱 변수이다.
어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스 라고 한다.
예를 들면, TV클래스로 부터 만들어진 객체를 TV클래스의 인스턴스라고 한다.
결국 인스턴스는 객체와 같은 의미이지만, 객체는 모든 인스턴스를 대표하는
포괄적인 의미를 갖고 있으며, 인스턴스는 어떤 클래스로부터 만들어진 것인지를
강조하는 보다 구체적인 의미를 갖고 있다.
추가 예를 들면, ‘책상은 인스턴스다.’ 라고 말하기 보다는 ‘책상은 객체다’ 라고 말하는 게
더 자연스럽고, ‘책상은 책상클래스의 객체이다.’ 라고 말하기 보다는 ‘책상은 책상 클래스의 인스턴스이다’ 라고 말하는게 더 자연스럽다.
인스턴스와 객체는 같은 의미이므로 두 용어 사용을 엄격히 구분할 필요는 없지만,
위에 설명한 것처럼 문맥에 따라 구별하여 사용하는 것이 좋다.
인스턴스화 | ||
---|---|---|
클래스 | → | 인스턴스(객체) |
객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있다.
즉, 객체는 속성과 기능의 집합이라고 할 수 있다.
그리고 객체가 가지고 있는 속성과 기능을 그 객체의 맴버라 한다.
다시 설명하면, 클래스란 객체를 정의한 것이므로 클래스에는 객체의 모든 속성과
기능을 정의되어 있다. 클래스로부터 객체를 생성하면, 클래스에는 정의된 속성과 기능을
가진 객체가 만들어지는 것이다.
속성 | 기능 |
---|---|
맴버변수 | 메서드 |
특성 | 함수 |
필드 | 행위 |
상태 |
쉽게 TV를 예로 들어 보겠다.
TV의 속성으로는 전원 상태, 크기, 길이, 높이, 색상, 볼륨, 채널 과 같은 것들이 있고,
기능에는 켜기, 끄기, 볼륨 높이기, 채널 변경하기 등이 있다.
Reference
남궁 성 지음, 『자바의 정석』, 도우출판.