자료 추상화
- 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스
- 객체에서 자료는 숨기고 자료를 다루는 함수만 제공
- 아무 생각 없이 get, set 함수를 추가하는 것이 가장 나쁘다 (선생님 swift의 private(set)은요...?)
자료/객체 비대칭(이해 못함)
- (자료구조를 사용하는) 절차적인 코드는 기존 자료구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.
- 절차적인 구조는 새로운 자료구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다. 객체지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다. (--> 새로운 함수를 추가하면 SRP를 위반하기 쉬울 것 같고, 그러면 클래스를 또 분리해야 할 필요성이 있으니까 이런 얘기를 하는 것 같기도..?)
디미터 법칙
- 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다. = 객체는 자료를 숨기고 함수를 공개 = 조회 함수로 내부 구조 공개 x (객체는 모듈이 원하는 일만 할 수 있도록 해야하는 것?)
자료 전달 객체
- 자료구조체의 전형적인 형태: 공개 변수만 있고 함수는 없음. (비즈니스 로직을 넣으면 안 됨)
클래스를 만들다보면 부득이하게 인스턴스를 외부에 공개할 때도 있고, 조회 함수를 만들 때도 있었는데 그런 것들을 하는 게 좋은 방향은 아니라는 걸 깨닫게 된 챕터. 클래스를 사용할 때는 필요한 부분만 딱 리턴하거나 원하는 일만 하도록 자료는 숨겨봐야겠다. 자료는 함수는 없고 변수만 있도록 만들기! (struct로 구현하던 자료구조들이 생각나는 대목이었다)