데이터 타입 참조변수 = new 클래스
부모클래스 참조변수 = new 자식클래스 / O!
자식클래스 참조변수 = new 부모클래스 / X!
NEW연산자는 무엇인가?
new연산자는 객체를 Heap이라는 메모리 영역에 메모리 공간을 할당한 후,
메모리주소를 반환하고 생성자를 실행시켜준다.
new연산자로 생성된 객체는 똑같은 값을 가진(?) 객체가 있어도, 서로 다른 메모리를 할당하기 때문에 서로 다른 객체로 분류된다.
-----------------------------------------------------------------------------------------------
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
Tv t; // Tv 클래스 타입의 참조변수 t를 선언
t = new Tv(); // Tv인스턴스를 생성한 후, 생성된 Tv 인스턴스의 주소를 t에 저장
위 코드는 인스턴스(객체)생성 시 사용하는 코드이다. 선언된 객체변수 a는 참조값을 갖게된다.
-----------------------------------------------------------------------------------------------
생성자란?
인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드
여기서 인스턴스 초기화란, 인스턴스 변수들을 초기화하는 것을 뜻한다.
★ 연산자 new가 인스턴스를 생성하는 것이지, 생성자가 인스턴스를 생성하는 것이 아니다.
- 인스턴스 생성 과정
- 연산자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다.
- 생성자 Card()가 호출되어 수행된다.
- 연산자 new의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장된다.
- Card c = new Card();
Student s = new Student();
객체 생성 과정
1. new 연산자가 s 객체에 저장될 메모리 공간 할당
2. 생성자가 s 객체를 초기화
3. new 연산자가 새로 생성된 객체의 주소(reference) s 변수에 저장
4. s를 통해 Student에 접근 가능
변수는 Stack영역 할당.
new String으로 생성된 문자열값이 Heap영역의 메모리 공간을 할당받아, str이라는 변수가 그 메모리주소를 가리키고 있음. 이를 다른 말로 참조라고 함.
이떄, 똑같이 생긴 문자열을 new연산자로 또 생성하면, 어떻게 될까?
위와 같이, 별개의 메모리 영역을 할당받아 생성한 것을 볼 수 있다.
혹시 모르니 메모리 주소를 출력해보면 아래와 같다.
리터럴 방식으로 비교해보자
위가 리터럴 방식과 new 연산자의 차이다.
new연산자는 객체를 생성할 때 사용하고, Heap이라는 메모리 영역에 각각의 새로운 메모리 공간을 할당해주는 역할을 한다. new연산자로 생성한 객체들의 메모리 주소가 다르게 나오는 것도 이때문이다.
'개인공부' 카테고리의 다른 글
2차원 배열 (0) | 2022.08.08 |
---|---|
인터페이스 / 지역변수 / 인스턴스변수(전역변수,필드,멤버) (0) | 2022.08.06 |
JVM이란? (자바가상머신) /정리중 (0) | 2022.07.31 |
의미파악해보자 (추상클래스 / 인터페이스) (0) | 2022.07.31 |
디폴트 메서드와 static 메서드 (0) | 2022.07.31 |
댓글