대범하게

[클린코드] 16일차 - 소프트웨어 경계를 깔끔하게 처리하는 기법 본문

알아두면쓸데있는신기한잡학사전/독서일지

[클린코드] 16일차 - 소프트웨어 경계를 깔끔하게 처리하는 기법

대범하게 2023. 11. 12. 03:06
반응형

[클린코드] 16일차 - 소프트웨어 경계를 깔끔하게 처리하는 기법

클린코드 16일차 (p. 142~150(8장) )

클린코드 17일차 (p. 151~152(8장) / 153~160(9장) )

8 경계

- 시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다.

- 이 장에서는 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교를 살펴본다!

 

1. 외부 코드 사용하기

- 인터페이스 제공자: 적용성을 최대한 넓히려 애씀.

- 인터페이스 사용자: 자신의 요구에 집중하는 인터페이스를 바람.

 

- java.util.Map을 살펴보면, Map은 굉장히 다양한 인터페이스를 제공한다.

- clear()는 Map을 사용하는 누구든 Map 내용을 지울 권한이 있다는 것을 의미한다.

Map<String, Sensor> sensors = new HashMap<Sensor>();
...
Sensor s = sensors.get(sensorId);

 

- 위 코드는 Map<String, Sensor>가 사용자에게 필요하지 않은 기능까지 제공한다는 문제를 해결하지 못 한다.

이를 해결하기 위해, Map을 아래와 같이 숨겨주면 된다.

public class Sensors {
   private Map sensors = new HashMap();
	
   public Sensor getById(String id) {
     return (Sensor) sensors.get(id);
}

 

- 경계 인터페이스인 Map이 변하더라도 나머지 프로그램에는 영향을 미치지 않는다.

- Sensors 클래스 안에서 객체 유형을 관리하고 변환하기 때문이다.

- 또한 Sensors 클래스는 프로그램에 필요한 인터페이스만 제공한다.

 

Map 인스턴스를 공개 API의 인수로 넘기거나 반환하지 않도록 주의하자.

2. 경계 살피고 익히기

- 외부 코드를 사용하면 적은 시간에 더 많은 기능을 출시하기 쉽다.

- 대개 하루나 이틀 문서를 읽으며 사용법을 결정한다.

- 그런 다음 우리쪽 코드를 작성해 라이브러리가 예상대로 동작하는지 확인한다.

 

3. log4j 익히기

- 로깅 기능을 직접 구현하는 대신 아파치의 log4j 패키지를 사용 !

 

4. 학습 테스트는 공짜 이상이다.

- 학습 테스트에 드는 비용은 없다. 어쨌든 API를 배워야 하므로...

- 패키지 새버전이 나온다면 학습 테스트를 돌려 차이가 있는지 확인한다. 

- 학습 테스트는 패키지가 예상대로 도는지 검증한다. 학습 테스트를 이용한 학습이 필요하든 그렇지 않든 실제 코드와 동일한 방식으로 인터페이스를 사용하는 테스트 케이스가 필요하다.

 

5. 아직 존재하지 않는 코드를 사용하기

- 경계의 또 다른 유형은 아는 코드와 모르는 코드를 분리하는 경계다.

- 우리가 바라는 외부의 인터페이스를 구현하면 우리가 인터페이스를 전적으로 통제한다는 장점이 생긴다.

- 또한 코드 가독성이 높아지고 코드 의도도 분명해진다.

 

6. 깨끗한 경계

- 경계에 위치하는 코드는 깔끔히 분리한다.

- 또한 기대치를 정의하는 테스트 케이스도 작성한다.

- 외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리하자.

- 새로운 클래스로 경계를 감싸거나 ADAPTER 패턴을 사용해 우리가 원하는 인터페이스를 패키지가 제공하는 인터페이스로 변환하자.

Comments