Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
5장. 구부러지거나 부러지거나
#pragmatic
2년 전
497

TIL (Today I Learned) 날짜

2022. 05. 21

오늘 읽은 범위

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

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

- 가능한 느슨하고 유연한 코드를 작성하기 위해 노력해야 한다.

- 디미터 함수 법칙은 프로그램에서 모듈간 결합도를 최소화하려 시도한다. 이 법칙은 한 객체가 제공하는 메서드에 접근하기 위해 또 다른 객체들을 통하는 것을 허용하지 않는다.

- Tip> 모듈간의 결합도를 최소화하라.

- 디미터 법칙을 따르면 함수를 호출하는 클래스의 응답집합 크기를 줄일 수 있기 때문에 좀 더 에러가 적은 클래스들을 만들 수 있다.

- 세부사항을 코드에서 몰아내라. 이렇게 함으로써 우리의 코드는 매우 설정 가능하게 되고 '소프트' 해진다. 즉 변화에 쉽게 적응할 수 있게 되는 것이다.

- Tip> 통합하지 말고 설정하라.

- 메타데이터(metadata)를 이용하여 반환 매개 변수, 사용자 선호사항, 설치 디렉터리와 같은 애플리케이션 설정 옵션을 기술하라.

- 메타데이터는 애플리케이션을 기술하는 모든 데이터다. / 보통 메타데이터는 컴파일타임이 아닌 런타임에 접근, 사용된다. / 가능한 많은 메타데이터를 써서 애플리케이션을 설정하고 실행시켜라.

- Tip> 코드에는 추상화를, 메타데이터에는 세부 내용을.

- 메타데이터 사용 장점: 설계의 결합도를 줄여 좀 더 유연하고 적응성 있는 프로그램을 만들 수 있다. / 세부사항을 코드 밖으로 몰아냄으로써 보다 강하고 추상적인 디자인을 만들 수 있다. / 애플리케이션을 커스터마이징하기 위해 다시 컴파일할 필요가 없다.(이런 방식의 커스터마이징을 통해 실제 제작 공정 시스템에서 일어날 수 있는 치명적인 버그에서 벗어나는 우회로를 쉽게 만들 수 있다.) / 메타데이터는 범용 프로그래밍 언어보다 문제 도메인에 가까운 방식으로 표현될 수 있다. / 동일한 애플리케이션 엔진과 상이한 메타데이터를 이용해 여러 다른 프로젝트를 진행할 수 있게 된다.

- 우리는 설정 메타데이터를 일반 텍스트로 표현하는 것을 권장한다.

- Tip> 작업흐름 분석을 통해 동시성을 개선하라.

- Tip> 서비스를 사용해서 설계하라.

- Tip> 언제나 동시성을 고려해 설계하라.

- 프로그램을 커다란 덩어리 하나로 짜지 말고, '나눠서 정복하기(divide and conquer)' 방법을 써서 여러 모듈로 나누어 짜야 한다고 배웠다. 모듈마다 자기만의 책임이 있다. 사실, '잘 정의된 단 하나의 책임만 가지는 것’ 이라는 말이야말로 모듈(또는 클래스)에 대한 좋은 정의가 된다.

- 이벤트를 이용하면 어떤 객체의 상태 변화를 이에 관심을 가질 다른 객체들에게 알릴 수 있다. / 이벤트를 이렇게 이용하면 객체들 사이의 결합을 최소화할 수 있다. / 이벤트의 전송자는 수신자에 대해 아무런 직접적인 지식을 가질 필요가 없다.

- 객체가 자기가 필요한 이벤트들만 구독해서 받아보고 필요하지 않은 이벤트들은 받아오지 않도록 해야 한다.

- 모델을 표시하는 뷰 그리고 뷰를 관리하는 컨트롤러에서 모델을 분리해 내는 것. 바로 이것이 모델-뷰-컨트롤러(Model-View-Controller, MVC) 핵심 개념이다.

- Tip> 모델에서 뷰를 분리하라.

- 모델: 대상 객체를 나타내는 추상 데이터 모델. 모델은 어떤 뷰나 컨트롤러에 대해서도 직접적인 지식을 지니지 않는다. / 뷰: 모델을 해석하는 방법. 뷰는 모델의 변화 그리고 컨트롤러가 보내는 논리적 사건을 구독한다. / 컨트롤러: 뷰를 제어하고 모델에 새로운 데이터를 제공하는 방법 . 모델과 뷰 둘 모두에 이벤트를 보낸다.

- 디버깅 뷰는 모델의 상세한 내부 정보를 보여주는 특수한 뷰다. 개별 이벤트를 모두 추적해서 표시하는 기능을 추가해 놓는 것도 엄청난 시간을 절약하게 해주는 경우가 있다.

- 칠판 시스템을 이용하면, 지식의 소비자와 생산자들이 익명으로 그리고 비동기적으로 데이터를 주고받는 공간이 생긴다. 그 덕분에 객체들 사이의 결합을 완전히 끊을 수 있다.

- Tip> 칠판을 사용해 작업흐름을 조율하라.

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

- MVC 패턴 프로그래밍을 하면서, 대략적인 이론만 알 뿐 무작정 코딩 하곤 했었는데, 이번 챕터를 읽으면서 왜? 써야 하는지 잘 깨달은것 같다.

- 또한 쓰레드 관련 프로그래밍을 많이 하곤 하는데, 이번 챕터를 통해 동시성의 중요성을 다시 한번 깨달은 것 같다.