210308_B책_구현 결정 설명하기

정재현·2021년 3월 8일
0

TIL2

목록 보기
8/79

오늘은 3.5<구현 결정 설명하기> 를 진행한다.
구현을 할 때 코딩에서 어려운 결정을 내려야 할 때가 있다.
객관적으로 옮거나 그른 것이 없는 상황, 장점과 단점이 모두 있는 상황이다.
바로 이럴 때 주석이 필요하다.

예제 코드를 보자면,

class Inventory {
 private List<Supply> list = new ArrayList<>();
 
 void add(Supply supply) {
  list.add(supply);
  Collection.sort(list);
 }
 
 boolean isInStock(String name) {
 // 빠른 구현
  return Collection.binarySearch(list, new Supply(name)) != -1;
 }
}

=> (나는 딱 이 코드를 봤을 때 이진검색 알고리즘을 구현해봤음에도 불구하고 바로 깨닫지 못했다.)
프로그래머가 왜 이진검색을 쓰기로 결정했는지 '빠른 구현' 이라는 주석이 있긴하지만
이 방법에 '네' 라고 대답했다는 것은 다른 대답에는 '아니오' 라고 대답한 것이라고 한다.
그렇다면!
주석이 이 타당함을 잘 설명해주고 있나?
이 코드는 왜 빠른가?
이러한 질문들에 대하여 주석이 잘 설명해주고 있나?
아니다.
그러면 어떻게 향상시킬 수 있을까?

class Inventory {
 // 리스트를 정렬된 채로 유지한다. isInStock()을 참고한다.
 private List<Supply> list = new ArrayList<>();
 
 void add(Supply supply) {
  list.add(supply);
  Collection.sort(list);
 }
 
 boolean isInStock(String name) {
 /*
 * 재고가 남았는지 재고명으로 확인해야 한다면,
 * 재고가 천 개 이상일 때 심각한 성능 이슈에 직면한다.
 * 1초 안에 항목을 추출하기 위해
 * 비록 재고를 정렬된 채로 유지해야 하지만
 * 이진 검색 알고리즘을 쓰기로 결정한다.
 */
  return Collection.binarySearch(list, new Supply(name)) != -1;
 }
}

보통 이런 주석 관례는 팀 마다의 컨벤션에 따라 다르다.
이러한 컨벤션을 사용해 주석을 기술하면 주요 측면에 빠지는 경우가 거의 없다고 한다.
미리 정의된 구조를 따르기 때문에 동료 개발자가 주석을 이해하기도 쉽다.

오늘의 코멘트: 마침 오늘도 예전에 팀원분께서 구현해주신 코드를 보는데 이전과 많이 달라져있어 다시 여쭤봤다.
주석이 있었다면 좋았겠다고 생각했다. 내가 넣어야지~~

profile
"돈받고 일하면 프로다"

0개의 댓글