카테고리 없음

실용주의 프로그래머 TIL (Day-8)

devmomori 2022. 3. 30. 03:16

오늘 TIL 3줄 요약

  • 빠른 변화 속도를 따라가려면 가능한 한 느슨하고 유연한 코드를 작성해야 한다. 이를 위한 되돌릴 수 있는 의사결정 방법들을 설명한다.
  • 결합도(coupling)를 낮추는 방법들
  • 클래스 상속에 관한 문제와 이를 해결하기 위한 몇가지 방법들

 

TIL (Today I Learned) 날짜
2022.03.29 - 2022.03.29



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


책에서 기억하고 싶은 내용

  1. 우리가 어떤 것 하나만을 골라내려고 해도, 그것이 우주의 다른 모든 것과 얽혀 있음을 깨닫게 된다 - 존 유어(John Muir)<나의 첫여름>
  2. 결합도가 높으면 이리저리 연결되어 있어서 여러 가지를 동시에 바꾸어야 한다.
  3. 소프트웨어의 구조는 유연해야 한다. 그리고 유연하려면 각각의 부품이 다른 부품에 가능한 한 조금만 연결되어야 한다. 결합은 추이적이다. 즉 A가 B, C와 결합이 되어 있고, B는 M, N 그리고 C는 X, Y와 결합되어 있다면, 결국 A는 B, C, M, N, X, Y 모두와 결합되어 있는 것이다.
  4. 열차사고에 관한 문제점과 연쇄 그리고 파이프라인 (함수형 프로그래밍이 생각났다.)
  5. 전역 데이터는 여러 가지 방법으로 결합도를 높인다.
  6. 직접적으로 아는 것만 다루는 부끄럼쟁이 코드를 계속 유지하자.
  7. 반응적인 애플리케이션을 작성하는 법 -> 이벤트 
    • 이벤트는 무언가 정보가 있다는 것을 의미
    • 정보는 사용자 버튼 클릭 혹은 갱신될 때 외부에서 올 수 있음
    • 내부에서 올 수도 있음 결국, 이런 이벤트에 반응하도록 잘 만들게 된다면 진짜 세상에서 더 잘 작동하는 애플리케이션이 탄생
    • 어떻게 이벤트에 잘 반응하는 애플리케이션을 만들 수 있을까?
  8. 이벤트에 잘 반응하는 애플리케이션을 만들기 위한 네 가지 전략
    • 유한 상태 기계 (FSM)
    • 감시자 패턴 (Observer)
    • 게시-구독 (Pub-Sub)
    • 반응형 프로그래밍과 스트림
  9. 자신이 하고 있는 걸 하나의 과정으로 서술할 수 없다면, 자기가 뭘 하고 있는지 모르는 것이다. - W. 에드워즈 데밍(W. Edwards Deming)
  10. $ find. -type f | xargs wc -l | sort -n | tail -5 (page. 208)
  11. 더는 상속을 쓸 필요가 없게 해 주는 세 가지 기법
    • 인터페이스와 프로토콜
    • 위임
    • 믹스인과 트레이드
  12. 외부 설정으로 애플리케이션을 조정할 수 있게 하라 (외부에서  필요한 값들을 주입)
    • 기본적으로 나중에 바뀌리라 알고 있는 것
    • 소스 코드 본체 바깥에 표현할 수 있는 것을 찾자
    • 지나치게 하지는 말자

오늘 읽은 소감? 떠오르는 생각?

예전 부트캠프에서 프로그래밍을 배울 때가 생각났다. 프로젝트를 진행하면서 다루었던 옵저버 패턴과 프레임워크 없이 자바스크립트로 과제를 만들며 공부했었던 Pub-Sub 패턴 그리고 함수형 프로그래밍까지 많은 용어들이 이번 챕터에 나왔다. 누군가에게 관련 패턴들을 명확하게 설명하기에는 아직 부족하지만, 있고 있었던 개념들을 다시 한번 정리할 수 있음에 만족한다.

 

반응형 프로그래밍과 스트림 주제에서 나온 rxjs를 사용한 예시들이 꽤나 깔끔해서 나중에 한번 써봐야겠다는 생각이 들었다.

 

70년대에도 유닉스 명령어를 통해 원하는 결괏값을 $ find. -type f | xargs wc -l | sort -n | tail -5 이 명령어로 깔끔하게 가져올 수 있음에 놀랐다. 디렉터리 안에 있는 가장 줄 수가 많은 파일 다섯 개를 찾는 건데, 나는 아마 Node.js를 켜고 코드를 작성했을 텐데...  충격받았다. (아는 만큼 보인다는 게 이런 걸까?).

 

책에서도 언급한다. '코드에만 집중하면 핵심을 놓칠 수 있다고 본다'. 프로그램이란 Input과 Output이고, 이렇게 간단하게 생각해보면 고민거리인 세부 사항들이 사라진다.  위의 명령어 또한 각각의 입출력을 조립한 하나의 프로그램이다.

 

기능 구현에 급급하지 말고, 각 기능을 구현하기 위한 일련의 스텝들을 설계하고 좀 더 효율적으로 코드를 짜야겠다는 생각이 번뜩 들었다. 역시 설계가 80% 아니 90%이다. 사실 이 부분은 설계에 대한 이야기보다 파이프라인에 대한 이야기가 더 많았지만, 여러 가지 생각이 들었다는 걸 말하고 싶었다.

 

또 클래스 상속에 관한 부분에서 공감하면서 읽을 수 있었다. 프레임워크 없이 자바스크립트로 Core Component를 상속하여 내부 메서드들을 자식 컴포넌트들이 사용할 수 있게 여러가지를 연습한 적이 있었다. 이 때 Core Component의 멤버 변수나 메소드 이름을 바꾸니, 자식 컴포넌트에서도 수정할게 산더미였다. 

 

기억하자.

  • 인터페이스와 프로토콜
  • 위임
  • 믹스인과 트레이드

 

믹스인은 이번 챕터를 통해 처음 알게 되었다. 여러 다른 클래스를 결합하는 방식이 아닌, 단순히 기능을 공유하기 위한 목적을 가졌다. 기존의 것과 새로운 것의 기능 집합을 합치는 것이다. 좀 더 자세히 알아봐야겠다. 다른 것들도 마찬가지

 

실용주의 프로그래머를 읽어서 그런지... 요즘 들어서 DRY, ETC, 결합성, 네이밍 등 많은 부분을 고민하면서 코드를 짜게 된다. 함수들을 똑 떼서 조립하고, 언제든지 불필요한 부분을 뗄 수 있게 고민하게 된다. 좋은 방향으로 프로그래밍 사고방식(?)이 성장하고 있다는 느낌적인 느낌이다.

 

궁금한 내용 또는 잘 이해되지 않는 내용과 공부할 것

  • 인터페이스와 프로토콜
  • 위임
  • 믹스인과 트레이드
  • 유한 상태 기계 (FCM)

공부할게.. 많다.