2023년 4월 19일 작성
Clean Code - 객체와 자료 구조를 구분하여 사용하기
객체와 자료 구조는 언뜻 보기에 비슷하지만, 사실은 서로 반대되는 특징을 가지고 있습니다.
자료 추상화
- 구현을 감추기 위해서는 추상화가 필요합니다.
- 변수 사이에 함수라는 계층을 넣는다고 해서 구현이 감춰지지는 않습니다.
- 변수를 private으로 선언 하더라도 각 값마다 조회 함수(getter)와 설정 함수(setter)를 제공한다면, 구현을 외부로 노출하는 것과 같습니다.
- 추상 interface를 제공하여 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 class라고 할 수 있습니다.
객체 & 자료 구조
- 객체와 자료 구조는 반대되는 특징을 가집니다.
객체 | 자료 구조 |
---|---|
추상화 뒤로 자료를 숨긴 채, 자료를 다루는 함수만 공개합니다. | 자료를 그대로 공개하며 별다른 함수는 제공하지 않습니다. |
동작을 공개하고 자료를 숨깁니다. | 별다른 동작 없이 자료를 노출합니다. |
객체 지향 code에 적합합니다. | 절차 지향 code에 적합합니다. |
새 객체 type을 추가하기 쉽습니다. | 새 동작을 추가하기 쉽습니다. |
기존 객체에 새 동작을 추가하기 어렵습니다. | 기존 함수에 새 자료 구조를 추가하기 어렵습니다. |
- 객체가 더 적합한 상항이 있고, 자료 구조가 더 적합한 상황이 있습니다.
Reference
- Clean Code (도서) - Robert C. Martin