티스토리 뷰
코드가 복잡하다고 느끼는 건 언제일까요.
복잡한 코드의 일반적인 특징은 내용이 길고 또 if-else 구문과 for문이 여러번 중첩 되는 경우가 많습니다.
물론 구조적(상속, 복잡한 디자인패턴, 코드의 파편화 등)으로 복잡한 경우도 있지만 지금은 단순히 코드 그자체만 봤을 때입니다.
실무에서 조건문만 잘 정리해도 코드가 확 바뀌는걸 볼 수 있었습니다.
복잡한 조건문을 단순화하여 가독성을 향상시키는 작업을 하겠습니다.
혹시나 구글에 참고할 만한 글이 있나 찾아봤더니 좋은 글이 있어 참고합니다.
원본 링크 : https://wpshout.com/unconditionally-refactoring-nested-statements-cleaner-code/
조건문의 스타일을 Bubble style과 Gateway style로 분류한걸 볼 수 있습니다.
Bubble style
이미지만 봐도 복잡함이 느껴지지 않나요.
if-else 덩어리로 보입니다.
또 다른 스타일인 Gateway style을 아래와 같습니다.
Gateway style
Gateway 스타일이 Bubble 스타일 보다 훨씬 쉽고 단순하게 변한걸 알 수 있습니다.
조건문을 개선 하는 작업은 Bubble style을 Gateway style로 바꾸는게 작업이라고 볼 수 있습니다.
예제를 통해 변환 작업을 해 보겠습니다.
실제 소스를 보면 조건문의 대부분은 값의 유무 확인, null 체크, 필수값 체크 등으로 이루어져 있습니다.
이런 경우 return과 Exception을 활용한다면 조건문을 쉽게 풀어 낼 수 있습니다.
동일 결과물이지만 가독성이 확 바뀌지 않았나요?
그런데 위의 코드는 쉽긴한데 실무에 써먹기에는 부족한 부분이 있습니다.
Exception을 활용해서 바꿔보겠습니다.
단순히 결과값을 true/false로만 했을 때보다 훨씬 나은 결과물을 볼 수 있습니다.
경우에 따라 반환값을 여러개 가져야 하거나 해당 경우에 따라 특정 처리를 해야 한다면 반환되는 객체와 Exception을 그에 맞게 설계하면 됩니다.
위와 같은 경우가 프레임워크 또는 공통을 관리하는 사람이 Assert를 만들어서 사용하게 되면 소스는 더 간단하게 바뀔 수 있습니다.
이와 같이 처리하기 위해서는 선결 과제가 있습니다.
일관성 있는 예외 처리입니다.
예외 발생시 어떻게 처리할지 정해 놓지 않으면 소스 여기 저기에 try-catch로 뒤덮히는 걸 볼 수 있습니다.
예외 처리에 따른 예외 설계가 필요합니다.
API에서는 예외를 메시지로 보여 줘야 합니다.
웹 어플리케이션에서는 에러 페이지로 연결 시켜줘야 합니다.
예외 관련 처리와 설계 관련해서는 따로 정리를 하도록 하겠습니다.
결론
최대한 Bubble style을 Gateway style로 전환하는게 중요합니다.
중첩된 if문만 제거해도 코드의 가독성은 엄청나게 향상될 수 있습니다.
Gateway style로 전환하기 위해서는 return과 Exception을 잘 사용해야 합니다.
참고
https://dzone.com/articles/code-smells-if-statements
* 조건문 처리에 대한 글인데 참고할 만한거 같습니다.
'리팩토링(스프링기반)' 카테고리의 다른 글
타입선언은 인터페이스로 하자 (0) | 2019.01.07 |
---|---|
Java class, method 선언 시 표현 순서 (0) | 2019.01.07 |
로그인 프로세스 개선 (0) | 2019.01.03 |
Use try-with-resources or close this "BufferedInputStream" in a "finally" clause (0) | 2019.01.02 |
[리팩토링]일단 뜨겁게 청소하라. (1) | 2019.01.01 |
- Total
- Today
- Yesterday
- 설정
- cache
- 샘플
- 예제
- sample
- 타임리프
- RESTful
- thymeleaf
- UI
- AG-GRID
- restful서비스
- mapToList
- example
- lombok
- Spring Boot
- SHEETJS
- java
- listToMap
- 그리드
- springboot
- REST
- ag grid
- 스프링
- oracle
- 스프링부트
- spring
- Javascript
- 메시지
- 엑셀
- mybatis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |