클래스란 무엇인가? 5 : 생성자

정소이·2023년 1월 20일
0

OOP를 향해서

목록 보기
7/10

클래스에는 설계도 클래스에서 객체를 생성하기 위한 생성자가 들어있다.
생성자 선언은 클래스와 같은 이름을 사용하고, 리턴타입이 없다는 것만 제외하면 메서드 선언과 비슷하다.
예를들어, Bicycle은 생성자 하나를 갖고있다.

public Bicycle(int startCadence, int startSpeed, int startGear) {
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;
}

새로운 Bicycle 객체를 생성하기 위해 new 연산자가 생성자를 호출한다.

Bicycle myBike = new Bicycle(30, 0, 8);
new Bicycle(30, 0, 8);

이 부분은 객체를 위한 메모리 공간을 만들고, 필드를 초기화한다.
Bicycle 은 생성자 한개뿐이지만 매개변수가 없는 다른 생성자를 가질 수 있다.

public Bicycle() {
    gear = 1;
    cadence = 10;
    speed = 0;
}
Bicycle yourBike = new Bicycle(); 

yourBike라는 새로운 Bicycle 객체를 만들기 위해 매개변수가 없는 생성자를 호출한다.

두 생성자는 다른 매개변수를 갖고 있기 때문에 Bicycle에서 선언되었을 수 있다.
Java는 메서드와 마찬가지로 매개변수의 수와 타입으로 생성자를 구분한다.
플랫폼이 구분할 수 없기 때문에 같은 클래스에서 매개변수의 숫자가 같고, 타입이 같은 생성자는 선언할 수 없다. 그렇게하면 컴파일 에러가 발생한다.

클래스에 생성자를 제공하지 않아도 되지만, 이 점은 유의해야한다. 컴파일러는 자동으로 생성자가 없는 클래스에 기본 생성자를 생성한다. 이 때, superclass에 인수가 없는 생성자가 없으면 컴파일러가 뭐라고 하기때문에 이를 확인해야 한다.
superclass가 없는 클래스는 매개변수가 없는 생성자가 자동 생성된다.

superclass 생성자를 직접 사용할 수도 있다. 앞서 사용한 MountainBike 클래스가 그랬다. (추후, 인터페이스와 상속에서 논의한다!)

생성자를 선언할 때, 생성자를 선언하는 다른 클래스를 제어하기 위해 접근제한자를 사용할 수 있다.
다른 클래스에서 어떤 클래스 생성자를 호출할 수 없으면, 호출하고 싶은 클래스 객체를 직접 만들 수 없다.

profile
프로그래밍 학습에 왕도는 없다! 내가 컴퓨터를 닮아갈때까지!

0개의 댓글