인스턴스(instance) 변수와 지역(local) 변수
- 인스턴스 변수 : 클래스 내에 선언한 변수 > 변수가 들어있는 객체안에(Heap)에 저장된다.
- 지역 변수 : 메서드 내에 선언한 변수, 매서드의 매개변수도 지역변수에 해당한다. > 변수가 들어있는 매서드안에(Stack)에 저장된다.
스택(stack)과 힙(heap)
- 스택 : 매서드의 호출과 지역변수가 사는 곳
- 힙 : 모든 객체가 사는 곳(객체가 가지고 있는 인스턴스 변수도 포함한다.) > 가비지 컬렉션의 대상이 된다.
생성자
- Student yang = new Student();
1. Student yang : 레퍼런스 변수를 선언한다.
2. new Student() : Student 클래스의 생성자를 실행한다. (객체의 초기화, heap 영역에 생성)
3. = : 래퍼런스 변수와 생성된 객체를 연결한다.
- 반드시 new 라는 키워드로 생성자를 실행한다.
- 생성자는 반환형이 없으며 파라미터가 없는 기본생성자는 컴파일러가 자동으로 생성한다.
ex) public Student(){ } >> 접근제한자는 public,private,default 모두 가능하다.
- 생성자 오버로딩이 가능하며 이때 기본생성자는 개발자가 임의로 추가해야 한다.
상속관계에서의 생성자
- new 키워드로 어떤 객체가 만들어지면 그 객체의 상위클래스들의 모든 생성자가 실행된다.
최초의 클래스인 Object 클래스까지 거슬러 올라가며 이를 생성자 연쇄(constructor chaining)라 한다. (상위 클래스의 생성자부터 실행)
super(), this()
- 임의로 상위클래스의 생성자를 호출할 경우 사용하며 컴파일러가 기본으로 생성하여 준다.
- 생성자의 첫번째 선언문에 꼭 위치하여야 한다.
- this() 로는 본인 클래스의 오버라이드된 다른 생성자를 호출할수 있으며 첫번째 선언문에 사용되어야 한다. 즉, super() 와 this() 중 하나만 사용가능하다.
객체 life cycle
- 객체는 그 객체의 레퍼런스변수가 살아있는 동안만 살아있으며 객체에 접근할 방법이 사라지면(레퍼런스 변수가 사라지면), GC에 의해 제거된다.
- 객체가 GC에 의해 제거되는 3가지 경우
1. void 메서드가 종료될 때 제거된다.
void go(){
Life z = new Life();
}
2. 레퍼런스 변수에 다른 객체를 대입하면 제거된다.
Life z = new Life();
z = new Life(); // 윗 줄에서 생성된 객체는 제거된다.
3. 레퍼런스 변수에 null을 대입하면 제거된다.
Life z = new Life();
z = null; // 윗 줄에서 생성된 객체는 제거된다.
'개발 > JAVA' 카테고리의 다른 글
LocalDateTime, ZonedDateTime (0) | 2019.10.11 |
---|---|
Collections를 이용한 정렬(sort method) 활용 (0) | 2017.05.09 |
BigDecimal & BigInteger (0) | 2017.04.18 |
Array 와 ArrayList 사이의 변환 (0) | 2017.03.28 |
8. 인터페이스와 추상 클래스 (0) | 2017.02.21 |