Replies: 3 comments 3 replies
-
|
객체의 생성과 사용이 무엇인지에 대해 자세히 먼저 생각해볼 수 있을거 같습니다. 객체의 생성먼저 객체의 생성에서는 그 객체가 생성되기 위한 모든 정보들을 알아야 하고 그 정보들을 담고 있다고 생각할 수 있을거 같습니다. 객체의 사용객체의 사용은 생성된 객체의 인터페이스를 통해 접근하고 어떤 메시지를 던지고, 어떤 매개변수를 통해 어떤 반환값을 받을 것인지에 대한 정보가 필요하다고 볼 수 있을거 같습니다. 결국 생성과 사용에서는 규모가 커질 경우, 두 책임의 무게가 커진다면 3가지 문제점이 있을거 같습니다.
|
Beta Was this translation helpful? Give feedback.
-
결론결론: 객체 생성 자체가 문제이기 보다는, 사용할 객체의 구체타입을 내부에서 직접 결정하는 걸 지양해야한다.
사고 흐름객체를 생성하는 것도 객체의 책임이라 볼 수 있습니다. 다만 여기서 말하는 public Movie(String title, Duration runningTime){
this.title = title;
this.runningingTime = runningingTime;
}객체가 자기 자신의 상태를 초기화하고, 올바른 상태로 만드는 건 객체의 책임입니다. 외부에서 전달받은
그래서 저는 책에서 말하는 "객체의
이에 어긋나는 예시가 협력 객체의 구체타입까지 직접 결정해버리는 경우입니다. public Movie(String title, Duration runningTime){
this.title = title;
this.runningingTime = runningingTime;
this.discountPolicy = new AmountDiscountPolicy(); // Movie 내부에서 협력할 객체의 구체 타입을 알고있음.
}만약 AmountDiscountPolicy을 PercentDiscountPolicy로 변경한다면, Movie 내부 코드를 수정해야합니다. 여기서 구체화될 수록 변경에 취약해질 수 있음을 관찰할 수 있습니다. 위에서 드러난 구체화(구체타입 결정)를 다음과 같이, 외부로부터 주입받으면, Movie의 수정 없이, Policy를 변경할 수 있습니다. public Movie(String title, Duration runningTime, DiscountPolicy policy){
this.title = title;
this.runningingTime = runningingTime;
this.discountPolicy = policy;
}
// new Moive("아이언맨", "160", new AmountDiscountPolicy());
// new Moive("아이언맨", "160", new PercentDiscountPolicy());여기서 외부로부터 주입받고자, 파라미터로 빼는 것 말고도 주입받고자 하는 대상에 다형성이 적용되어 있어야한다고 생각합니다. |
Beta Was this translation helpful? Give feedback.
-
답변
객체 의존을 생성자 인터페이스로 공개하자.
왜 생성자 시그니처로 공개하는 것이 객체지향적인가?저는 2가지 이점이 있다고 생각합니다. 바로 외부 의존성 표현과 다형성의 활용 장점입니다.
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
[오브젝트 9장] - p287
객체를 생성하는 것도 결국 객체의 책임이 아닌가요?
그렇다면 객체의 생성과 사용을 굳이 분리해야 하는 이유는 무엇일까요?
Beta Was this translation helpful? Give feedback.
All reactions