더북(TheBook)

5.1.2 콜백 함수의 작성과 테스팅

attendeeCollection 틀을 잡았으니 추가 기능 구현은 개별 참가자를 체크인하는 콜백 함수만큼이나 간단하다. 참가자를 체크인하는 익명 함수를 attendeeCollection.iterate 함수에 바로 넣기만 하면 된다.


var attendees = Conference.attendeeCollection();
  
// UI에서 선택된 참가자들을 추가한다.
attendees.iterate(function(attendee) {
  attendee.checkIn();
// 외부 서비스에 체크인을 등록한다.
});

아직 자바스크립트 경험이 얕은 독자들도 이렇게 생긴 코드는 많이 봤을 것이다. 함수를 정의하기 무섭게 다른 함수에 콜백으로 바로 넘기는 건 자바스크립트의 강력한 특성이지만, 자칫하면 정도에서 벗어날 우려도 있다.

첫째, 익명 콜백 함수는 콜백만 따로 떼어낼 방법이 없어서 단위 테스트가 불가능하다. 이 예제만 해도 참가자 체크인 기능이 attendeeCollection에 묶여 있으므로 (콜백 실행 여부가 아니라, 참가자들이 제대로 체크인해서 등록 처리가 끝났는지 테스트할 의도가 아니라면) 컬렉션에 포함된 참가자들의 체크인 여부는 전체 컬렉션을 상대로 계속 테스트를 반복할 수밖에 없다. 한낱 익명 콜백 함수 하나를 테스트하는 코드가 전체 테스트 꾸러미를 WET하게 만든다면 다중 작업을 익명 함수로 처리할 땐 오죽하겠는가? 엄청난 반복의 늪에 빠지고 말 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.