DAY 9 (p.207-266 전자책기준)
📚 오늘 TIL 3줄 요약
적게 연결된 코드가 바꾸기 쉽다
열차사고
메서드와 속성들이 모두 연결되어 있는 것
묻지 말고 말하라 Tell, Don't Ask. TDA
데메테르 법칙 Law of Demeter. LoD
.점 하나로 엮어지는 것은 바뀌리라 생각해라
// 좋지 않다
amount = customer.orders.last().totals().amount;
유한 상태 기계 Finite State Machine. FSM
감시자 패턴 Observer Pattern
이벤트 발생시키는 감시대상과 이벤트에 관심있는 클라이언트 감시자로 이뤄진다
감시자가 감시대상에 등록해야하는 결함발생.
감시대상이 콜백 직접호출하므로, 동기적 특성상 감시대상이 계속 기다려야한다
이 문제는 3. 게시 구독으로 해결한다
게시 구독 pubsub
감시자 패턴을 일반화한 것 + 높은 결합도, 성능 문제 해결
반응형 프로그래밍과 스트림 그리고 이벤트
반응형 프로그래밍
값이 바뀌면 그 값은 참조한 다른 값이 반응하는 것
ex) React, Vue
스트림 Stream
이벤트를 일반적인 자료구조처럼 다룰 수 있게 한다
이벤트를 처리, 조합, 골라내는 등의 작업을 자료구조와 같은 방법으로 할 수 있다
비동기적으로 작동 가능
이벤트스트림은 이벤트가 발생할 때마다 생성된다
이벤트스트림은 동기적, 비동기적 처리를 공통 API로 감싸서 통합한다
Q . 폴더 안 파일 중에 줄 수가 가장 긴 파일 5개 찾는 프로그램 작성해주시오.
$ find . -type f | xargs wc -l | sort -n | tail -6 | head -5
디렉터리 이름
-파일명 목록 find
-줄 수와 파일명 목록 wc
-정렬된 목록 sort
-가장 긴 것 5개와 전체 줄 수 tail
-가장 긴 것 5개 head
프로그래밍은 코드에 관한 것이지만, 프로그램은 데이터에 관한 것이다
변환 찾기
하향식 접근 - 입력을 출력으로 바꿔가기
ex) Elm, F#, 스위프트 |>, 클로저 ->와 ->>, R은 %>%
Q . 몇 개의 알파벳으로 3,4글자 단어 목록 생성하기
word
|> all_subsets_longer_than_three_characters()
|> as_unique_signatures()
|> find_in_dictionary()
|> group_by_length()
요구사항 달성을 위해 앞 변환에서 입력을 받아 처리한 결과를 다음 변환으로 넘겨준다. 하지만 객체 지향 프로그래밍 경험이 많다면 데이터를 숨기고 객체안에 캡슐화한다고 느낄 것이다. 이런 객체들은 서로 상태를 변경하므로 결합도가 높아져 변경하기 어려운 요인이 된다. 그런데 변환에선 이런 사고를 뒤엎는다
변환 사이에 값을 날 것으로 넘기지 않고, 래퍼역할을 하는 자료구조나 타입으로 값을 싸서 넘기기
- 표현 방식 정하기
- 각 변환 내에서 오류 처리
- 파이프라인에서 오류 처리
상속
1. 시뮬라 : 타입을 조합하는 방법 ex)C++, Java
2. 스몰토크: 동작을 다양하게 구성하는 방법 ex)Ruby, JS
객체 지향 개발자가 상속을 사용하는 이유
1. 타입싫어서 = 입력하는 글자 수 줄이려고, 부모-자식 클래스로 넘김
2. 타입좋아서 = 상속으로 클래스 간 관계를 표현한다
=== 이 두가지 모두 문제있음
==> 1은 결합도 문제, 2는 다중상속 문제
상속세를 내지마!
<상속 필요 없는 이유>
1. 인터페이스와 프로토콜 : 상속없이도 다형성 가져다준다
2. 위임 :
3. 믹스인, 트레이트, 카테고리, 프로토콜 확장 등
YAML, JSON
우리는 서비스 API 뒤에서 관리하는 것을 선호한다
유한 상태 기계p.218부분이 잘 이해가 안가서 나중에 다시 읽어봐야 겠다. 변환에 대한 부분도 명확하게 이해하진 못했다. 계속 다시 읽어보고 자료를 찾아야겠다. 그리고 상속하지 않는 것과 결합을 낮추는 방법을 다시 한 번 인지하게 됐고 외부설정에 대한 필요성도 느끼게 됐다. 이론적으론 적용에 필요성을 알게 됐는데 막상 어떻게 적용해야 될지는 감조차 오지 않는다. 이 몫도 앞으로 해나가야할 과제로 생각했다. 일단은 책에서 말하는 필요준비물들을 주구절절 요약해나가고 있는 TIL인데, 나중에 내 TIL을 봤을 때 키워드를 중심으로 하나씩 직접 실전에 적용해봐야 이 책이 큰 밑거름이 될 것으로 생각한다. 솔직히 아직까진 어떻게 하는지 모르겠다. 마치 문제풀이를 모르는 것같은 기분이다. 그래도 앞으로 차근차근 하는 수 밖에.. 파이팅