프로그래밍 초식 : WHAT? HOW?

Donghun Seol·2023년 4월 25일
0

프로그래밍 초식

목록 보기
3/13

레퍼런스

(개발자의)구현 본능

개발자는 본능적으로 요구사항을 전달받으면 코드 구현을 떠올리는 습성이 있다...
코딩이란 떠오른 구현 아이디어를 코드로 옮기는 과정

(그러나 시간이 지나면...)

구현의 기반이 된 요구사항은 사라지고, 소스코드의 의미도 휘발된다.

A : 이 코드의 의미가 뭘까요? if문 빼도 될것같은데...
B : 그게.. 저도 왔을 때부터 이래서 잘 모르겠어요... 건들지 맙시다.

요구사항이 바뀌면?

처음부터 의미를 발굴해서 기능을 추가해야된다.
변경비용이 많이 발생!!

WHAT/HOW를 나눠 생각함으로써 개선 가능

아래와 같이 나눌 수 있음

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);
}

WHAT/HOW 분리의 장점

  1. 실제 하려는 것이 코드에 표현될 가능성이 높아짐
  2. 코드의 가독성이 향상됨
  3. (가독성이 좋으면)당연히 유지보수성도 좋아짐

초짜라면 의식적으로 연습하자

의미와 의도가 드러나는 코드를 작성하도록 노력하자!

의식의 흐름대로 막 구현하지 않고 WHAT을 '생각'하고 코드에 표현하면서 작성하자.

profile
I'm going from failure to failure without losing enthusiasm

1개의 댓글

comment-user-thumbnail
2023년 5월 13일

sample mocking comment for api test

답글 달기