개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
결합도는 줄이되 응집도는 높이자
이벤트를 처리하는 4가지 패턴
상속의 문제점과 그에 따른 3가지 대안
TIL (Today I Learned) 날짜
2022.03.26
오늘 읽은 범위
5장 결합도 줄이기
책에서 기억하고 싶은 내용을 써보세요.
Topic 28 결합도 줄이기
높은 결합도는 변경의 적이다. 결합도가 높으면 이리저리 연결되어 있어서 여러가지를 동시에 바꿔야 하기 떄문이다.
하드웨어 구조는 형태가 바뀌지 않아야하지만, 소프트웨어 구조는 유연해야한다.
열차 사고 : 연쇄 메서드 호출
- TDA(Tell, Don't Ask) 원칙은 다른 객체의 내부 상태에 따라 판단을 내리고
그 객체를 갱신해서는 안된다는것이다.
- 디미터 법칙 : 메서드 호출을 엮지 말라. 무언가에 접근 할때 "."을 딱 한번만
쓰려고 노력해 보라.
- 연쇄와 파이프라인 : 파이프라인은 숨겨진 구현 세부 사항에 의존 하지 않기 때문에 결합도가 낮다.
글로벌화 : 정적인 것의 위험함
- 어디서나 접근할 수 있는 데이터는 교묘하게 애플리케이션 컴포넌트 간의 결합을 만들어 낸다.
상속 : 왜 클래스 상속이 위험한가?
- 결합된 코드는 바꾸기 힘들다. 코드의 한 곳을 바꾸면 다른 곳에 여파가 미칠 수 있다.
Topic 29 실세계를 갖고 저글링하기.
유한 상태 기계(Finite State Machine) - 이벤트를 어떻게 처리할지 정의한 명세이다.
상태마다 그 상태일 때의 의미가 있는 이벤트를 나열, 다음 '현재 상태'를 정의한다.
하지만 상태 기계가 이벤트와 관련된 모든 문제를 해결하진 못한다.
감시자 패턴(observer pattern)- 이벤트를 발생시키는 쪽인 '감시 대상'과 이벤트에 관심이 있는 클라이언트인 '감시자'로 이루어진다. 모든 감시자가 감시 대상에 등록을 해야 하기 때문에 결합이 생긴다. 감시 대상이 콜백을 직접 호출하기 때문에 성능 병목이 될 수 있다.
게시 구독(Publish-Subscribe)는 감시자 패턴을 일반화한 것이다.
반응형 프로그래밍과 스트림 - 값이 바뀌면 그 값을 사용하는 다른 값이 '반응하는'것이다.
Topic 30 변환 프로그래밍
프로그래밍은 코드에 관한 것이지만, 프로그램은 데이터에 관한 것이다.
코드를 일련의 중첩된 변환으로 생각하는 접근 방식은 프로그래밍을 해방시킨다.
=> 상태를 쌓아 놓지 말고 전달하라.
Topic 31 상속세
상속의 문제점
- 결합이 너무 많다. 자식 클레스가 부모, 조상과 얽히게 된다. 상속도 일종의 결합이다.
- 복잡해진다. 클래스 사이의 미묘한 차이까지도 표현하기 위해 계층 위에 계층을 덧붙이다 보면 벽면 전체를 뒤덮는 괴물로 자라나게 된다.
상속의 대안 3가지
인터페이스와 프로토콜
위임
믹스인과 트레이드
Topic 32 설정
외부 설정을 사용하지 않는다면 코드는 적응 성이나 유연성을 어느정도 포기해야만 한다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
"여러분의 운명은 둘 중 하나이다. 바꿔야 하는 곳을 모두 찾아내느라 시간을 들이거나, 아니면 '딱 하나남' 바꾸고 결합된 다른 것들은 잊은 채 왜 프로그램이 죽는지 고민하느라 시간을 들이거나"
너무 공감 되는 문구고 너무 가혹한 운명이다. 작년쯤이였던거 같다. 도메인이 바꿔야하는 일이 있었다. 기존에 사용하는 모든 도메인을 찾았다. 꼼꼼하게 찾았고, 그리고 바꿨다. 모두 찾으라 진땀을 뺐다. 당연히 놓친 곳은 없을것이라고 생각했지만.. 누락된 부분이 있었고 급하게 리다이렉트로 처리했던 경험이 있다. 정확하게 말하면 우리는 바꿔야하는 모든 곳을 찾을 수 없다. 그렇기에 결합도를 줄이고 딱 하나만 바꿀수 있는 코드가 참 중요하다.
상속하는것처럼 편한건 없었다. 그리고 무엇보다 es6 class 문법에서는 interface를 제공하지 않는다. 그래서 큰 문제 없이 잘돌아간다고만 생각했었다. 문제로만 바라봤던 것들에 대해 확신을 하게 되었고, typescript를 적용하여 interface 사용해 불필요한 상속을 제거해야겠다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
디미터 법칙 : 다른 객체가 어떤한 자료를 가지고 있는지 속사정을 몰라야한다는 의미와, 여러 개의 도트를 사용하지 말라는 법칙으로도 많이 알려져 있다. (https://mangkyu.tistory.com/147)
파이프 라인 : 한 데이터 처리의 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조를 가리킨다. (https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8_(%EC%BB%B4%ED%93%A8%ED%8C%85))
다중 상속 : 어떤 클래스가 하나 이상의 상위 클래스로부터 여러가지 행동이나 특징을 상속받는 것을 말함. [다중상속을 해서는 안된다!](https://ko.wikipedia.org/wiki/%EB%8B%A4%EC%A4%91_%EC%83%81%EC%86%8D)
인터페이스 : 서로 다른 두개의 시스템, 장치 사에서 정보나 신호를 주고받는 경우의 접점이나 경계면
감시자 패턴과, 게시 구독 패턴 이 두패턴에 차이점은 무엇일까?
오늘 읽은 다른사람의 TIL