Blog

[Java] 객체지향개념 3

요약 : 생성자와 변수의 초기화

생성자( constructor )

  • 생성자의 이름은 해당 클래스의 이름과 같아야한다.
  • 생성자 메서드는 리턴값이 없지만 void를 쓰지 않는다.
  • 인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드
  • 인스턴스 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용
  • 몇가지 조건을 제외하고는 메서드와 동일
  • 모든 클래스에는 반드시 하나 이상의 생성자가 있어야한다. ( 생성자가 2개이상일 때 모든 생성자의 이름이 같으므로 오버로딩의 규칙을 따라야한다. )
  • 클래스에 생성자가 없을경우 컴파일러가 기본 생성자를 추가한다.
  • 생성자 메서드의 파라미터가 없으면 인스턴스호출시 클래스에도 파라미터가 없어야한다.
  • 아니면 둘다있거나.

인스턴스 생성과정

  • 연산자 new에 의해서 heap에 해당클래스의 인스턴스가 생성된다.
  • 클래스의 생성자가 호출되어 수행된다.
  • 연산자 new의 결과로, 생성된 해당클래스의 인스턴스의 주소가 반환되어 참조변수에 저장된다.

 

생성자에서 다른 생성자 호출하기

 

변수의 초기화

  • 멤버변수( 인스턴스변수, 스태틱변수)와 배열은 자동초기화 되므로 초기화 생략가능
  • 지역변수는 초기화하지 않으면 컴파일 에러가난다.

같은 타입의 변수는 다음과 같이 초기화가 가능하다.

 

멤버변수의 초기화

명시적 초기화

  • 클래스내에서 인스턴스변수에 명시적으로 값 할당.

생성자

  • 클래스의 생성자함수로 인스턴스변수에 값 할당.

초기화 블럭

  • 클래스 초기화 블럭 – 클래스변수의 복잡한 초기화에 사용되며 클래스 로딩될 때 단한번 실행됨
  • 인스턴스 초기화 블럭 – 생성자에서 공통적으로 수행되는 작업에사용, 인스턴스가 생성될 때 마다(생성자보다 먼저) 실행된다.
사실 인스턴스 초기화 블럭은 생성자에 넣어도 상관없는듯?

여러개의 생성자가 있을경우 의미상 어떤 생성자로 인스턴스가 생성되던간에 공통적으로 처리되야 하는 경우에 사용된다.

좀 헷갈리네 ㅡ.ㅡ;;

초기화