Skip to content
This repository has been archived by the owner on Mar 27, 2024. It is now read-only.

Latest commit

 

History

History
69 lines (44 loc) · 2.03 KB

8장-경계.md

File metadata and controls

69 lines (44 loc) · 2.03 KB

경계

경계라는 표현이 좋다.

코드에 경계가 있다는 말은 그만큼 코드가 정돈된 느낌을 준다.

그래서 이 부분을 읽으면서 흥미롭게 읽었던것 같다.

객체지향과 절차지향의 차이점도 바로 이 경계에서 오는게 아닐까?

책 내용으로 다가가 보자.

외부 코드 사용하기.

책에서는 Map 을 예시로 시작한다.

Map 의 제네릭을 사용한 것과 사용하지 않는 것을 예시로 드는데, 같이 보자.

Map sensors = new HashMap();
Sensor s = (Sensor) sensors.get(sensorId);

올바른 형변환을 책임지고 있는 것은 map 을 사용하는 클라이언트에 있다. 이는 의도가 분명히 드러나지 않는다. 그러므로, 제네릭을 사용하면 코드 가독성이 높아진다.

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

위와 같이 작성하게 되면, 형변환을 책임지는 쪽은 map 이 가진다.

이제 이 map 을 사용하는 클라이언트는 형변환을 생각하지 않고 사용하면 된다.

나아가 sensors 코드를 갖고 경계를 명확히 해보는 코드를 작성해보자.

map 이라는 인터페이스는 다양한 메소드를 제공한다. clear() put() containsKey() containsValue() entrySet() ...

이것들이 다 필요할까? Map 을 선언해서 사용하는 측에서 이 모든 걸 알아야 할까?

그렇지 않다.

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

이렇게 한다면? Sensors 를 사용하려는 측에서는 map 을 알 수 있을까? 알 수 없다. map 이라는 인터페이스의 경계가 Sensor 안으로 숨겨졌다.

위 코드가 꼭 정답이다 라는 말 보다는 경계 라는 측면에서 코드에서 우리는 경계를 만들었다.


####트레바리 코드에서는 어떤게 있을까?

  • 클라이언트에서 DB의 모든 컬럼을 하지 않는 것 처럼