[TDD] 인터페이스와 구현

so_doit·2022년 3월 1일
0

TIL

목록 보기
12/26

지금까지 테스트 주도 개발의 기본적인 내용에 대해 공부를 했다. 그런데 테스트 주도 개발이 포함하는 내용들만 가지고는 실무에 적용하기 힘들다. 실무에서 테스트 주도 개발을 사용하기 위해선 여러 가지 설계 기법들을 버무려야 한다.

앞으로는 실무에서 테스트 주도 개발과 자주 쓰일 수 있는 기법, 기술, 도구들에 대해서 공부할 예정이다.

우선 인터페이스와 구현의 설계 관점에서 살펴보자.
인터페이스와 구현은 코드를 구성하는 아주 중요한 두 요소이다. 두 요소의 역할을 떠올리고 설계 접근법에 대해 강의를 들으며 알아볼 예정이다.

추상화

MIT 교수 John Vogel Guttag에 따르면 추상화는 주어진 맥락에 관련된 정보들을 남기고 동시에 주어진 맥락과 관련없는 정보들을 잊어버리는 과정이다. 정리하면 추상화라는 것은 어떤 목적에 따라서 대상이 가지고 있는 특징들 중에 일부만 투영하는 것이다.

협력과 계약

  • 대부분의 코드는 다른 코드와 협력한다.
  • 협력에 필요한 것은 '어떻게'가 아닌 '무엇'이다.
    • 협력 대상이 어떤 일을 하는지가 중요하지 그 일을 어떻게 할지는 중요하지 않다.
  • 인터페이스
    • '무엇'을 표현한다.
    • 클라이언트 코드에게 반드시 필요한 정보이다.
    • 협력하는 코드 사이의 계약이다.
    • 추상화의 결과이다.

인터페이스에 프로그래밍

Erik Meijer 우리는 인터페이스를 대상으로 프로그래밍 한다. 우리는 어떤 것에 내용을 고려하지 않고 그것에 대해 프로그래밍 한다.

우리가 코드를 작성할 때 우리 코드가 협력하는 다른 코드가 있다. 이때 그 코드의 내용을 고려하지 않고 그 코드가 노출하고 있는 인터페이스만 고려하고 프로그래밍 한다는 것이다.

이런 방식은 특정 상황에서만 이용하는 것이 아니라 언제나 항상 사용하는 방식이다.

정보 숨김

  • David Lorge Parnas가 1971년에 모듈화 프로그래밍과 관련된 2개의 논문을 통해서 소개한 기법이다.
  • 효과적인 모듈화를 하려는 목적은 무엇인가?
    • 조직 간 의사소통을 최소화할 수 있다.
    • 변경 여파를 최소화할 수 있다.
    • 시스템 이해에 도움이 된다.
  • 공개된 설계 결정과 숨겨진 설계 결정
    • 어려운 설계 결정과 변경될 것 같은 설계 결정을 숨기라고 말한다.

profile
백엔드 개발자

0개의 댓글