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