1. 개요#
1.1 코드 설계를 배우는 이유#
- 효율적인 코드 작성 = 데이터 구조 + 알고리즘
- 유지 보수가 용이한 고품질 코드 = 코드 설계에 대한 지식
1.1.1 고품질의 코드 작성#
1.1.2 복잡한 코드 개발 다루기#
- 소프트웨어 개발 시 만나는 어려움의 유형 2가지
- 높은 수준의 기술을 필요로 하는 경우: 자율 주행, 비디오 인식, AI
- 높은 수준의 기술을 필요로 하지 않는 대규모 프로젝트: 이 책에서 다룰 내용
1.1.3 프로그래머의 기본 능력#
1.1.4 경력 개발에 필요한 기술#
1.2 코드 품질 평가 방법#
1.2.1 유지 보수성#
- 기존의 코드 설계를 손상하거나 새로운 버그를 발생시키지 않고도 빠르게 코드를 수정하거나 추가할 수 있는 상태
- 코드가 간결하고 가독성이 높으며 확장성이 높다면 코드의 유지 보수도 쉬움
- 코드가 명확하게 계층화되어 있으며, 높은 모듈성, 높은 응집도와 낮은 결합도를 가짐
1.2.2 가독성#
- 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 작성한다.
- 제가 중요하게 생각하는 것 중 하나
1.2.3 확장성#
- 약간 수정하는 것만으로도 혹은 전혀 수정하지 않고도 확장을 통해 새로운 기능을 추가하는 것
- 요구 사항의 미래 변화에 대처할 수 있는 코드의 능력
1.2.4 유연성#
- 추상적인 평가 기준이기 때문에 정의하기 쉽지 않음
- 확장을 위한 인터페이스가 준비되어 있음
- 기본적으로 재사용 가능한 많은 모듈과 클래스 등이 기존 코드에 추상화된 형태로 이미 제공
- 클래스가 다양한 사용 시나리오에 대응하고, 다양한 요구를 충족 가능
1.2.5 간결성#
- 널리 알려진 KISS(Keep It Simple, Stupid) 원칙
- 많은 프로그래머는 단순한 코드에 복잡한 디자인 패턴을 도입하는 것을 좋아한다. 그러나 고수준의 프로그래머는 종종 간단한 방법으로 복잡한 문제를 해결한다.
- 저의 코딩 스타일 중 하나
1.2.6 재사용성#
- 반복적인 코드 작성을 최소화하고 기존 코드를 재사용하는 것
- 단일 책임 원칙(single Responsibility principle)
- DRY(Don’t repeat yourself) 원칙
1.2.7 테스트 용이성#
- 이 책에서 처음 보는 기준인데, 중요할 것 같네요.
1.3 고품질 코드를 작성하는 방법#
1.3.1 객체지향#
- 세 가지의 프로그래밍 패러다임(절차적, 함수형, 객체지향) 중에서 객체지향 프로그래밍이 가장 대중적임
- 이 책에서는 객체지향에 대해 마스터하는 것을 목표로 함
1.3.2 설계 원칙#
- 각각의 설계 원칙이 어떤 문제와 응용 시나리오를 해결하는데 사용되는 것인지 파악해야 한다
- 모두 마스터해야만 설계 원칙을 프로젝트에 유연하고 적절하게 적용할 수 있다
- 설계 원칙은 디자인 패턴보다 더 보편적이고 중요한 것이다.
1.3.3 디자인 패턴#
- 자주 접하게 되는 일부 설계 문제에 대해 요약된 솔루션 또는 설계 사상
1.3.4 코딩 규칙#
1.3.5 리팩터링 기법#
1.4 과도한 설계를 피하는 방법#
1.4.1 코드 설계의 원래 의도는 코드 품질을 향상시키는 것이다#
1.4.2 코드 설계의 원칙은 앞에 문제가 있고, 뒤에 방안이 있다는 것이다#
1.4.3 코드 설계의 응용 시나리오는 복잡한 코드에 적용되어야 한다#
- 디자인 패턴을 적용하는 목적은 디커플링, 즉 더 나은 코드 구조를 사용하여 단일 책임을 위해 큰 조각을 작은 클래스로 분할하여 코드가 높은 응집도와 낮은 결합도의 특성을 충족하도록 하는 것이다.
1.4.4 지속적인 리팩토링은 과도한 설계를 효과적으로 방지할 수 있다#
- 실현 가능성이 낮은 미래의 요구 사항을 위해 처음부터 디자인 패턴을 적용하기보다, 진짜 문제가 발생했을 때 이를 해결하기 위한 디자인 패턴을 사용하는 것을 고려하는 것이다.
1.4.5 특정 시나리오 외의 코드 설계에 대해 이야기하지 않는다#