2013-07-28 3 views
2

디자인 관점에서 메서드 인수를 제거하고 생성자 인수로 초기화 된 클래스 변수를 사용할 수있는 경우 생성자 인수를 사용하는 것이 더 좋은 경우는 언제입니까?생성자 인수 또는 메소드 인수?

+1

이러한 질문을하는 구체적인 예를 보여주십시오. 생성자 인수를 사용하여 객체의 상태를 초기화합니다. 메소드 인수를 사용하여 객체의 특정 메소드에 입력을 전달하십시오. –

+0

이것은 일반적인 디자인 질문입니다. 그것은 다소 모호하다. 그러나 적절한 수준의 세부 사항을 제공했다. 좋은 답변을 제공하기 위해 코드를 작성하지 않아도됩니다. 디자인은 코드를 작성하기 전에 발생합니다. – programm3r

+0

우리는 (글쎄, 나는) 당신이 묻고있는 것을 알아내는 구체적인 예를 필요로한다. 단지 설명을하는 것의 문제점은 언어 장벽과 여러분과 같은 파장에 있지 않은 사람들을 포함합니다. 둘 다 [so]와 매우 관련이 있습니다. – Dukeling

답변

4
  • 클래스의 오브젝트가 해당 매개 변수없이 완전히 초기화 된 것으로 간주 될 수없는 경우 생성자 인수를 사용하십시오. 예 : Employee 클래스를 만들고 Employee의 각 인스턴스가 이름을 가져야한다면 생성자에서 name을 매개 변수로 사용해야합니다. 또 다른 예는 열려는 파일의 이름을 지정하지 않고 File 클래스를 만들 수 없다는 것입니다.

  • 메서드의 컨텍스트에서만 관련이있는 매개 변수는 메서드 매개 변수로 전달되어야합니다. 예를 들어, List 클래스에 새 항목을 추가 할 수 있습니다. 이것은 내부적으로 Object의 상태를 업데이트 할 수 있지만이 클래스의 작동 방식입니다. 즉, 목록을 유지하기위한 내부 데이터 구조가 있으며 메서드는 해당 상태를 조작하기위한 것입니다.

  • 때로는 기본 프레임 워크에서 setter 메서드를 사용하여 상태를 초기화해야 할 수도 있습니다. 이는 Hibernate와 같은 ORM을 사용하거나 MVC 프레임 워크 (예 : Spring MVC)에서 웹 폼의 Model 객체와 같은 POJO Beans를 사용할 때 일반적으로 사용됩니다. 이러한 경우 클래스는 일반적으로 값 객체를 나타내며, 생성자에서 매개 변수를 프레임 워크로 전달하지 않는 일반적인 방법은 기본 no-arg 구성자를 사용하여 객체를 인스턴스화합니다.

  • 종속성 주입 프레임 워크를 사용할 때 Constructor를 사용하거나 setter 메소드를 사용하여 종속성을 주입 할 수 있습니다. 그러한 경우에는 필수 종속성에 대해 Constructor params를 사용하고 옵션 종속성에 setter를 사용해야합니다 (필수 사항은 아니지만). 당신은 그것을 지침으로 생각할 수 있습니다.