생성자란?
생성자는 특수한 목적을 가지는 메소드로, 객체가 생성될 때 자동으로 호출되어 필드를 초기화하는 역할을 한다.
생성자가 필요한 이유
-필드를 선언할 때 초기값을 주게 되면 동일한 클래스로부터 생성되는 객체들은 모두 같은 데이터를 갖게된다.
->객체 생성 시점부터 원하는 초기값을 설정하기 위해 생성자를 사용한다.
생성자 작성 형식
접근제한자 메소드이름 ([매개변수]) {
//실행 코드
}
특징
-객체 생성 시 생성자가 호출되지 않으면 예외(에러)가 발생한다.
-없으면 컴파일러에서 기본 생성자를 자동으로 제공
-클래스 이름과 동일하고 반환자료형(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 |
---|