Refactoring/Clean Coding Skill

클린코더스 강의 내용 정리 #003 - Function Structure

JeongKyun 2022. 4. 8.
반응형

서론

이번 글에서는 함수들의 구조에 대한 내용을 듣고 정리하려고 합니다.

한번 알아봅시다.

 


 

Function Structure ?

Arguments

문제1 - 인자가 많아지면 복잡도가 증가한다.

상황에 따라 다르겠지만 보통은 인자 3개를 최대로 보고 설계한다.

이를 해결할 수 있는 방법은 뭐가 있을까? 
1. 좋은 이름을 갖는 Setter를 쓰자.
2. Java Bean Pattern을 사용한다.
3. Builder Pattern을 적용한다.

가장 추천하는 방법은 Builder Pattern을 사용하는 것이다. 아래의 예로 보자.

 

Builder Pattern 예시

Builder Pattern 적용 전

 

Builder Pattern 적용 후 

 

적용 후 JUnit 테스트

 

Builder Pattern을 적용 후 확실히 파라미터에 대한 정보를 한눈에 보기 쉬워지는 것을 확인할 수 있다.

 


 

문제2 - Boolean 인자 사용 금지

위 말은 생각보다 단순한 논리이다. 코딩을 하다보면 Boolean으로 구분자를 만들어서 인자로 사용할 경우가 있는데, 이럴 경우 하나의 함수에서 두가지 이상의 일을 한다고 판단을 할 수 있다.

그래서 이럴 땐 Boolean을 인자로 사용하지말고 함수를 분리하는 방법을 택하면 된다.

 


 

문제3 - 인자로 null값을 기대하게 하지마라.​​

무슨말인지 감이 오는가?
인자로 값을 전달 받은 후 해당 값에 대한 null체크를 하는것에 대해 하는말이다.

만약 필연적으로 null이 들어갈 수 밖에 없는 상황이라면 이것도 함수를 분리하는 방법을 택해야 하고, 만약 반대의 상황이라면 앞단에서의 신뢰를 갖고 과감하게 null 체크 로직을 빼라.

만약 빼지 못하겠다면 팀원이나 단위 테스트를 못 믿는다는 말과 같다.

 


 

문제4 - try도 하나의 역할/기능이다.

우리는 앞선 글에서 하나의 함수는 하나의 기능만을 가져야된다고 말했다.
이 문제에 대한 말도 같은 말이다.

try를 하나의 역할과 기능으로 본다. 그렇기 때문에 하나의 기느응로 보고 구현해야 한다.
함수 내에서 try 문장이 있다면 try 문장이 변수 선언을 제외하고는 첫번째 문장이어야 한다.

try ~ catch ~ finally에 대해 정리하면
 1. try 블럭 내에는 한 문장(함수 호출)만 있어야 한다.
 2. finally가 함수의 마지막 블럭이여야한다. 이후에 어떤 라인도 없어야 한다.
 3. Error Handing은 하나의 일(기능)이다.

댓글

💲 많이 본 글