생성자(Constructor)란?
위 코드를 보면 클래스를 생성할 때 사용하는 Constructor() 같은 함수를 생성자라고 표현합니다.
클래스의 멤버 변수는 메서드에 의해 할당될 수 있지만, 처음 클래스를 생성할 때 값을 정해야 하는 경우가 있습니다.
생성자는 이러한 상황에서 멤버 변수나 상수를 초기화하는 일을 합니다.
Default 생성자
생성자는 클래스를 생성할 때만 호출합니다. 또, 생성자 이름은 클래스 이름과 같아야 합니다.
생성자는 반환 값이 없으므로, return을 사용할 수 없다고 알고 있으면 됩니다.
위 예제인 Constructor 클래스를 살펴보면 생성자가 따로 없었습니다.
하지만 new Constructor() 를 통해 객체를 만들 수 있었습니다.
생성자가 없는 클래스는 클래스 파일을 컴파일할 때 자바 컴파일러에서 자동적으로 생성자를 만들어줍니다.
이떄 자동으로 만들어 주는 생성자를 default 생성자라고 부르며, 매개변수와 코드가 없습니다.
Default 생성자가 아닌 생성자를 만들기
예를 들면 Constructor 클래스를 통해 객체를 만들때 무조건
"name" 이라는 매개변수를 받아서 초기화를 진행해야 하는 상황이라는 가정을 해보겠습니다.
이러한 상황일 때는 default 생성자가 아닌 매개변수를 받는 생성자를 만들 수 있습니다.
위 생성자는 문자열 String형 매개변수를 입력받아 "name"을 지정합니다.
이때, 컴파일을 진행하면 오류가 발생하는데
자바 컴파일러는 생성자가 하나도 없는 경우에만 default 생성자를 생성합니다.
또한, 컴파일을 위해서는 default 생성자가 필수로 존재해야합니다.
아래와 같이 Constructor 클래스를 생성할 때 두 개의 생성자를 한 개를 선택해서 초기화를 진행할 수 있습니다.
매개변수가 다른 생성자를 여러개
아래 클래스를 보면 생성자 오버로드를 통해 여러가지 생성자를 제공하고 있습니다.
사용자는 이 클래스를 이용하여 인스턴스를 만드는 경우에 생성자를 골라서 사용할 수 있습니다.
매개변수가 있는 생성자를 사용하면?
생성자 내부에서 변수를 초기화할 수 있도록 구현되어 있으므로, 코드가 간결해지며 사용이 편합니다.
'Java' 카테고리의 다른 글
[Java] 주민등록번호 유효성 검사 메서드 / 재활용성을 고려한 (0) | 2022.09.30 |
---|---|
[Java] 소문자 이름을 출력받아서 대문자 이름을 출력하는 함수 (0) | 2022.09.30 |
[Java] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) (0) | 2022.09.30 |
[Java] 상위 클래스를 상속받는 하위 클래스에 대해서 / default 생성자 자동 생성 / super() 예약어를 통한 생성자 호출 (0) | 2022.09.29 |
[Java] 패키지의 사용 (0) | 2022.09.29 |