프로그래밍 초식(What? How?)
3.What ? How?
기능 구현 해야하는 경우가 생겨 만들기 시작함.
어떻게 짜야할지 생각해서 코드를 구현함
하지만…
시간이 흘러흘러 ~
깊은 시간이 흐르면 심각한 경우 이런 대화가 오고 간다고 한다.
위와 같은 상황은 빈번히 일어난다고 한다.
그렇다면 저런 문제를 해결할 수 있는 방법은 ? 구체적인 주석일까? 아니면 문서화로 만들어놔야할까 ?
하지만 회사들어가서 기능 요구사항이 바뀐다면??? 눈물이 날 것이다.
요구사항이 달라진다면?
int count = userDao.countUsersByReg(userId);
if(count > 0) {
if(다른 조건 추가){
pointRate += 1;
}
}
...
// count가 0보다 클 때, log를 남긴 이유는 : 포인트 지급을 한 내역을 남기기 위함
if(count > 0 ){
logDao.insert(new Log(..., "AR", 1, ...)); //1은 ? 포인트를 얼마나 더 줬나? 기록하기 위해서
}
위와 같은 상황이 벌어지기 전에 최소화 하려면…
해결법 : What과 How로 나눠 생각하기!
- 하려는 것/의미/의도(What) - 그것의 실제 구현(How)
코드를 What으로 표현해보기 ! 구현은 그 다음에 고민
int add PointRate = 0;
if(userRegistedLessThanOneYear(userId)){ // 1년 미만 가입자면
addPointRate = 1;
}
...
if ( addPointRate > 0 ){ // 추가 포인트비율이 0보다 크면
recordAddPointHistory(userId, addPointRate); // 추가 포인트비율 내역을 기록
}
전과 후를 비교하는 사진
어떤 것이 더 표현이 좋다고 생각하나 ?
당연히 후자다. 네이밍을 잘해야된다는 말을 얼핏 들어봤지만 확 와닿지 못했지만 이 부분을 통해서 확 와닿았다.
What과 How 분리 결과
- 구현을 잠시 잊고 실제 하려는 것이 무서인지 생각하게된다.
- 실제 하려는 것이 코드에 표현될 가능성이 높아짐
- 코드의 가독성이 향상
- 유지보수성이 좋아진다.
※참고 : 구분하는 것이 무조건 되는 것은 아니다. 실제 구현을 하다보면 제약 등의 이유로 표현력이 떨어질 때도 있다.
결론 ! 초짜라면 What/How를 구분하는 연습할 것!
- 평소에 의식의 흐름대로 막 구현만 하면 안된다.
- 의미/의도가 드러나는 코드를 작성하도록 노력해야한다.
- 연차가 쌓인다고 절로 늘지 않는다. (정말 무서운 말이다.)
느낀점
어느 분야든 평소에 꾸준히라는 것은 중요하다. 하지만 꾸준히 무엇(What?)을 하고 무슨 의식을 갖고 어떻게(How)하는지가 정말 중요한 거 같다.