개발자는 본능적으로 요구사항을 전달받으면 코드 구현을 떠올리는 습성이 있다...
코딩이란 떠오른 구현 아이디어를 코드로 옮기는 과정
(그러나 시간이 지나면...)
구현의 기반이 된 요구사항은 사라지고, 소스코드의 의미도 휘발된다.
A : 이 코드의 의미가 뭘까요? if문 빼도 될것같은데...
B : 그게.. 저도 왔을 때부터 이래서 잘 모르겠어요... 건들지 맙시다.
처음부터 의미를 발굴해서 기능을 추가해야된다.
변경비용이 많이 발생!!
아래와 같이 나눌 수 있음
what: 가입한지 1년 미만
how : reg 컬럼 기준으로 count
what: 추가 지급 내역 남김
how : 테이블에 insert
먼저 코드를 WHAT
으로 표현해 보고, 그 다음 HOW
에 따라서 구현한다.
결국 높은 추상레벨에서는 선언적 함수
를 호출하고, 명령적인 상세 구현은 선언적 함수 안에 캡슐화 하면 된다. 선언적 함수는 내부 동작을 충분히 이해 할 수 있게하는 함수명을 사용한다.
// Bad
let count = userDao.countUserByReg(userId);
if (count > 0) pointRate++;
// 10 lines later
if (count > 0) logDao.insert(new Log(..., "AR", 1, ..));
아래처럼 변경하면 의미를 한눈에 파악가능함.
// Good
let addPointRate = 0
if (userRegistedLessThanOneYear(userId) {
addPointRate = 1;
}
// 10 lines later
if (addPointRate > 0) {
recordAddPointHistory(userId, addPointRate);
}
초짜라면 의식적으로 연습하자
의미와 의도가 드러나는 코드를 작성하도록 노력하자!
sample mocking comment for api test