1 minute read

외부 코드를 사용할때에는 우리코드에 깔끔하게 통합 해야한다.

외부 코드 사용하기

  • 경계 인터페이스를 이용할 때는 이를 이용하는 클래스나 클래스 밖으로 노출되지 않도록 주의하자.
  • 기존 인터페이스가 수정되어도 코드에 주는 영향을 최소화 하자
Map students = new HashMap(); // Map 인터페이스에서 다양한 기능을 사용할 수 있다.

Student s = (Student)students.get(studentId);
//clear(), containsKey(key), get(key) 등등...
  • 기존의 Map에 의존적인 방식
public class Students {
    private Map students = new HashMap();
    
    /**
    * get(id) 기능만 사용하겠다는 명시적 선언
    * @param id
    * @return 
    */
    public Student getById(String id) {
        return (Student) Students.get(id);
    }
}

  • Map을 Students 로 감싼 방식

경계 살피고 익히기

  • 외부코드의 기능을 익히기는 어려우며, 항상 통합하기도 어렵다.
  • 우리쪽 코드에 라이브러리를 접목시켰을때 에러가 난다면, 우리쪽 에러인지 혹은 라이브러리 버그인지 찾아내는데 골치를 앓기도 한다.
  • 간단한 테스트케이스를 작성해 외부 코드를 익혀보자 (학습 테스트)

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

  • 학습테스트는 이해도를 높여주는 정확한 방법이다
  • 일반 코드의 인터페이스도 테스트 케이스가 필요하다. 이런 경계 테스트는 패키지의 새버전으로 이전하기도 쉬워질 수 있다
  • 새버전으 이전시 우리 코드와 호환되지 않으면 학습 테스트가 이를 밝혀낸다

깨끗한 경계

  • 통제하지 못하는 코드를 사용할때는 너무 많은 투자를 하거나 향후 변경비용이 지나치게 커지지 않도록 주의하자
  • 경계에 위치하는 코드는 깔끔히 분리하고, 가능한 통제가 되는 우리 코드에 의존하는 편이 훨씬 좋다.
  • 외부 패키지를 호출할때 위의 방식(Student)로 감싸거나 Adapter 패턴을 사용해 우리가 원하는 인터페이스를 패키지가 제공하는 인터페이스로 변환할 수 있도록 하자.

마치며..

기존의 Map의 방식은 유용하지만 가독성이 떨어진다고 생각했다. 경계를 한번 감싼다는 것으로 필요한 기능을 한정하고 가독성도 좋아질 수 있는 장점 역시 같이 느껴진다. 마지막으로 라이브러리를 사용할때 학습 테스트 코드를 짜려는 습관을 들여야겠다.

Categories:

Updated:

Leave a comment