diff --git "a/\352\260\225\354\227\260\354\243\274/1\354\236\245.md" "b/\352\260\225\354\227\260\354\243\274/1\354\236\245.md" new file mode 100644 index 0000000..adc137d --- /dev/null +++ "b/\352\260\225\354\227\260\354\243\274/1\354\236\245.md" @@ -0,0 +1,19 @@ +## 1. 협력하는 객체들의 공동체 +객체지향에서 가장 중요한 개념은 바로 역할, 책임, 협력이다. +- 객체는 각자의 역할이 있고 +- 그 역할에 맡는 책임이나 임무를 다하여 +- 다른 객체와 협력하는 과정을 통해 요청에 대해 응답한다. + +위와 같은 사실은 몇 가지 중요한 개념을 포함한다. +- 여러 객체가 동일한 역할을 수행할 수 있다. 역할은 대체 가능성을 의미한다. + - 공통된 내용을 포함한 인터페이스와, 그것을 실제로 구현한 클래스를 구분함으로써 DIP(의존 관계 역전)가 성립한다. + - Service는 Repository 구현체의 내용을 모른체, Interface에만 의존하고, Repository의 구현체가 Interface에 의존(상속)한다. +- 책임을 수행하는 방법은 자율적으로 선택할 수 있다.(다형성) + - [상속과 인터페이스 차이] https://velog.io/@rudwhd515/%EC%83%81%EC%86%8D-vs-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 + - 다형성 구현 방법 -> 상속의 코드 재사용성 < 인터페이스의 유연성 +- 객체의 내부와 외부가 명확히 구분된다. + - setter 지양 + - 핵심 규칙을 구현한 코드는 도메인 모델에만 위치 -> 규칙이 바뀌거나 규칙을 확장해야할 때 다른 코드에 영향을 덜 주고 변경 내역을 모델에 반영 + +즉, 1장에서 하고 싶은 말은 객체지향 프로그래밍의 핵심은 역할, 책임, 협력이고 +이를 위해서는 인터페이스 구현, 각자 역할의 영역 침범하지 않기에 주의하여 코드를 짜야한다. \ No newline at end of file