-
제로베이스 클린코드 요약 정리 글입니다.
모호한 경계를 구분짓기
- 경계란
- 경계 짓기 (1) 우리 코드를 보호하기
- 경계 짓기 (2) 외부 코드와 호환하기
- 외부 라이브러리 테스트하기 - Learning Test
1. 경계란
내부 코드 |경계| 외부 코드
시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다.
오픈소스, 라이브러리를 안쓰는 프로젝트는 없으며 내부 코드와 외부 코드를 병합해야하는 상황이 생긴다.
우리코드(내부 코드) 와 외부 코드를 깔끔하게 병합시키려면 경계를 잘 지어야 한다.
2. 경계 짓기 (1)
우리코드 보호 하기
캡슐화 (Encapsulation)
갭슐화 : 객체의 실제 구현을 외부로부터 감추는 방식
다시 말해 Public 메소드는 외부에 공개하지만 내부 Data, 내부 메소드는 공개하지 않아야 한다는 의미이다.
예시) Sensor 를 관리해야 한다. Sensor 는 외부에서 사용된다.
캡슐화를 적용하는 흐름은 이렇다.
- Sensor Id 와 Sensor 객체로 저장하고 싶어서, Map 을 사용한다.
Map<Sensor> sensors = new HashMap<Sensor>(); Sensor s = sensors.get(sensorId);
- 하지만 Map을 그대로 사용하면 Map이 가진 clear() 가 외부로 노출된다.
- 데이터가 손상될 수 있다.
- Sensor의 '외부' 코드 관점에서 Sensor 객체의 값들만 가져오고 싶다.
- 따라서 캡슐화를 진행한다.
public class Sensors { private Map<Sensor> sensors = new HashMap<Sensor>(); public Sensor getById(String sensorId) { return sensors.get(sensorId); } }
캡슐화를 통해서 Map 을 감추고, 원하는 기능만 공개함으로 인해 적절한 경계로 우리 코드를 보호할 수 있다.
3. 경계 짓기(2)
외부 코드와 호환하기
외부 코드를 호출할 때 우리가 원하는 방식으로 사용하고 싶을 때를 생각해보자
Adapter 패턴
어댑터 패턴을 사용하면 외부 코드를 호출할 때, 우리가 정의한 인터페이스 대로 호출하기 위해 사용할 수 있다.
Client Request 방식대로 Adapter 클래스를 호출하면 Apapter 클래스에서 Adaptee(외부 코드) 에 맞추어 변환해서 호출하는 방식이다.
4. 외부 라이브러리 테스트하기
Learning Test 를 작성해 라이브러리를 테스트한다.
라이브러리는 이미 테스트 되어 있지만 라이브러리를 '사용' 하는 테스트를 해야한다는 의미이다.
테스트하는 장점은 다음과 같다.
- 학습 테스트는 이해도를 높인다.
- 외부 코드의 버전이 변경되었을 때, 우리 코드와 호환되는 지 확인할 수 있다.
'Java > 클린코드' 카테고리의 다른 글
[클린코드] 단위테스트 (0) 2022.04.27 [클린코드] 오류 처리 (0) 2022.03.01 [클린코드] 객체와 자료구조 (0) 2022.02.23 [클린코드] 형식 맞추기 (0) 2022.02.15 [클린코드] 주석 (0) 2022.02.11