2011-08-17 7 views
4

언제 개체의 생성자에 인수를 전달해야합니까? 객체의 메서드에서 인수 대신 생성자에 전달할 기준은 무엇입니까?OOP Object 생성자 인수

답변

0

일반적으로 new 키워드 (언어에 따라 다를 수 있음)를 사용하여 클래스를 인스턴스화 할 때 클래스 생성자에 인수를 전달합니다.

예를 들어 질문을 다시 읽기에

MyClass class = new MyClass(arg1, arg2, arg3); 

(여기에 C/자바/C#을 스타일 말인가), 나는 절대적으로 필요한 자원에 대한 생성자 인수를 사용하는 경향이있다. 그렇게하면 개체에 특정 속성이나 리소스를 사용할 수 있어야합니다.

+0

"... 필수 리소스 ..."나는 그것에 대해 생각했지만 확실하지 않았습니다. – thom

1

내 개체가 매우 간단 할 때 (1 또는 2 개의 특성) 나는 이러한 인수로 생성자를 제공 할 수 있습니다.

하지만 대부분의 경우 기본 생성자와 setter로 내 특성을 설정합니다.

+0

좋아, 간단한 개체가 기준입니다 ... 감사합니다. – thom

+0

이것은 매우 강력한 설정이 아니며 nullPointer 오류가 발생할 수 있습니다. (그 사람이 세터와 모든 것을 설정해야한다는 것을 모르는 클래스를 사용하는 다른 사람을 상상해보십시오). – Rob

+0

좋은 점, 너무 많은 스프링 및 종속성 주입 ;-)하지만 종속성이있는 복잡한 객체의 경우에는 10 개의 인수가있는 생성자 대신 빌더 패턴을 사용합니다. – Cygnusx1

0

기본적으로 Constructor에서 개체의 모든 기본 구성 블록을 초기화하려고합니다. 하지만 때때로 객체는 많은 요소를 포함하므로 생성자에 대한 인수 목록을 너무 길게 만듭니다. 나는이 지침을 따른다 : 생성자에 대한 인수 목록이 5 개 요소 이상인 경우 새 객체의 초기화는 생성자 인수 & 집합 메소드로 나누어진다.

3

개체의 변경 불가능한 속성 인 항목을 생성자에 전달합니다. 가능한 경우 모든 객체 속성을 변경 불가능하게 만듭니다. 전체 범위로 가져 가면 전체 objet을 변경할 수 없게됩니다.

구성시 할당되는 변경할 수없는 속성은 다양한 경쟁 조건 (특히 멀티 스레드 환경에서)을 방지하고 개체가 항상 일관성을 유지하도록하여 많은 종류의 오류가 발생할 가능성을 제거합니다. 구성시 속성을 강제로 정의함으로써 광범위한 오류 검사 코드를 피할 수 있습니다. 전체 개체가 변경 될 수 없으면 동일한 개체를 공유 할 수있는 기회가 생겨 메모리 성능이 향상됩니다.

매개 변수가 개체의 변경 불가능한 속성이 아닌 경우 생성자에서 매개 변수를 할당하는 것은 단지 편리합니다. 일반적으로 setter를 지정해야 코드 복잡성을 줄일 수 있습니다 (setter가 필요하므로). 생성자가 매우 자주 호출되는 경우 매개 변수의 편의성이이 추가 복잡성에 가치가있을 수 있습니다.

+0

불변? 모델 객체에 대한 데이터베이스 연결과 비슷합니까? 고맙습니다. – thom

+1

변경할 수 없다는 것은 호출자가 볼 수있는 방식으로 객체를 변경할 수 없음을 의미합니다. 세 번째 문자에 대해 변경할 수없는 문자열을 요청하면 문자열의 전체 수명 동안 세 번째 문자가됩니다. 변경할 수있는 문자열은 시간이 지나면 바뀔 수있는 문자열입니다. 캐시와 같은 내부 데이터 구조는 변경 가능성의 일부가 아니므로 개체의 문자 적 ​​메모리가 절대로 변경되지는 않습니다. 그러나 바깥 세상으로부터, 당신은 언제나 똑같은 질문에 똑같은 답을 얻을 것입니다. http://en.wikipedia.org/wiki/Immutable_object –