6장 객체와 자료 구조
휴리스틱(Heuristic)
의미: 찾아내다, 발견하다, 발견법
휴리스틱이란
어떤 문제가 있다면 이 문제를 해결할 수 있는 방법이 증명되지 않았을 때 시행착오를 겪어가며 경험 or 직관을 활용해 효율적인 해답을 찾아나가는 기법을 의미
즉, 때려 맞추기
어떻게, 왜 이렇게 된건진 모르겠지만 어찌어찌 하다보니 통하더라
디미터 법칙
잘 알려진 휴리스틱으로 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙
객체는 조회 함수로 내부 구조를 공개하면 안된다는 의미
결론
객체
- 동작을 공개하고 자료를 숨김
- 따라서 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기쉬움
- 기존 객체에 새 동작을 추가하기는 어려움
자료 구조
- 별다른 동작 없이 자료를 노출함
- 따라서 기존 자료 구조에 새 동작을 추가하기 쉬움
- 기존 함수에 새 자료 구조를 추가하기는 어려움
시스템 구현시
- 새로운 자료 타입을 추가하는 유연성 필요시 -> 객체가 적합
- 새로운 동작을 추가하는 유연성 필요시 ->자료 구조와 절차적 코드가 적합
7장 오류 처리
결론
- 깨끗한 코드는 읽기도 좋고 안정성도 높아야함(둘이 상충되는 목표 아님)
- 오류 처리를 프로그램 논리와 분리하면 튼튼하고 깨끗한 코드 작성 가능
- 오류 처리를 프로그램 논리와 분리하면 독립적인 추론이 가능해지며 코드 유지보수성도 높아짐
8장 경계
- 외부 패키지를 호출하는 코드를 줄여 경계를 관리할 것
- 새로운 클래스로 경계를 감싸거나 Adapter 패턴 사용해 (개발자가 원하는 인터페이스를) -> (패키지가 제공하는 인터페이스로) 변환할것
- 코드 가독성 높아지고 경계 인터페이스 사용시 일관성 높아지고 외부 패키지가 변했을경우 수정할것도 줄어듬
9장 단위 테스트
- TDD 법칙
:실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다
:컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다
:현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다
- 테스트 코드를 깨끗하게 유지하지 않으면 결국은 잃어버린다
- 빠르게 독립적으로(서로 의존 X) 반복가능하게(어떤 상황에서든) 자가검증하는(불 값으로 성공 아님 실패) 적시에(테스트하려는 실제 코드를 구현하기 직전에 구현)
- 어렵네 ㅠㅠ
10장 클래스
- 클래스
:클래스설계 시(함수와 같이) 작게가 기본 규칙
:클래스 이름 = 해당 클래스 책임 기술한다 + 25자 내외(접속사 제외하고)
:단일 책임 원칙(single responsibility principle - SRP): 클래스나 모듈을 변경할 이유가 단 하나여야 한다
:큰 클래스 몇개보다 작은 클래스 여럿으로 이뤄진 시스템이 바람직함
- 응집도
:클래스 함수는 클래스 인스턴스 변수를 하나 이상 사용해야 하며 함수가 변수를 많이 사용할 수록 함수와 클래스는 응집도가 높다(바람직하지 않음)
:응집도를 유지하면 작은 클래스 여럿이 나옴
- OCP(open closed principle), 객체 지향 설계에서 핵심원칙
:클래스는 확장에 개방적이고 수정에 폐쇄적이어야 한다
:새 기느을 수정하거나 기존 기능 변경시 손댈 코드가 최소인 시스템 구조가 바람직함
:이상적 시스템: 새 기능 추가시 시스템 확장만하지 기존 코드 변경하지 않음
:결합도 낮다 = 각 시스템 요소가 다른 요소로부터, 변경으로부터 잘 격리되어 있다(각 요소 이해하기 쉬워짐)
:결합도 최소로 줄이면 자연스레 또 다른 클래스 설계 원칙인 DIP(dependency inversion principle)을 따르는 클래스가 나온다, DIP: 클래스는 자세한 구현이 아니라 추상화에 의존해야 한다
11장 시스템
- 시스템은 앱 객체를 제작하고 의존성을 서로 연결하는 준비과정과 준비과정 이후에 이어지는 런타임 로직을 분리해야한다
- main 분리: 생성과 관련한 코드는 모두 main이나 main이 호출하는 모듈로 옮기고 나머지 시스템은 모든 객체가 생성되었고 모든 의존성이 연결되었다고 가정한다
- 소프트웨어 시스템은 물리적인 시스템과 다름. 관심사를 적절히 분리해 관리한다면 소프트웨어 아키텍처는 점진적으로 발전할 수 있다
'07.책 리뷰' 카테고리의 다른 글
왜 일하는가 - 이나모리 가즈오 (0) | 2021.12.12 |
---|---|
읽을 책 정리(개발 - 김범준 추천 도서) (1) | 2021.12.07 |
미라클 모닝 (0) | 2021.12.06 |
최고의 주식 최적의 타이밍 (0) | 2021.12.02 |
부의 대이동 (0) | 2021.12.01 |
댓글