본문 바로가기

Books/오브젝트 (OOP)

(4)
[스터디] OOP - 상속과 코드 재사용 2021. 11. 25. 21:09 요약 상속을 통해 코드를 재사용하면 부모-자식이 강하게 결합된다. 특히 `super` 참조를 통해 자식에서 부모 클래스의 메소드를 직접 호출하면 두 클래스는 강하게 결합되고, 자식이 부모의 내부 구현을 알아야 하여 캡슐화를 위반한다. 높은 결합도는 변경에 취약한 클래스를 낳는데, 이를 취약한 기반 클래스 문제라고 한다. 취약한 기반 클래스 문제는 다음 세가지 문제를 야기한다. 1. 상속받은 부모 클래스의 메소드가 자식 클래스의 내부 구조에 대한 규칙을 깨트릴 수 있다. 2. 자식 클래스가 부모 클래스의 메소드를 오버라이딩하는 경우, 부모 클래스가 자신의 메소드를 사용하는 방법(내부 구현)을 자식이 알아야 한다. 3. 높은 결합도로 인해 자식 클래스와 부모 클래스의 구현을 fix하던가, 아니면 동시에 변경..
[스터디] OOP - 의존성 관리하기 2021. 11. 4. 20:58 의존성 어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이에 의존성이 존재한다고 말할 수 있다. class A implements I { methodOfA(b: B) { return b.methodOfB().filter((item) => item.chceked) } } class B { methodOfB(c: C) { return c.methodOfC() } } class C { methodOfC() {} } 위 예제의 클래스 A는 methodOfA 메소드에서 클래스 B를 인자로 받아 B에게 methodOfB 메시지를 전송한다. 이 경우, A는 자신의 작업을 수행하기 위해 B 객체를 필요로 하는데 이 경우 A는 B에 의존한다고 한다. 의존성은 변경과 관련이 있다. 의존되는 요소(B)가 변..
[스터디] OOP - 책임 할당하기 2021. 10. 25. 13:18 책임 주도 설계를 향해 아래 두 가지 원칙을 기억하고 따른다. 데이터보다 행동을 먼저 결정하라. 협력 문맥 속에서 책임을 결정하라. 협력 문맥 속에서 책임을 결정하라. 책임은 객체의 입장이 아니라 객체가 참여하는 협력에 적합해야 한다. 다시 말해, 메시지 전송자에게 적합한 책임을 말한다. ⌲ 따라서, 메시지 송신자는 메시지 수신자에 대한 어떠한 가정도 할 수 없다. (캡슐화) 객체가 수행할 책임이 정리될 때까지 객체의 상태에 대해 정의하지 않는다. GRASP 패턴 GRASP 패턴이란? General Responsibility Assignment Software Pattern의 약자로, 객체에게 책임을 할당할 때 지침으로 삼을 원칙들의 집합을 패턴 형식으로 정리한 것 설계 순서 1. 도메인 개념에서 출발하..
[스터디] OOP - 역할과 책임, 협력 2021. 9. 28. 22:16 조영호님의 '오브젝트'(2021) 의 3장을 읽으면서 요약한 것입니다. 많은 사람들이 객체지향 패러다임을 설계할 때 클래스를 어떻게 정의하고, 어떤 걸 상속할지 등등 구체적인 구현에 초점을 맞춘다. 그러나 객체지향의 핵심은 역할, 책임, 협력에 있다. 다시 말하면 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 것이 핵심이다. 협력이란 어떤 기능을 구현하기 위해 객체들 간 상호작용을 말한다. 책임은 객체가 협력에 참여하기 위해 수행하는 로직을 말한다. 이러한 책임들의 집합이 객체의 역할을 구성한다. 협력 객체지향 : 자율적인 객체들의 공동체 즉, 객체가 다른 객체에게 도움을 요청할 때 협력이 가능하다. ('메세지 전송'이라고도 한다.) * 메세지 !== 메서드이다. 객체는 메세지를 받고,..