생성자란?

생성자는 특수한 목적을 가지는 메소드로객체가 생성될  자동으로 호출되어 필드를 초기화하는 역할을 한다.

 

생성자가 필요한 이유

-필드를 선언할  초기값을 주게 되면 동일한 클래스로부터 생성되는 객체들은 모두 같은 데이터를 갖게된다.

->객체 생성 시점부터 원하는 초기값을 설정하기 위해 생성자를 사용한다.

 

생성자 작성 형식

접근제한자 메소드이름 ([매개변수]) {

//실행 코드

}



 

특징

-객체 생성  생성자가 호출되지 않으면 예외(에러) 발생한다.

-없으면 컴파일러에서 기본 생성자를 자동으로 제공

-클래스 이름과 동일하고 반환자료형(return type) 없다void표기 조차도 필요 없음

-일반적으로 접근제한자는 public 사용하나private 생성자를 사용하는 경우도 있다. (->private 생성자)

 

기본 생성자

-사용자가 생성자 선언을 하지 않는 경우에만 자동 제공되는 생성자

-객체 생성  자동 호출되는 메소드이므로기본 생성자가 없으면 컴파일러에서 기본 생성자를 자동으로 제공해준다.

-자동으로 생성되는 기본 생성자의 접근 제한은 클래스의 접근 제한과 동일하다. (p260 참고)


매개변수가 있는 생성자 Parameterized Constructor

-생성자에 매개변수를 쓰는 이유 : 외부 전달 받아서 필드를 초기화하기 위한 목적

->기본 생성자 추가로 명시적 선언이 필요  - 매개변수가 있는 생성자 선언  기본 생성자는 자동 제공되지않으므로 기본 생성자와 함께 쓰는 것을 권장한다.


private 생성자 (p260, p243 참고)

->외부에서 객체(instance) 생성하는 과정을 통제하는 수단.

-private 접근제한자는 동일 패키지이건 다른 패키지이건 상관없이 생성자를 호출하지 못하도록 제한하여클래스 외부에서 new 연산자로 객체를 만들  없다.

-클래스 내부에서 정적(static) 메소드를 사용해 객체 생성  제공하도록  

 예Math 클래스 - Math클래스 메소드는 객체(instance)를 선언하지 않아도 사용이 가능하다.

 Math m = new Math(); 라고 선언해보면 The constructor Math() is not visible이라는 메시지

 ->Math클래스의 생성자의 접근제한자는 private인 것을 알 수 있다.

 

 

[참고]생성자와 setter - 생성자와 setter 역할은 비슷하지만 호출 시점이 다르다.

-생성자는 객체 생성  필드 초기화 역할을 수행 - 객체 생성    번만 호출된다.

-setter 객체 생성 이후에 호출이 가능 - 필드 초기화가 아니라 기존값 덮어쓰기객체 생성 이후라면 원하는 때에 언제라도 호출할  있다.

'Java > 노트' 카테고리의 다른 글

[Java] 클래스(Class)의 특징  (0) 2018.07.19

+ Recent posts