클래스를 디자인 할 때 매개 변수없는 생성자를 만들기 위해 노력해야합니까?OOP에서 매개 변수없는 생성자가 가장 적합한 것으로 간주됩니다.
답변
아니오. 원하는만큼 생성자를 가질 수 있으며 반드시 기본 생성자가 필요하지는 않습니다. 생성자는 클래스의 목적에 맞아야합니다. 이것이 유일한 우수 사례입니다.
아니요, 전혀 아닙니다. 디폴트 또는 "인수 없음"생성자는 클래스가 가질 수있는 유용한 기능이지만 종종 생성자가 아니라 사용 가능한 생성자 중 하나로 만 사용됩니다. 건설 중 물체의 중요한 불변성을 확립하는 것은 좋은 것일 뿐이고, 인수를 가진 생성자는 종종 이것을 달성하는 데 필요한 부분입니다.
아니요. Dependency Injection과 같은 디커플링 메커니즘을 사용할 때 생성자의 매개 변수는 불변의 종속성을 정의하기에 완벽한 장소입니다. 또한 객체에 대한 다른 불변의 매개 변수는 생성자에 포함되어야합니다.
다른 생각이 있습니다. JavaBeans 패턴은 기본 생성자와 getters 및 setters가 객체를 마무리 할 것을 기대합니다. 그러나이 경우 인스턴스가 림보 (limbo) 상태가 될 수 있습니다 (자세한 내용은 Josh Bloch의 Effective Java 참조).
생성자 매개 변수는 클래스의 인스턴스를 만드는 데 필요한 인스턴스를 제공하는 데 필요한 "마법"을 방지합니다 (종속성 주입이라고도 함).
대답은 예 또는 아니오가 아닙니다. 의존적입니다.
매개 변수화 된 생성자는 불변 (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);
}
이 경우 명시 적으로 스위치를 켜지 않으면 전등 스위치가 꺼져있는 것으로 간주됩니다.
Google은 "프레임 번호" "섀시 번호": D –
당신은 가장 좋은 설명을 주었지만 질문에 대한 대답은 'No it 's best practice' – hidarikani
- 1. 왜 매개 변수없는 생성자가 필요합니까?
- 2. 매개 변수없는 public 생성자가 있어야하며 그렇지 않습니까?
- 3. PhoneApplicationPage에 대한 매개 변수없는 생성자가 없습니다.
- 4. 웹 서비스 오류 '매개 변수없는 생성자가 없습니다.'
- 5. System.MissingMethodException :이 개체에 대해 정의 된 매개 변수없는 생성자가 없습니다.
- 6. ASP.NET MVC보기 Post 메서드로 게시하지 않고 매개 변수없는 생성자가 필요합니까?
- 7. System.MissingMethodException :이 개체에 대해 정의 된 매개 변수없는 생성자가 없습니다.
- 8. 이 개체에 대해 정의 된 매개 변수없는 생성자가 없습니까?
- 9. "System.Web.HttpContext에는 매개 변수없는 생성자가 없기 때문에 직렬화 할 수 없습니다."
- 10. XML 직렬화 가능 클래스에 매개 변수없는 생성자가 필요한 이유
- 11. 이 개체에 대해 정의 된 매개 변수없는 생성자가 없습니다.
- 12. org.codehaus.jackson.map.JsonMappingException : 형식에 적합한 생성자가 없습니다.
- 13. DataGridLength 매개 변수가없는 생성자가 문서화되지 않았습니다.
- 14. 매개 변수없는 생성자가없는 클래스가있는 Grensesnitt?
- 15. ListT 모나드 트랜스포머는 왜 버그가있는 것으로 간주됩니다 - 모나드 법이 깨지십니까?
- 16. 는 NULL 거짓과 동일한 것으로 간주됩니다 C++ (GCC, VS)에서
- 17. 는 왜 된 IQueryable로 카운트를 실행할 수없는 것으로 간주됩니다 사용
- 18. 나는 매개 변수없는 public 생성자를 가지고하지만 난 아직도 내가 한
- 19. CBO.FillCollection throwing "이 개체에 대해 정의 된 매개 변수없는 생성자가 없습니다." 오류
- 20. ASP.NET MVC Ninject/DI -이 객체에 대해 정의 된 매개 변수없는 생성자가 없습니다.
- 21. System.MissingMethodException :이 개체에 대해 정의 된 매개 변수없는 생성자가 없습니다. MVC4
- 22. Windows Azure, MVC3,이 개체에 대해 매개 변수없는 생성자가 정의되지 않았습니다.
- 23. 단순히 사이트를 복사 할 때이 객체에 대해 매개 변수없는 생성자가 정의되지 않았습니다.
- 24. JsonMappingException : FacebookProfile 유형에 적합한 생성자가 없습니다.
- 25. 캐슬 윈저에게 매개 변수없는 생성자를 호출하는 방법
- 26. 유형이 매개 변수없는 생성자를 제공하는지 어떻게 확인합니까?
- 27. Activate.CreateInstance가 '매개 변수없는 생성자 없음'으로 실패했습니다.
- 28. OOP에서 개체의 시간 속성입니까?
- 29. 일반 제한없이 매개 변수없는 생성자를 적용하는 방법이 있습니까
- 30. Ninject와 함께 매개 변수없는 컨트롤러 생성자를 사용 하시겠습니까?
그래서 대답은 '좋은 습관은 아니지만'의존성 삽입에는 매개 변수가없는 생성자가 필요하다. – hidarikani
의존성 주입에는 매개 변수없는 생성자가 필요하지 않으며 "생성자 삽입"에 대한 정보가있다. – samlewis