Notice
Recent Posts
Recent Comments
Link
passion and relax
[JAVA] 09. 객체의 삶과 죽음 (생성자와 메모리 관리) 본문
stack 과 heap
stack
. 메소드 호출과 지역변수가 사는 곳
heap
. 모든 객체가 사는 곳
. Garbage collector가 작동하는 곳
메소드 호출
. stack frame 에 "실행코드 + 지역변수 값 + 메소드 상태"가 저장된다.
. 또 다른 메소드가 호출되면 계속해서 stack에 쌓이게 된다.
. 맨 위의 stack frame의 메소드가 현재 실행 중인 메소드이다.
지역변수
. 메소드용 변수로서 메소드 안에서 선언된 변수 또는 매개변수
. 단지 이 둘만을 말함. 다른 것은 지역변수가 아니다.
객체의 저장 (지역변수 선언 시)
객체용 지역변수 선언
. stack에 지역변수가 선언됨.
. CellPhone myPhone
객체 생성
. new를 했을 때, heap에 객체가 생성됨.
. new CellPhone();
stack의 객체용 지역변수에 heap에서 생성한 객체의 레퍼런스를 대입한다.
. CellPhone myPhone = new CellPhone();
객체의 저장 (인스턴스 변수 선언 시)
객체용 인스턴스 변수 선언
. heap에 멤벼변수가 선언됨.
. CellPhone myPhone
객체 생성
. new를 했을 때, heap에 객체가 생성됨.
. new CellPhone();
heap의 객체용 인스턴스 변수에 heap에서 생성한 객체의 레퍼런스를 대입한다.
. CellPhone myPhone = new CellPhone();
객체의 저장 (상위 클래스가 있는 객체의 저장)
어떤 객체가 만들어지면, 그 객체의 상속트리 전체에 걸쳐 축적된 모든 인스턴스 변수 공간을 잡는다.
자바 최상위 클래스인 Object도 예외는 아니다. Object의 공간도 잡는다.
즉, 모든 상위 객체의 new가 실행되는 것 => Constructor Chaining
어떤 원리로?
. 개발자가 생성자를 전혀 안 만들었다면, 빈 생성자를 자동 생성 및 super(); 자동 삽입.
. 개발자가 오버로드된 생성자를 만들었고, 만든 그 생성자를 직접 호출하게 할 수도 있다.
super(37); 처럼 직접 호출해줘야 한다. 직접 호출 안하면 무조건 빈 생성자 super();를 호출한다.
부모 클래스가 만들어진 후에, 자식 클래스가 만들어 진다. (사람과 같지..)
부모 클래스가 종료된 후에, 자식 클래스가 종료된다.
일단 정리
자바에서 관심 가져야 할 메모리 공간은 stack과 heap 이다.
객체와 그 객체의 인스턴스 변수(멤버변수)는 heap에 저장되며,
메소드 호출과 그 메소드의 지역변수는 stack에 저장된다.
인스턴스 변수
. 메소드 밖에서 선언된 변수
. 객체의 일부로 보며, heap에 저장된다.
지역 변수
. 메소드 안에서 선언된 변수 (매개변수 포함)
. 객체의 일부로 보지 않고, 메소드 호출 시 stack에 저장된다.
생성자
리턴 유형이 없다. 이 말은 즉, 리턴값도 없다는 것.
생성자명은 클래스명과 동일해야 한다.
클래스명과 동일명의 메소드가 있다해도, 리턴이 있다면 생성자가 아니다.
public Duck() { ~~ }
객체를 생성하는 중간에 끼어들어, 필요한 작업(객체의 초기값 설정)을 수행한다.
초기값이 설정되기 전 다른 용도로 사용되는 것을 막으려면, 생성자의 초기값 설정을 이용할 것.
상속되지 않는다.
자동 생성 생성자(아무것도 없는 생성자)는 개발자가 생성자를 하나도 안 만들었을 때만 생성된다.
생성자를 하나라도 만들었다면, 자동 생성 생성자는 만들어 지지 않는다.
접근 유형 : public, private, 쓰지 않음(default)의 3가지 종류가 있음.
'프로그래밍' 카테고리의 다른 글
| [JAVA] 11. 위험한 행동 (예외 처리) (0) | 2024.05.27 |
|---|---|
| [JAVA] 10. 숫자는 정말 중요합니다 (수학, 포매팅, 래퍼, 통계) (1) | 2024.05.24 |
| [JAVA] 08. 심각한 다형성 (추상 클래스와 인터페이스) (1) | 2024.05.21 |
| [JAVA] 07. 객체마을에서의 더 나은 삶 (미래를 준비합시다) (0) | 2024.05.21 |
| [JAVA] 06. 자바 라이브러리 (전부 다 직접 만들어서 쓸 필요는 없습니다) (1) | 2024.05.20 |