인스턴스(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

+ Recent posts