Community

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

← Go back
TIL 6장(객체와 자료 구조)
#clean_code
2년 전
506


TIL (Today I Learned)

// 2022.03.01

오늘 읽은 범위

// 6장.객체와 자료 구조

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

  • 자료 추상화

    - 변수를 private으로 선언 하더라도 각 값마다 조회 함수와 설정 함수를 제공한다면 구현을 외부로 노출하는 셈이다. 그보다는 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.

  • 자료/객체 비대칭

    - 절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고처야 한다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다.

  • 디미터 법칙

  • - 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다. 앞 절에서 봤듯이 자료를 숨기고 함수를 공개한다. 즉 객체는 조회 함수로 내부 구조를 공개하면 안 된다는 의미이다.

  • 기차 충돌

    - final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

    위와 같이 여러 객차가 한 줄로 이어진 기차처럼 보이는 코드를 기차 충돌이라 부른다. 일반적으로 조잡한 방법이라 여겨지며 만약 객체라면 내부 구조를 노출하므로 디미터 법칙을 위반하므로 피해야 한다.

  • 잡종 구조

    - 이런 혼란으로 절반은 객체, 절반은 자료 구조인 잡종 구조가 나온다. 잡종 구조의 공개 조회/설정 함수는 변수를 그대로 노출한다. 이런 잡종 구조는 새로운 함수는 물론이고 새로운 자료 구조도 추가하기 어렵다.

  • 자료 전달 객체(DTO)

    - 자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스다. 이런 자료 구조를 자료 자료 전달 객체라 부르며 굉장히 유용한 구조체이다. 좀 더 일반적인 형태는 '빈'구조다. 빈은 비공개(private) 변수를 조회/설정 함수로 조작한다.

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

  • 다행이도 많은 선배 개발자들이 변수는 비공개로 선언하고 함수를 통해 변수를 설정하도록 프로그램을 짜라 가르쳐 나는 해당 습관을 길러왔다. 하지만 이런 코드가 어째서 좋은지 왜 이런 번거로운 함수를 만들어야 하는지를 알지 못했다. 이번 클린코드를 통해 이 궁금증을 해소하게 되었다.