wonslee / object-study

📔오브젝트 예제 코드를 따라 공부, 토론하는 스터디 그룹
0 stars 1 forks source link

5장 - 다형성을 적용하면 변경 보호는 그냥 따라오는 느낌이 맞을까요? #21

Open kmw2378 opened 6 months ago

kmw2378 commented 6 months ago

교재에선 DiscountConditionMovie 사이의 결합도 문제를 아래와 같이 해결하였습니다.

이 예제에선 다형성 패턴을 적용하면서 변경 보호도 적용된 케이스라 생각합니다! 더 나아가 변경 보호는 일반적으로 다형성을 사용했을 때 기본적인 이점 정도로 느껴졌습니다. 이 부분에 대해 다들 어떻게 생각하시는지 궁금해요!

sami355-24 commented 6 months ago

저는 다형성을 적용하는 이유를 '변경에 유연하게 만들게 하기 위함' 이라 생각합니다.

그렇기에 민우님이 말씀하신 내용에 대해 저는 아래와 같이 생각합니다.

다형성을 적용(결과)하면 변경 보호(원인)는 그냥 따라오는 느낌이 맞을까요?

즉 다형성을 적용해서 변경에 대해 보호가 된 것이 아닌 '변경에 대한 보호를 하기 위해 다형성을 적용했다' 고 생각합니다.

wonslee commented 6 months ago

민우님 의견에 동의합니다!

변경 보호 패턴은 다형성 패턴의 모집합이라는 생각이 듭니다. 타입에 따라 분리하고 책임을 할당하는 것은 아무리 봐도 변화 지점을 식별하고 인터페이스를 형성하는 모습이어서요.

다형성 패턴과 변경 보호 패턴이 같은건 아닐까?라는 생각을 잠깐 해봤는데 그건 아니네요.
가령 데이터 중심 설계에서 다뤘던 데이터 캡슐화를 반례로 들 수 있는데, 이는 다형성 패턴은 아니되 변경 보호 패턴인 경우라고 생각해요.
다형성 패턴은 "타입"에 대한 것이기 때문에 데이터 캡슐화는 해당되지 않죠.

반면에 "변화 지점들을 식별하고 주위에 안정된 인터페이스를 형성하도록 책임을 할당하라"라는 변경 보호 패턴에는 포함되기 때문에 데이터 캡슐화는 변경 보호 패턴이라고 생각합니다.

@sami355-24 님 말씀에 동의합니다. 변경 보호 패턴은 엄청 큰 개념 같고 어떻게 보면 캡슐화 그 자체라는 생각도 들어요.

데이터 캡슐화 부분을 읽으면서 캡슐화의 종류에 대해 찾아봤는데, 종류가 4가지가 있더라구요. : 데이터 캡슐화, 메서드 캡슐화, 객체 캡슐화 (= 합성), 서브타입 캡슐화 (= 다형성)

이걸 보면 캡슐화는 다형성의 모집합이고, 변경 보호 패턴은 캡슐화를 추구하는 패턴이니, 변경 보호를 위해 다형성을 적용했다라고 볼 수 있겠다고 생각합니다.