Contents
프로그래밍 초식(What? How?)
   Jun 8, 2022     2 min read

3.What ? How?

기능 구현 해야하는 경우가 생겨 만들기 시작함.

Untitled

어떻게 짜야할지 생각해서 코드를 구현함

Untitled 1

하지만…

시간이 흘러흘러 ~

Untitled 2

깊은 시간이 흐르면 심각한 경우 이런 대화가 오고 간다고 한다.

Untitled 3

위와 같은 상황은 빈번히 일어난다고 한다.

그렇다면 저런 문제를 해결할 수 있는 방법은 ? 구체적인 주석일까? 아니면 문서화로 만들어놔야할까 ?

하지만 회사들어가서 기능 요구사항이 바뀐다면??? 눈물이 날 것이다.

요구사항이 달라진다면?

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)

Untitled 4

코드를 What으로 표현해보기 ! 구현은 그 다음에 고민

int add PointRate = 0;

if(userRegistedLessThanOneYear(userId)){  // 1년 미만 가입자면
	addPointRate = 1;
}

...

if ( addPointRate > 0 ){ // 추가 포인트비율이 0보다 크면
	recordAddPointHistory(userId, addPointRate); // 추가 포인트비율 내역을 기록
}

전과 후를 비교하는 사진

Untitled 5

어떤 것이 더 표현이 좋다고 생각하나 ?

당연히 후자다. 네이밍을 잘해야된다는 말을 얼핏 들어봤지만 확 와닿지 못했지만 이 부분을 통해서 확 와닿았다.

What과 How 분리 결과

  • 구현을 잠시 잊고 실제 하려는 것이 무서인지 생각하게된다.
    • 실제 하려는 것이 코드에 표현될 가능성이 높아짐
    • 코드의 가독성이 향상
    • 유지보수성이 좋아진다.

※참고 : 구분하는 것이 무조건 되는 것은 아니다. 실제 구현을 하다보면 제약 등의 이유로 표현력이 떨어질 때도 있다.

결론 ! 초짜라면 What/How를 구분하는 연습할 것!

  • 평소에 의식의 흐름대로 막 구현만 하면 안된다.
    • 의미/의도가 드러나는 코드를 작성하도록 노력해야한다.
    • 연차가 쌓인다고 절로 늘지 않는다. (정말 무서운 말이다.)

느낀점

어느 분야든 평소에 꾸준히라는 것은 중요하다. 하지만 꾸준히 무엇(What?)을 하고 무슨 의식을 갖고 어떻게(How)하는지가 정말 중요한 거 같다.