실용주의 프로그래머 Day5

HYl·2022년 3월 26일
0

DAY 5

오늘 읽은 범위 : 5장 구부러지거나 부러지거나


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

결합도 줄이기

  • 높은 결합도는 변경의 적이다.
  • 소프트웨어의 구조는 유연해야 한다. 각각의 부품이 다른 부품에 가능한 한 조금만 연결되어야 한다.
  • 다음과 같은 결합의 증상을 놓치지 않도록 주의해야 한다.
    • 관계없는 모듈이나 라이브러리 간의 희한한 의존 관계
    • 한 모듈의 ‘간단한’ 수정이 이와 관계없는 모듈을 통해 시스템 전역으로 퍼
      져 나가거나 시스템의 다른 곳에서 무언가를 깨뜨리는 경우
    • 개발자가 수정하는 부분이 시스템에 어떤 영향을 미칠지 몰라 코드의 수
      정을 두려워하는 경우
    • 변경 사항에 누가 영향을 받는지 파악하고 있는 사람이 없어서 결국 모든
      사람이 참석해야 하는 회의

열차사고

  • 기차의 모든 객차가 서로 연결되어 있듯이 메서드나 속성들이 모두 연결되어 있다

묻지 말고 말하라 Tell, Don't Ask, TDA

이 원칙은 다른 객체의 내부 상태에 따라 판단을 내리고 그 객체를 갱신해 서는 안 된다는 것이다. 객체의 내부 상태를 묻는 것으로 인하여 캡슐화 encapsulation의 장점은 완전히 사라지고, 또 그 과정에서 구현에 대한 지식이 코드 여기저기로 퍼져 버린다

데메테르 법칙

데메테르라는 프로젝트를 수행하는 도중 개발자들에게 보다 깨끗하고 결합도가 낮은 함수를 작성하는 방법을 알려주기 위해 만들었다.

  • 메서드 호출을 엮지 마라.
  • 무언가에 접근할 때 “.”을 딱 하나만 쓰려고 노력해 보라. ‘무언가에 접근’한다
    는 건 중간 변수를 사용하는 경우까지 포함해야 한다.

글로벌화의 해악

  • 전역 데이터를 피하라.
  • 외부 리소스도 전역 데이터다
    • 전역적이어야 할 만큼 중요하다면 API로 감싸라.

상속은 결합을 늘린다

결국은 모두 ETC

직접적으로 아는 것만 다루는 부끄럼쟁이 코드를 계속 유지하라. 그러면 애플리케이션의 결합도를 낮게 유지할 수 있을 것이고, 결과적으로 코드를 바꾸기 쉬워질 것이다.

실세계를 갖고 저글링하기

그냥 일어나는 일은 없다. 일어나도록 만들어진 것이다.

실용주의 FSM 해부학

우리는 “초기 상태”에서 시작한다. 헤더 메시지를 받으면 “메시지 수신 중” 상태로 이행한다. 별표가 붙은 선의 의미는 초기 상태에서 헤더가 아닌 메시지를 받으면 “오류” 상태로 이행하고 끝난다는 것이다.
“메시지 수신 중” 상태에서는 두 가지 메시지를 받을 수 있다. 데이터 메시지를 받으면 현 상태에서 계속 메시지를 받고, 트레일러 메시지를 받으면 “완료” 상태로 이행한다. 그 밖의 다른 메시지를 받으면 “오류” 상태로 이행한다.

변환 프로그래밍

자신이 하고 있는 걸 하나의 과정으로 서술할 수 없다면, 자기가 뭘 하고 있는지 모르는 것 이다.
프로그램이 란 입력을 출력으로 바꾸는 것이라는 사고방식으로 돌아갈 필요가 있다. 이 렇게 생각하면 그동안 고민하던 많은 세부 사항이 모두 사라진다. 구조는 명 확해지고 더 일관적으로 오류를 처리하게 되어 결합도 대폭 줄어들 것이다.

상속세

당신이 원한 것은 바나나 하나였지만, 당신이 받은 것은 바나나를 들고 있는 고릴라와 정글 전체다.

더 나은 대안

더는 상속을 쓸 필요가 없게 해 주는 세 가지 기법을 소개하겠다.

  • 인터페이스와 프로토콜
    • 다형성은 인터페이스로 표현하는 것이 좋다.
    • 인터페이스와 프로토콜은 상속 없이도 다형성을 가져다준다.
  • 위임
  • 믹스인과 트레이트

설정

  • 외부 설정으로 애플리케이션을 조정할 수 있게 하라.
  • 정보를 일반 파일로 관리할 때는 널리 쓰이는 일반 텍스트 형식을 사용하는 추세다. 2021년 기준으로는 YAML과 JSON이 가장 많이 쓰인다.
  • 설정 정보를 API 뒤로 숨겨라.

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

결합도를 낮추기 위하여 현재도 고민이 많고 노력중이다.

상속 부분에서 객체지향에 대한 구절이 나왔는데, 자바스크립트에서 class라는 개념이 비교적 최신인 ES5에 추가되었다. 객체지향에는 상속, 다향성, 캡슐화, 은닉, 추상화에 대한 개념을 충분히 숙지하고 사용해야 한다.
이 부분에 대해서는 최근에 공부를 꾸준히 하고있는데, 역시 어렵다. 객체지향에 익숙해 지도록 전문서적, 글, 강의 등을 통하여 노력해야겠다.

profile
꾸준히 새로운 것을 알아가는 것을 좋아합니다.

0개의 댓글