- 변수를 private으로 하는 이유는남들이 변수에 의존하게 하고싶지 않기 떄문이다.
-
자료 추상화
- 추상 인터페이스를 사용해 사용자가 구현을 모른채 자료의 핵심을 구현할수 있어야
- 진정한 클래스다.
- 자료를 세세하게 공개하기 보다는 추상적인 개념으로 표현하는 것이 좋다.
- 인터페이스나 조회 설정 함수만으로는 추상화가 이뤄지지 않는다.
- 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다.
- 아무 생각없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.
-
자료/객체 비대칭
- 객체는 추상화 뒤로 자료를 숨긴채 자료를 다루는 함수만 공개한다.
- 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.
- 객체지향 코드에서는 어려운 변경은 절차적인 코드에서 쉽고
- 절차적인 코드에서 어려운 변경은 객체지향 코드에서 어렵다.
- ( 나는 아직 까지 절차지향에서 벗어나지 못하고 있었다. )
-
디미터 법칙
-
모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙
-
위에서 봣듯이 객체는 자료를 숨기고 함수를 공개한다.
-
객체는 조회 함수로 내부 구조를 공개하면 안된다는 의미다.
-
디미터 법칙은 클래스C의 메서드f는 다음과 같은 객체의 메서드만 호출해야 한다고 주장한다.
- 클래스 C
- f가 생성한 객체
- f 인수로 넘어온 객체
- C인스턴스 변수에 저장된 객체
-
디미터 법칙은 메소드 체이닝을 사용하지 말라고한다.
-
기차 충돌
- 메소드체이닝을 기차충돌이라고 부른다고 한다.
- 객체가 한줄로
-
잡종 구조
- 절반은 객체 절반은 자료 구조인 잡종 구조
- 되도록 피하는 것이 좋다.
-
구조체 감추기
- 객체에게 뭔가를 시켜야지 객체의 내부구조를 보이게 해선 안된다.
- ( 어렵다 )
-
자료 전달 객체
-
DTO 라고도 한다.
-
bean 구조 이며 데이터베이스에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환하는 일련의 단계에서 가장 처음으로 사용되는 구조체다.
-
DTO의 private 변수를 조회 설정 함수로 조작한다는 것을 작가 할아버지는 사이비 캡슐화로 보고있으며 별다른 이익을 제공하지 않는다고 한다.
-
( 난 여태까지 이렇게 해왔었는데 잘못된 것이였는가 ? )
-
활성 레코드
- DTO와 같으며 대개 save와 find 같은 탐색함수도 제공한다.
- 활성 레코드는 데이터베이스 테이블이나 다른소스에서 자료를 직접 변환한 결과다.
- 활성레코드는 자료 구조로 취급한다.
결론
- 객체는 동작을 공개하고 자료를 숨긴다.
- 기존 동작을 변경하지 안ㅇ흐면서 객체 타입을 추가하기는 쉬운 반면
- 기존 객체에 새동작을 추가하기는 어렵다.
- 자료구조는 별다른 동작 없이 자료를 노출한다.
- 그래서 기존 자료구조에 새 동작을 추가하기는 쉬우나
- 기존 함수에 새 자료구조를 추가하기는 어렵다.
-
-