일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Linux
- 직장인점심
- DesignPattern
- 성수볼거리
- 오브젝트
- 헤드퍼스트디자인패턴
- 클린코드
- 성수맛집
- JavaScript
- 독서일지
- 성수핫플
- 책너두
- 독서
- 성수
- 객체지향프로그래밍
- JAVA개발자
- 헤드퍼스트
- 주니어개발자
- docker
- IntelliJ
- 책읽기
- 성수직장인
- 디자인패턴
- 상속
- 코딩
- 객체지향
- 직장인
- 개발자
- 깨끗한코드
- Java
- Today
- Total
닭발개발
[오브젝트] 24일차. 305-321pg | 중복코드제거, DRY원칙 본문
[오브젝트] 24일차. 305-321pg | 중복코드제거, DRY원칙
D269 2023. 7. 22. 10:24
24일차.
오브젝트: 코드로 이해하는 객체지향 설계[4주차_토요일]
305-321pg
#요약
**Chapter 09. 유연한 설계**
- 8장에서 유연하고 재사용가능한 설계를 만드려고 적용할 수 있는 다양한 의존성 관리 기법들을 소개했다면 9장에서는 이 기법들을 원칙이라는 관점에서 정리
01. 개방-폐쇄 원칙(Open-Closed Principle, OCP)
02. 생성 사용 분리
03. 의존성 주입
04. 의존성 역전 원칙
05. 유연성에 대한 조언
1) 유연한 설계는 유연성이 필요할 때만 옳다.
- 유연하고 재사용 가능한 설계 : 런타임 의존성과 컴파일타임 의존성의 차이를 알고 같은 컴파일 타임 의존성으로부터 다양한 런타임 의존성을 만들 수 있는 코드 구조를 가지는 설계
2) 협력과 책임이 중요하다.
- 설계를 유연하게 하려면 협력에 참여하는 객체가 다른 객체에게 어떤 메시지를 전송하는지가 중요하다.
- 객체를 생성할 책임을 담당할 객체나 객체 생성 메커니즘을 결정하는 시점은 책임 할당의 마지막 단계로 미뤄야 한다.
**Chapter 10. 상속과 코드 재사용**
- 객체지향에서는 코드 재사용을 위해 '새로운'코드를 추가하는데 코드는 보통 클래스 안에서 작성되니까 새로운 클래스를 추가한다.
- 클래스를 재사용하기 위해 새로운 클래스를 추가하는 가장 대표적 기법 : 상속
- 클래스의 인스턴스 안에 기존 클래스의 인스턴스를 포함시키는 방법 : 합성
01. 상속과 중복코드
- 중복코드를 제거해야 할 이유
1) DRY 원칙
- 중복코드를 제거해야하는 이유는 변경을 방해하기 때문.
- DRY : Don't Repeat Yourself 반복하지 마라 -> 동일한 지식을 중복하지 마라
: 모든 지식은 시스템 내에서 단일하고, 애매하지 않고, 정말로 믿을 만한 표현 양식을 가져야 한다는 원칙
- 동의어 : 한번 단 한번 원칙, 단일 지점 제어 원칙
2) 중복과 변겅
- 많은 코드 더미 속에서 어떤 코드가 중복인지 파악하는 건 어렵다. 중복코드는 항상 함께 수정돼야 하니까 수정할 때 하나라도 빠뜨리면 버그로 이어진다.
- 중복코드를 제거하지 않은 상태에서 코드를 수정할 수 있는 유일한 방법은 새로운 중복 코드를 추가하는 것 뿐임.
- 민첩하게 하려면 중복코드를 추가하지 않고 대신 제거한다.
- 두 클래스 사이의 중복 코드를 제거하는 한 가지 방법은 클래스를 하나로 합치는 것.
3) 상속을 이용해서 중복 코드 제거하기
- 이미 존재하는 클래스와 유사한 클래스가 필요하다면 코드를 복사하지 말고 상속을 이요해 코드를 재사용해라.
- 상속으로 코드를 재사용하기 위해서는 부모 클래스의 개발자가 세웠던 가정이나 추론 과정을 정확하게 이해해야 한다.
4) 강하게 결합된 Phone과 NightlyDiscountPhone
'책책책 책을 읽읍시다‼ ver.개발 > [ 오브젝트: 코드로 이해하는 객체지향 설계 ]' 카테고리의 다른 글
[오브젝트] 26일차. 336-348pg | 차이에 의한 프로그래밍, 상속과 합성 (0) | 2023.08.02 |
---|---|
[오브젝트] 25일차. 322-335pg | 취약한 기반 클래스 문제, 추상화에 의존 (0) | 2023.07.31 |
[오브젝트] 23일차. 291-304pg | 의존성 주입, 의존성 역전 (0) | 2023.07.22 |
[오브젝트] 22일차. 277-290pg | 개방-폐쇄 원칙, 추상화 (0) | 2023.07.21 |
[오브젝트] 21일차. 264-276pg | 의존성, 명시적의존성, new (0) | 2023.07.19 |