Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL 6장.객체와 자료 구조
#clean_code
2년 전
757
1


TIL (Today I Learned)

2022.03.01

오늘 읽은 범위

6장.객체와 자료 구조

책에서 기억하고 싶은 내용을 써보세요.

  • 자료 추상화 ~변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다. 구현을 감추려면 추상화가 필요하다. 그저 (현식 논리에 치우처) 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 되지는 않는다. 그보다는 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. ~ 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다. 인터페이스나 조회/설정 함수만으로는 추상화가 이뤄지지 않는다. 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다. (119 p)

  • 자료/객체 비대칭 ~객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다. (119 p)

    (자료 구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 어렵다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.

    ~절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고처야 한다.

    객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다. ~복잡한 시스템을 짜다 보면 새로운 함수가 아니라 새로운 자료 타입이 필요한 경우가 생긴다. 이때는 클래스와 객체 지향 기법이 가장 적합하다. 반면, 새로운 자료 타입이 아니라 새로운 함수가 필요한 경우도 생긴다. 이때는 절차적인 코드와 자료 구조가 좀 더 적합하다. ~때로는 단순한 자료 구조와 절차적인 코드가 가장 적합한 상황도 있다. (122 P)

  • 디미터 법칙 ~객체는 자료를 숨기고 함수를 공개한다. 객체는 조회 함수로 내부 구조를 공개하면 안 된다는 의미다. (123 p)

  • 기차 충돌 ~여러 객체가 한 줄로 이어진 기차처럼 보이기 때문이다. 일반적으로 조잡하다 여겨지는 방식이므로 피하는 편이 좋다. (123p) ~위 코드를 사용하는 함수는 많은 객체를 탐색할 줄 안다는 말이다. ~하지만 단순한 자료 구조에도 조회 함수와 설정 함수를 정의하라 요구하는 프레임워크와 표준(예, '빈 bean')이 존재 한다. (124 p)

  • 잡종 구조 ~양쪽 세상에서 단점만 모아놓은 구조다. 그러므로 구조는 되도록 피하는 편이 좋다. 프로그래머가 함수나 타입을 보호할지 공개할지 확신하지 못해(더 나쁘게는 무지해) 어중간하게 내놓은 설계에 불과하다. (125 p)

  • 구조체 감추기 ~객체라면 뭔가를 하라고 말해야지 속을 드러내라고 말하면 안 된다. (125 p)

  • 자료 전달 객체 ~활성화 레코드에 비즈니스 규칙 메서드를 추가해 이런 자료 구조를 객체로 취급하는 개발자가 흔하다. 하지만 이는 바람직하지 않다. 그러면 자료 구조도 아니고 객체도 아닌 잡종 구조가 나오기 때문이다. ~활성화 레코드는 자료 구조로 취급한다. 비즈니스 규칙을 담으면서 내부 자료를 숨기는 객체는 따로 생성한다. (여기에서 내부 자료는 활성 레코드의 인스턴스일 가능성이 높다.) (127p)

  • 결론 ~객체는 동작을 공개하고 자료를 숨긴다. 그래서 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기는 쉬운 반면, 기존 객체에 새 동작을 추가하기는 어렵다. 자료 구조는 별다른 동작 없이 자료를 노출한다. 그래서 기존 자료 구조에 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료 구조를 추가하기는 어렵다. (어떤) 시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하다면 객체가 더 적합하다. ~우수한 소프트웨어 개발자는 편견 없이 이 사실을 이해해 직면한 문제에 최적인 해결책을 선택한다. (128 p)

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 클래스의 구조화가 중요하다.

  • "우수한 소프트웨어 개발자는 편견 없이 직면한 문제에 최적인 해결책을 선택한다."

  • 졸리다...

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

1 comment