거대한 표현을 잘게 쪼개기

Lee Seung Jae·2021년 6월 6일
0

거대한 표현을 잘게 쪼개기

사람은 보통 한번에 서너 개의 일만 생각할 수 있다고 한다.
그래서 코드의 표현이 커지면 이해하기가 더욱 더 어려워지게 된다.
그래서 나온 것이 거대한 표현을 잘게 쪼개야 한다는 것이다.

작은 조각으로 나눌 수 있는 방법은 여러가지가 있다.

설명변수

커다란 표현을 잘게 쪼개는 가장 쉬운 방법은 하위표현을 담을 추가 변수를 만드는 것인데, 이 추가 변수는 하위표현의 의미를 설명하므로 설명 변수 라고 한다.
가령, if문에서 어떤 긴 조건이 true라면~ 으로 시작하면 위에서 boolean변수안에 대입해서 짧게 if조건을 작성해주는 것이 그 원리이다.

요약변수

의미를 쉽게 파악할 수 있어 별도의 설명을 요구하지 않는 표현이라 해도, 새로운 변수로 담아두는 것은 좋은 방법이라고 생각한다. 이런 덩어리를 짧은 이름으로 대체하여 더 쉽게 관리하고 파악하는 목적을 가진 변수가 요약변수이다.
예를 들면,

if(request.getParameter("id") == document.user.id) {
    //사용자가 이 문서를 수정 할 수 있다.
}
...

if(request.getParameter("id") != document.user.id){
    //문서가 읽기 전용이다.
}

이런 정보는 너무 길고 표현을 읽으려면 . 도트에 따라서 어디에 어디를 타고 어떤것을 가져오는지 확인하는데 추가적인 시간이 필요하다.
그래서 더 명확하게 표현해야 한다. 아래는 윗부분을 수정한 내용이다.

final boolean equalsUserId = (request.getParameter("id") == document.user.id);

if(equalsUserId){
}

if(!equalsUserId){
}

이런식으로 가독성을 높일 수가 있다. 이 조건을 중점적으로 생각해야 한다는 것도 제공할 수 있기 때문에 가급적이면 이렇게 코드를 짜는 것이 이해도를 높일 수 있을 것이다.
그리고 전장에서 배웠듯 !를 사용하여 부정의 의미보다는 긍정적으로 조건을 짜는 것이 가독성을 더욱 높일 수 있다.

드모르간의 법칙 사용

NOT을 분배하고 AND/OR 를 바꿔라

  1. not (a or b or c) → (not a) and (not b) and (not c)
  2. not (a and b and c) → (nor a) or (not b) or (not c)

if(!(fileExists && !isProtected))보다
if(!fileExists || isProtected) 가 더 낫다.

쇼트 서킷 논리 오용 금지

프로그래밍 언어에서 and, or조건이 있을때 앞 조건이 참이면 뒤는 평가하지 않는다. 그래서 복잡하게 연산을 해야할 때 오용될 가능성이 있다.

그래서 어떤 코드를 작성함에 있어서 A를 하고 A를 가지고 B를 수행하고 C를 반환해라 라는 로직이 있다고 가정하면
이 조건을 한번에 나열해서 한줄에 작성하는 것은 너무 많은 의미를 담고 있기 때문에 로직 돌아가는 것을 한번 깊게 생각해야하는 과정이 있을 수 있다.
그래서 A - B - C순서를 한줄마다 입력해준다면 줄 수는 늘어나게 되었지만 이해하기에는 쉬워질 것이다.

거대한 구문 나누기

똑같은 조건 그리고 똑같은 긴 값을 사용하게 될 때는 메소드 시작부분에서 공통변수로 잡아두고 그 변수를 호출하면서 조건을 넣어주는 것이 깔끔하고 반복코드를 줄일 수가 있다.
이렇게 되면 어떤 조건이 변경되어도 변수부분을 수정해서만 기능을 바꿀 경우도 많을 것이다.

요약

여기서는 파악하기 어려운 거대한 표현을 잘게 쪼개어 코드를 읽는 사람이 더 쉽게 이해할수 있는 방법을 알려주었다.

설명 변수를 도입하는 것의 장점

  • 거대한 표현을 작은 조각으로 나눈다
  • 하위표현을 간결한 이름으로 대체하여 코드를 문서화한다
  • 코드를 읽는 사람이 코드의 핵심 개념을 파악하는 것을 돕는다.

복잡해보이는 함수나 메소드를 만나면 잘게 쪼개는 일을 많이 해봐야겠다.

profile
💻 많이 짜보고 많이 경험해보자 https://lsj8367.tistory.com/ 블로그 주소 옮김

0개의 댓글