코드 가독성 개선 with if kakao

 

오늘은 if 카카오에 올라온 코드 가독성 개선 영상을 보고 정리할까 한다.

프론트엔드 파트에서 나와 JS를 기준으로 설명하지만 코드를 개선함에 있어 백엔드에도 적용되는 부분이 있었다.

 

https://youtu.be/emGLxi0LvNI?si=rWqOcyGA8HiAKQYj

 

영상은 주니어 프론트개발자과 함께 진행한 코드 가독성 개선을 공유한다.

 

가독성 개선을 위해 집중한 부분은 다음과 같다.

정확한 단어 고르기잘 보이는 형태로 작성해보기

하나씩 알아보자.

 

정확한 단어 고르기

 

다른 뜻을 가진 단어와 구분하기

 

load와 fetch의 사전적 정의는 다음과 같다.

load: 가져와서 싣다

fetch: 가져오다

 

함수명에 load를 포함하면 가져온 후 싣는 행동을 기대할 수 있다.

따라서 data만 가져오는 경우는 load보다는 fetch가 적합하다.

혹은 data를 가져와 싣고 난 후 성공 여부를 반환하는 함수라면 load를 포함할 수 있다.

사실 나는 load가 성공 여부를 반환한다고 예상하긴 힘들 것 같다.

 

get: 가져오다, 결과를 당연히 가져올 것으로 기대

query: 질문하다, 결과는 없을 수도 있음

결과를 가져와 활용하는 경우는 get으로 정의해도 좋지만 결과의 유무를 판별하기 위해 사용하는 경우는 다른 단어로 대체하는 것이 좋다.

자바의 경우에는 exist를 예로 들 수 있다.

 

보다 구체적인 단어로 바꾸기

 

소설가 김영하가 학생들에게 금지시킨 말

짜증난다.

짜증이라는 감정에는 다양한 감정이 뭉뚱그려져 있잖아요.

 

코드는 글쓰기처럼 의도를 명확하게 전달할 수 있는 단어를 선택하는 것이 중요하다.

 

시간에 관한 포괄적인 단어 Time 대신에 시각을 의미하는 Date와 양을 의미하는 Duration로 구체적으로 표현

 

조건문으로 특정 시각 이전을 판별할 때, expirationTime을 expirationDate로 수정.

남은 시간을 반환하기 위한 변수명으로 remainTime / totalTime에서 remainDuration / totalDuration으로 수정.

 

 

정확하지 않아도 괜찮은 경우

 

위 예시는 초를 분, 시, 하루의 시간만큼 변환하는 코드이다.

예시의 위 코드는 보다 정확한 의미를 전달하기 위해 변수명을 설정하였지만 오히려 가독성을 떨어뜨리는 모양새이다.

맥락에 맞춰 누구나 이해할 수 있는 부분이라면 보다 간략하게 전달하는 것이 코드의 가독성을 향상시킬 수 있다.

 

잘 보이는 형태로 작성해보기

 

 

삼항 연산자를 이용한 분기 구현이다.

연쇄적인 조건으로 결과를 반환하는 경우, 위와 같이 flow chart처럼 표기하는 것은 시각적으로 가독성이 떨어진다.

위를 표와 early return을 사용하여 다음처럼 개선할 수 있다.

 

표는 행과 열을 통해 원소를 확인할 수 있는 것을 이용하여 예시처럼 조건과 결과를 시각적으로 연결할 수 있다.

하지만 early return을 사용했기 때문에 분기를 내려갈수록 전제가 추가되어 연결된 조건만으로 결과가 이어지지 않을 수 있다.

따라서 위처럼 구조를 작성하고 조건을 명확하게 전달할 수 있도록 설정하는 것 또한 중요하다.

 

case를 사용해 영어 단어를 한글로 전환하는 함수를 표현했다.

옆에 수정된 것처럼 dictionary(Map)를 이용해 표현하면 보다 직관적으로 개선할 수 있다.

 

예시의 위 코드는 어떤 흐름으로 동작하는지를, 구현한 개발자가 아니면 의도를 파악하기 어렵다.

아래처럼 동작 중간에 의미를 변수와 함수로 표현하여 의도를 전달할 수 있다.

자바의 경우 상위 메서드에서 추상화 레벨을 하나 늘려 private 메서드로 구현할 수 있다.

 

정리

 

refactoring, clean code, 객체 지향 ...

모두 연결되는 내용이라 생각한다.

어떤 사람들은 객체지향과 클린 코드에 너무 심취하지 말라고 한다.

아무도 정답을 모르고 아직도 여러 이론이 나오고 있기 때문이지 않을까 한다.

하지만 상황에 따라 자율적으로 판단하는 과정에서 보다 나은 결과를 얻기 위해서는

역량 높은 선배들의 조언을 따라가야 되지 않나 싶다.

 

마틴 파울러의 리팩터링 1판을 읽어봐야겠다는 생각이 들었다.