2012-04-12 2 views

답변

8

아니오. 원하는만큼 생성자를 가질 수 있으며 반드시 기본 생성자가 필요하지는 않습니다. 생성자는 클래스의 목적에 맞아야합니다. 이것이 유일한 우수 사례입니다.

+0

그래서 대답은 '좋은 습관은 아니지만'의존성 삽입에는 매개 변수가없는 생성자가 필요하다. – hidarikani

+0

의존성 주입에는 매개 변수없는 생성자가 필요하지 않으며 "생성자 삽입"에 대한 정보가있다. – samlewis

1

아니요, 전혀 아닙니다. 디폴트 또는 "인수 없음"생성자는 클래스가 가질 수있는 유용한 기능이지만 종종 생성자가 아니라 사용 가능한 생성자 중 하나로 만 사용됩니다. 건설 중 물체의 중요한 불변성을 확립하는 것은 좋은 것일 뿐이고, 인수를 가진 생성자는 종종 이것을 달성하는 데 필요한 부분입니다.

1

아니요. Dependency Injection과 같은 디커플링 메커니즘을 사용할 때 생성자의 매개 변수는 불변의 종속성을 정의하기에 완벽한 장소입니다. 또한 객체에 대한 다른 불변의 매개 변수는 생성자에 포함되어야합니다.

3

다른 생각이 있습니다. JavaBeans 패턴은 기본 생성자와 getters 및 setters가 객체를 마무리 할 것을 기대합니다. 그러나이 경우 인스턴스가 림보 (limbo) 상태가 될 수 있습니다 (자세한 내용은 Josh Bloch의 Effective Java 참조).

생성자 매개 변수는 클래스의 인스턴스를 만드는 데 필요한 인스턴스를 제공하는 데 필요한 "마법"을 방지합니다 (종속성 주입이라고도 함).

1

대답은 예 또는 아니오가 아닙니다. 의존적입니다.

매개 변수화 된 생성자는 불변 (final) 값으로 개체를 초기화하는 데 사용되는 경우가 많습니다. 내 마음에 가장 먼저 들어오는 것은 다음과 같은 예입니다.

public class Car { 
    public Car(String chassisCode) {...} 

    public String getChassisCode(); 

    public String getLicenseNumber() {...} 
    public void setLicenseNumber(String value) {...} 
} 

번호판 등록 번호는 자동차 수명주기 중에 변경 될 수 있으므로 get/set 속성으로 구현할 수 있습니다. 대신 섀시 등록 코드는 각 자동차마다 고유하며 은 변경할 수 없습니다.입니다. 자동차는 언제든지 번호판을 변경할 수 있지만, 번호판이나 소유자가 변경 될 때마다 섀시 번호는 변경 불가능하며 문서에 등록됩니다.

다른 경우에는 클래스의 "기본"동작을 얻기 위해 매개 변수없는 "기본"생성자가 필요할 수 있습니다. 예

public class LightSwitch { 
    private boolean state = false; //off 

    public LightSwitch() {} 

    public boolean getState(); 
    public void setState(boolean value); 
} 

이 경우 명시 적으로 스위치를 켜지 않으면 전등 스위치가 꺼져있는 것으로 간주됩니다.

+0

Google은 "프레임 번호" "섀시 번호": D –

+0

당신은 가장 좋은 설명을 주었지만 질문에 대한 대답은 'No it 's best practice' – hidarikani

관련 문제