[노개북] 클린코드 TIL (2022.02.01)

janjanee·2022년 8월 1일
0
post-thumbnail

TIL (2022.02.01)

DAY 12

🔖 오늘 읽은 범위 : 6장, 객체와 자료구조(p.118 ~p.128)


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

  • 자료 추상화 (p.119)
    • 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.
    • 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다.
    • 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게고민해야 한다. 아무 생각 없이
      조회/설정 함수를 추가하는 방법이 가장 나쁘다.
  • 자료/객체 비대칭 (p.122)
    • 객체 지향 코드에서 어려운 변경은 절차적인 코드에서 쉬우며, 절차적인 코드에서 어려운 변경은
      객체 지향 코드에서 쉽다!
    • 분별 있는 프로그래머는 모든 것이 객체라는 생각이 미신임을 잘 안다. 때로는 단순한 자료 구조와
      절차적인 코드가 가장 적합한 상황도 있다.
  • 디미터 법칙 (p.123 ~ 126)
    • 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다.
    • 클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 한다.
      • 클래스 C
      • f가 생성한 객체
      • f 인수로 넘어온 객체
      • C 인스턴스 변수에 저장된 객체
    • 기차충돌 - 디미터 법칙을 어기는 코드 예시
      final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
    • 잡종구조
      • 절반은 객체, 절반은 자료구조
      • 잡종 구조는 되도록 피하는 편이 좋다. 프로그래머가 함수나 타입을 보호할지 공개할지 확신하지
        못해(무지해) 어중간하게 내놓은 설계에 불과
    • 구조체 감추기
      • 객체라면 뭔가를 하라고 말해야지 속을 드러내라고 말하면 안된다.
      • ctxt에게 임시 디렉토리의 경로를 얻지 말고, 임시 파일을 생성하라고 시키면 어떨까?
  • 자료 전달 객체 (p.126)
    • 자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스다.
    • 이런 자료 구조체를 때로는 자료 전달 객체 (Data Transfer Object, DTO)라 한다.
    • 흔히 DTO는 데이터베이스에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로
      변환하는 일련의 단계에서 가장 처음으로 사용하는 구조체다.
  • 결론 (p.128)
    • 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다.
    • 새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 더 적합하다.

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

  • 객체지향에 대해 공부하다 모든 걸 전부 객체지향스럽게 작성해야 하는 건가 라고 생각했는데 책 결론 부분에 각각 상황에 맞춰 적합한 것을 선택해야 한다는 것을 배웠다.
  • DTO를 사용할 때 롬복 라이브러리를 사용해서 생각 없이 getter나 setter를 만들었다. 데이터베이스에서 읽어온 데이터를 곧바로 DTO에 설정하거나 DTO와 Entity 간 Convert가 필요한 상황에 각 라이브러리들이 getter/setter 메소드를 이용하여 DTO를 조작하기 때문이다. 따라서 라이브러리를 사용하려면 필수적으로 getter/setter를 만들어줘야 한다. 자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스라 했는데 대부분 라이브러리나 프레임워크가 빈(bean) 구조를 선택하고 있기에 내가 getter / setter를 만들고 있던거구나! 또또 생각없이 만들었네...

기록하신 TIL을 공유해주세요 - TIL 출석표

클린코드_스케쥴러_TIL 출석표 (노개북1기)

소감 3줄 요약

  • 상황에 맞게 객체와 자료구조를 잘 사용하자.
  • 객체한테 달라하지 말고 일을 시키자!
  • 구현은 감추고 추상화를 하자.
profile
얍얍 개발 펀치

0개의 댓글