SHUSTORY

05-5 생성자 본문

프로그래밍/JAVA

05-5 생성자

어서오시우 2023. 2. 20. 05:50
728x90

생성자

예제01
예제02

 

예제02의 6행에서 Person( )과 같은 함수를 생성자라고 한다.

클래스의 멤버 변수는 메서드에 의해 값이 변경될 수도 있지만, 처음 클래스를 생성할 때 값을 정해야 하는 경우도 있다.

생성자가 하는 일은 클래스를 처음 만들 때 멤버 변수나 상수를 초기화하는 것이다.

 

 

디폴트 생성자

생성자는 클래스를 생성할 때만 호출한다.

생성자 이름은 클래스 이름과 같고, 생성자는 반환값이 없다.

그런데 Person 클래스를 살펴 보면 Person( ) 생성자가 따로 없는 것을 볼 수 있는데,

그럼에도 불구하고 new 예약어를 이용해 객체를 만들 수 있다.

생성자가 없는 클래스는 클래스 파일을 컴파일 할 때 자바 컴파일러에서 자동으로 생성자를 만들어 준다.

이를 디폴트 생성자라고 하며, 디폴트 생성자는 매개변수가 없고 구현 코드도 없다.

자바 컴파일러가 자동으로 제공하는 디폴트 생성자는 Person 클래스를 예로 들자면 public Person( ) { } 과 같은 형태이다.

 

 

생성자 만들기

필요한 경우 프로그래머가 직접 생성자를 구현할 수도 있다.

멤버변수에 대한 값들을 매개변수로 받아서 인스턴스가 새로 생성될 때 멤버 변수 값들을 초기화하는 역할을 하는,

즉 인스턴스가 생성됨과 동시에 멤버 변수의 값을 지정하고 인스턴스를 초기화하기 위해 생성자를 직접 구현할 수 있다.

 

예제03

 

새로 만든 생성자는 문자열 String형 매개변수를 하나 입력받아 name에 대입한다.

그런데 예제01을 예제03과 같이 Person 클래스를 수정해준다면 예제02의 PersonTest.java 코드에서 오류가 발생한다.

그 이유는 프로그래머가 생성자를 직접 구현하여 생성자가 하나 이상 생겨버려

자바 컴파일러에서 디폴트 생성자를 제공하지 않기 때문이다.

따라서 디폴트 생성자가 없기 때문에 PersonTest 코드에서 오류가 발생하는 것이다.

오류를 없애기 위해 매개변수가 있는 생성자로 호출하거나 디폴트 생성자를 추가로 직접 구현하면 된다.

 

예제04

 

디폴트 생성자를 직접 추가하면 더 이상 오류가 발생하지 않는다.

앞으로 Person 클래스를 생성할 때 두 생성자 중 하나를 선택해 사용할 수 있게 되었다.

 

 

생성자 오버로드

생성자가 두 개 이상 제공되는 경우를 생성자 오버로드라고 한다.

필요에 따라 매개변수가 다른 생성자를 여러 개 만들 수 있으며, 경우에 따라 디폴트 생성자를 제공하지 않기도 한다.

생성자의 주 역할은 인스턴스 변수의 초기화이다.

생성하려는 해당 클래스에서 여러 가지 생성자를 제공한다면 이 클래스를 사용하여 인스턴스를 만드는 경우에 맞추어

필요한 생성자를 골라서 사용할 수 있다. 같은 내용을 수행하더라도 상황에 맞는 생성자를 선택하여 코드를 작성한다면 더욱 높은 가독성과 효율을 얻을 수 있을 것이다.

 

예제05
예제06

'프로그래밍 > JAVA' 카테고리의 다른 글

05-7 정보 은닉  (0) 2023.02.20
05-6 참조 자료형  (0) 2023.02.20
05-4 클래스와 인스턴스  (0) 2023.02.20
05-3 메서드  (0) 2023.02.20
05-2 클래스 살펴보기  (0) 2023.02.20