자바의 정석 책을 토대로 작성하였습니다.
- 클래스로부터 인스턴스 생성하는 방법
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); //클래스의 객채를 생성후, 객체의 주소에 참조변수 저장
Tv t; // Tv클래스 타입의 참조변수 t를 선언
t = new Tv(); // Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
1. Tv t;
Tv클래스 타입의 참조변수 t선언, 메모리에 참조변수 t를 위한 공간이 마련, 아직 인스턴스 생성되지 않았으므로 참조변수로 아무것도 할수 없음
2. t = new Tv();
연산자 new에 의해 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성. 이 떄, 멤버변수는 각 자료형의 해당하는 기본값으로 초기화됨 (color는 참조형이므로 null, power는 boolean이므로 false, channel은 int이므로 0으로) 그 다음 대입연산자(=)에 의해 생성된 객체의 주소값이 참조변수 t에 저장! 이제는 참조변수 t를 통해 Tv인스턴스에 접근할 수 있음, 인스턴스를 다루기 위해서는 참조변수가 반드시 필요!
Tv t;
t = new Tv();
위의 두 문장을 밑에 한 문장으로도 가능!
Tv t = new Tv();
3. t.channel = 7;
참조변수 t에 저장된 주소에 있는 인스턴스의 멤버변수 channel에 7을 저장한다. 인스턴스의 멤버변수(속성)을 사용하려면 참조변수.멤버변수(t.channel) 와 같이 사용
4. t.channelDown();
참조변수 t가 참조하고 있는 Tv인스턴스의 channelDown메서드 호출
- 인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다!
- 인스턴스 두개가 같은 클래스로부터 생성되었을지라도, 각 인스턴스의 속성(멤버변수)은 서로 다른값으 유지 가능, 메서드의 내용은 모든 인스턴스에 대해 동일함
- 자신을 참조하고 있는 참조변수 하나도 없는 인스턴스는 더 이상 사용되어질 수 없으므로 '가비지 컬렉터(Garbage Collector)에 의해 자동적으로 메모리에서 제거
- 참조변수에는 하나의 값(주소)만이 저장될 수 있으므로 둘 이상의 참조변수 하나의 인스턴스를 가리키는(참조하는) 것은 가능하지만 하나의 참조변수로 여러 개의 인스턴스를 가리키는 것은 불가능
'IT > java' 카테고리의 다른 글
orElseThrow로 코드 가독성을 높이자 (0) | 2023.08.30 |
---|---|
Spring 카카오 로그인 REST API (1) | 2022.10.02 |
맥mac 이클립스 스프링 개발 이미지 업로드 파일 경로(윈도우에서 옮겨오면서 생긴 일), 해결중... (0) | 2022.09.02 |
class 생성시, equals() hashCode() 오버라이딩! (0) | 2022.08.07 |
Java에서의 Array, List, Map, Set, lterator (0) | 2022.07.04 |