Programming

; develop a program

Back-End/Java

[Java] 생성자(Constructor)

Clloud_ 2023. 2. 1. 13:00
반응형

이번 포스팅에서는 자바(Java)에서 생성자(Constructor)에 대하여 공부를 해보고자 한다.

 


생성자란

생성자는 간단하게 얘기하면 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.

따라서 인스턴스 변수의 초기화 작업에 사용되고, 인스턴스 생성 시에 실행되어야 할 작업을 위해서 사용된다.

  • 생성자의 이름은 클래스의 이름과 같아야 한다.
  • 생성자는 리턴 값이 없기 때문에 void 또한 사용하지 않는다.
  • 생성자는 몇 가지 특징을 제외하면 메서드와 다르지 않다.
  • 생성자는 메서드처럼 클래스 내에 선언되고, 오버 로딩이 가능하므로 하나의 클래스에 여러 개의 생성자가 존재할 수 있다.

 

Person 생성자 만들기

public class Person {
    String name;
    float height;
    float weight;
}

 

생성자 테스트하기

public class PersonTest {
	public static void main(String[ ] args) {
    	Person personLee = new Person();	//생성자
    }
}
  • 위 예제를 봤을 때, 자바에서 클래스를 생성할 때 사용하는 Person( ) 같은 함수를 생성자라고 한다.
  • 클래스의 멤버 변수는 메서드에 의해 갑이 변경될 수도 있지만, 처음 클래스를 생성할 때 값을 정해야 하는 경우도 있다.
  • 생성자가 하는 일은 클래스를 처음 만들 때 멤버 변수나 상수를 초기화하는 것이다.

 

기본 생성자(Default constructor) 

위의 Person 클래스를 살펴보면 Person( ) 생성자가 따로 없다는 것을 알 수 있다.

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

 

이렇게 자동으로 만들어주는 생성자를 기본 생성자 또는 디폴트 생성자라고 한다.

  • 기본 생성자는 매개변수가 없고 구헌 코드도 없다.
  • 기본 생성자를 직접 만드는 경우에는 필요에 따라 직접 코드를 구현할 수 있다.

 

따로 생성자를 만들지 않아도 다음처럼 자동으로 만들어진다.

public class Person {
    String name;
    float height;
    float weight;
    
    public Person(){}	//자바 컴파일러가 자동으로 제공하는 디폴트 생성자
}

 

생성자를 직접 추가하는 경우

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

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

 

자바 컴파일러는 생성자가 하나도 없는 경우에만 디폴트 생성자를 제공하기 때문에 생성자를 직접 추가하면 디폴트 생성자는 만들어지지 않는다.

이러한 경우 매개변수가 있는 생성자로 호출하거나 디폴트 생성자를 추가로 직접 구현해야 한다.

 

 

생성자 오버로드

클래스에 생성자가 두 개 이상 제공되는 경우를 생성자 오버로드(constructor overload)라고 한다.

  • 필요에 따라 매개변수가 다른 생성자를 여러 개 만들 수 있다.
  • 클래스에 생성자를 여러 개 제공하면 이 클래스를 사용하는 코드에서는 원하는 생성자를 선택해 사용할 수 있다.
  • 경우에 따라서는 클래스에 일부러 디폴트 생성자를 제공하지 않기도 한다.

 


반응형

'Back-End > Java' 카테고리의 다른 글

[Java] 정보 은닉(Information Hiding)  (3) 2023.02.01
[Java] 참조 자료형  (0) 2023.02.01
[Java] 클래스와 인스턴스  (0) 2023.01.31
[Java] 메서드(Method)  (0) 2023.01.31
[Java] 객체 지향 프로그래밍과 클래스  (0) 2023.01.30