일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 스프링
- mariadb
- 파이썬
- 알고리즘
- Spring
- java
- spring security
- GitHub
- Postman
- 코드업
- MySQL
- Codeup
- thymeleaf
- springboot
- 기초100제
- 롬복
- 오블완
- Git
- go
- 객사오
- 클린코드
- 클린 코드
- 티스토리챌린지
- Spring Boot
- JPA
- H2 설치
- golang
- Vue.js
- Gradle
- Python
- Today
- Total
nyximos.log
[Clean Code] 8장, 경계 본문
클린코드, 애자일 소프트웨어 장인정신
Robert C. Martin
들어가며
- 어떤 식으로든 외부 코드를 우리 코드에 깔끔하게 통합해야만 한다.
- 이 장에서는 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교를 살펴본다.
외부 코드 사용하기
인터페이스 제공자 : 적용성 최대한 넓히고자 노력
인터페이스 사용자 : 자신의 요구에 집중하는 인터페이스 기대
→ 시스템 경계에서 문제 발생
java.util.Map은 다양한 기능을 제공한다.
장점 : 기능성, 유용성
단점 : 원하지 않는 기능을 사용자가 사용하여 의도와 다른 상황이 발생할 가능성 有
클린 코드
경계 인터페이스인 Map을 Sensors 안으로 숨긴다.
Sensor 클래스가 객체 유형을 관리하고 변환하므로,
Map 인터페이스가 변하더라도 나머지 프로그램에 영향을 미치지 않고
설계 규칙과 비즈니스 규칙을 따르도록 강제할 수 있다.
public class Sensors {
private Map sensors = new HashMap();
public Sensor getById(String id) {
return (Sensor) sensors.get(id)
}
}
Map과 같은 경계 인터페이스를 이용할 때는 이를 이용하는 클래스나 클래스 계열밖으로 노출되지 않도록 주의한다.
Map 인스턴스를 공개 API의 인수로 넘기거나 반환값으로 사용하지 않는다.
경계 살피고 익히기
학습 테스트
간단한 테스트 케이스를 작성해 외부 코드를 익히는 것
프로그램에서 사용하려는 방식대로 외부 API 호출
→ API를 사용하려는 목적에 초점을 맞춘다.
학습 테스트는 공짜 이상이다
학습 테스트는 패키지가 예상대로 도는지 검증한다.
패키지 새 버전이 나온다면 학습 테스트 돌려 차이가 있는지 확인한다.
경계 테스트가 있다면 패키지의 새 버전으로 이전하기 쉬워진다.
아직 존재하지 않는 코드를 사용하기
아는 코드와 모르는 코드를 분리하는 경계
우리가 바라는 인터페이스를 구현하면 우리가 인터페이스를 전적으로 통제한다는 장점이 생긴다.
API 인터페이스가 나온 다음 경계 테스트 케이스를 생성해 우리가 API를 올바르게 사용하는지 테스트 할 수도 있다.
깨끗한 경계
경계에 위치하는 코드는 깔끔하게 분리한다.
외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리하자.
새로운 클래스로 경계를 감싸거나 ADAPTER 패턴을 사용해 우리가 원하는 인터페이스를 패키지가 제공하는 인터페이스로 변환하자.
→ 코드 가독성 👍
→ 경계 인터페이스 사용하는 일관성 👍
→ 외부 패키지가 변화할때 변경할 코드 감소
'Books' 카테고리의 다른 글
[Clean Code] 10장 클래스 (0) | 2022.09.06 |
---|---|
[Clean Code] 9장 단위 테스트 (0) | 2022.09.03 |
[Clean Code] 7장, 오류 처리 (0) | 2022.02.24 |
[Clean Code] 6장, 객체와 자료 구조 (0) | 2022.02.22 |
[Clean Code] 5장, 형식 맞추기 (0) | 2022.02.18 |