본문 바로가기
Choi solyi/책

실용주의 프로그래머 Assignment #08 - 5장. 구부러지거나 부러지거나

by SOLYI 2022. 3. 27.

오늘 TIL 3줄 요약

  • 결합도 줄이기
  • 설정데이터 - 정적 설정, 서비스형 설정
  • 이벤트

TIL (Today I Learned) 날짜

2022.03.26

오늘 읽은 범위

5장. 구부러지거나 부러지거나

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

  • 결합도 줄이기
    • 가능한 한 느슨하고 유연한 코드를 작성해야한다. 그렇지 않으면 코드는 금세 낡고 수정하기 어려워지고, 결국 기억 저편으로 사라질 것이다.
    • 유연함을 유지하는 한 가지 좋은 방법은 물론 가능한 한 코드를 적게 작성하는 것이다. 코드 수정은 새로운 버그가 생기는 계기이기도하다.
    • 높은 결합도는 변경의 적이다. 결합도가 낮은 코드가 바꾸기 쉽다.
    • 소프트웨어 구조는 유연해야한다.
    • 다음과 같은 결합의 증상을 놓치지 않도록 주의해라
      • 개발자가 수정하는 부분이 시스템에 어떤 영향을 미칠지 몰라 코드의 수정을 두려워하는 경우
      • 변경 사항에 누가 영향을 받는지 파악하고 있는 사람이 없어서 결국 모든 사람이 참석해야 하는 회의 등..
  • 전역 데이터는 여러가지 방법으로 코드의 결합도를 높인다.
    • 싱글턴도 전역데이터다
    • 수정가능한 외부 리소스는 모두 전역데이터다.
    • 전역적이어야 할 만큼 중요하다면 API로 감싸라
  • 상속은 결합을 늘린다
  • 이벤트
    • 유한 상태 기계 : 이벤트를 어떻게 처리 해야할지 정의한 명세를 의미한다. 정해진 상태들이 있고 그 중 하나가 '현재 상태'이다. 상태마다 그 상태일때 의미가 있는 이벤트들을 나열하고, 이벤트 별로 다음 '현재 상태'를 정의한다.
    • 감시자 패턴 : 이벤트를 발생시키는 쪽인 '감시대상'과 이벤트에 관심이 있는 클라이언트인 '감시자'로 이루어진다. 감시자는 관심있는 이벤트를 감시 대상에 등록한다. 보통은 호출될 함수의 참조도 등록할때 함께 넘긴다. 나중에 해당 이벤트가 발생하면 감시 대상은 등록된 감시자 목록을 보면서 함수들을 일일이 호출한다. 이때 발생한 이벤트를 감시자 함수의 인자로 넘긴다. / 특히 사용자 인터페이스 시스템에서 널리 쓰이는데, 어떤 상호 작용이 일어났다는 것을 애플리케이션에 콜백으로 알려주는 방식을 사용한다. 병목 현상의 문제가 존재한다.
    • 게시-구독 : 감시자 패턴을 일반화 한것이다. 게시자와 구독자가 있고 이들은 채널로 연결된다. 채널은 별도의 코드로 구현되는데, 라이브러리인 경우도 있고 프로세스 혹은 분산 인프라인 경우도 있다. 각 채널에는 이름이 있다. 구독자는 관심사 하나 이상의 채널에 등록하고, 게시자는 채널에 이벤트를 보낸다. 감시자 패턴과는 다르게 게시자와 구독자 사이의 통신은 코드 밖에서 이루어진다. 비동기적으로.. / 감시자 패턴과 비교하면 공통 인터페이스인 채널을 추상화함으로써 결합도를 줄인 멋진 사례
    • 반응형 프로그래밍과 스트림 : 값이 바뀌면 그 값을 사용하는 다른 값이 반응하는 것을 의미한다. 예를들어 react, vue.
  • 상속을 사용하는가? 그렇다면 멈춰라! 아마 여러분에게 필요한 것은 상속이 아닐 것이다. 더 나은 대안으로는 인터페이스와 프로토콜, 위임, 믹스인과 트레이트가 있다.
  • 설정 데이터 - 정적 설정과 서비스형 설정

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

  • 회사 코드를 수정할 때 특정 코드가 다른 곳에 어떻게 영향을 끼칠지 몰라서 분석에만 여러 시간이 걸렸다. 내가 짜는 코드는 그런 일이 발생하지 않도록 주의하자. 만약 다른 곳에 영향이 가지만 직관적이지 않다면 표시가 안되어 있다면 주석이라도 남기자
  • 학원에서 JAVA를 학습할 때 중요했던 개념이 '상속'이었는데.. 사용하지 말라니! 여기서 말하는 상속은 인터페이스 상속이랑은 다른 개념인걸까?
  • 지금 만들고 있는 프로젝트에서 특정 메뉴를 사용자마다 다르게 보여줄건지 말지 고민하는 단계에서 데이터베이스에 테이블을 추가해서 사용자별로 값을 부여해서 관리하려고 했는데 옳은 방법이 맞는걸까? 정적 설정과 서비스형 설정을 구분해서 다르게 설정 해봐야겠다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 어떤 데이터를 전역 데이터로 설정해야 할지 상상이 어렵다. vuex에 담을 데이터를 적게 하라는 의미일까?
  • 이벤트는 4가지 종류로 나뉘는데, 게시-구독은 유튜브를 상상하며 읽었는데 유한 기계 상태는 태스크 스케줄러, 감시자 패턴은 ???... 유한기계상태와 감시자패턴은 어떤게 있는지 잘 모르겠다. (이미지와 예시를 봐도...ㅠㅠ)
반응형