본문 바로가기
CleanCode

Clean Code 짜기9

by 김대근'IT공부 2019. 10. 31.

외부코드 java.util.Map 사용시 다양한 인터페이스로 수많은 기능을 제공한다

Map은 객체 유형을 제한하지 않고, 사용자는 객체 유형도 추가가 가능하다

 

 

Sensor 객체를 담는 Map을 만들면

Map sensors = new HashMap();

Sensor 객체가 필요한 코드는 Sensor객체를 가져온다

Sensor s = (Sensor)sensors.get(sensorId);

 

위와 같은 코드가 한번이 아니라 여러 차례 나온다.

이 코드를 다음과 같이 제네릭을 사용하면 코드 가독성이 높아진다.

Map<String, Sensor> sensors = new HashMap<Sensor>();

...

Sensor s = sensors.get(sensorId);

프로그램에서 Map<String, Sensor> 인스턴스를 여기저기로 넘기면

Map인터페이스가 변할 경우 수정할 코드가 상당히 많아진다.

 

다음은 Map을 좀 더 깔끔하게 만들었다

public class Sensors {

    private Map sensors = new HashMap();

 

    public Sensor getById(String id) {

       return (Sensor) sensors.get(id);

    }

    ...

}

제네릭의 사용여부는 Sensors 안에서 결정한다.

경계 인터페이스인 Map을 Sensors 안으로 숨겨 Map인터페이스가 변하더라도 영향을 미치지 않는다.

 

Map과 같은 경계 인터페이스를 이용할 때는 이를 인용하는 클래스나 클래스 계열 밖으로

노출되지 않도록 주의한다.

Map 인스턴스를 공개 API의 인수로 넘기거나 반환값으로 사용하지 않는다.

 

새로운 클래스로 경계를 감싸거나 아니면 Adapter 패턴을 사용해 원하는 인터페이스를

패키지가 제공하는 인터페이스로 변환해 코드 가독성,일관성을 높히며,

외부 패키지가 변했을 때 변경할 코드도 줄어들게 하자.

 

 

참고한 책

Clean Code(클린 코드)

반응형

'CleanCode' 카테고리의 다른 글

Clean Code 짜기11  (0) 2019.11.08
Clean Code 짜기10  (0) 2019.11.04
Clean Code 짜기8  (0) 2019.10.30
Clean Code 짜기7  (0) 2019.10.25
Clean Code 짜기6  (0) 2019.10.24