코드 가독성에 대한 이야기

개발이야기|2021. 2. 27. 20:05

| 가독성 이란?

가독성은 코드의 첫 인상이다.

우리가 코드를 처음 맞닥드렸을 때 느껴지는 첫 인상이란게 있다.
어떤 코드는 지저분하며 복잡하고, 어떤 코드는 깔끔하고 이해하기 쉽다.
우리가 미팅을 할 때 상대방을 보면 첫 느낌이란 게 있다.
그 첫 인상이라는 것은 그 사람의 차림새, 용모, 걸음걸이, 눈빛 등으로부터 만들어진다.
코드도 사람의 첫 인상과 비슷하다.
사람과 같이 실체가 존재하진 않지만 코드 자체에서 풍겨져 나오는 기운이란 게 있다.
클래스를 잘 구성하여 역할을 분리하고 각 역할에 맞는 책임들이 클래스 내부에 캡슐화가 잘 되어 있는 것을 볼 때 그리고 논리의 흐름이 아주 자연스럽게 흘러가는 것을 볼 때 우리는 코드의 가독성이 좋다고 말한다.
즉, 유연하고 깔끔하게 잘 짜여져 있는 코드라고 이야기 하는 것이다.
이처럼 코드는 살아있는 생명체? 와 같다.

 

| 가독성이 왜 중요한가?

사람의 첫 인상이 중요한 것 처럼 가독성 또한 중요하다는 것을 이제 알았을 것이다.
만약 가독성이 좋지 않다면?
당신은 nagative 하게 변할 것이다.
만약 가독성이 좋다면?
당신은 positive 하게 변할 것이다.
코드의 가독성은 상대방의 마음을 움직이게 하는 힘이 있다라는 점이다.
물론 코드를 읽는 개발자마다 가독성의 기준은 다를 것이다. 사람들마다 아름다움을 측정하는 기준이 다른 것 처럼 말이다.

 

| 가독성의 나쁜예

가독성의 몇 가지 나쁜예를 짚기전에 우리의 모국어인 한글을 잠깐 살펴본다.


예문1

가독성은코드의첫인상이다. 

우리가코드를처음 맞닥드렸을때느껴지는 첫인상이란게있다.

어떤코드는지저분하며 복잡하고,어떤코드는깔끔하고이해하기쉽다.

 

예문2

가독성은 코드의 첫 인상이다.
우리가 코드를 처음 맞닥드렸을 때 느껴지는 첫 인상이란게 있다.
어떤 코드는 지저분하며 복잡하고, 어떤 코드는 깔끔하고 이해하기 쉽다.

위와 같이 두 개의 문장이 있다. 같은 문장이고, 같은 한국어이다.
하지만 어떤 것이 읽기 쉽고 이해하기 편한가?
물론 후자일 것이다. (예문2)
전자의 문장을 읽다보면 중간 중간 생각의 흐름이 흐트러짐을 느낄 수 있다.
문장과 문장 사이의 띄어쓰기가 없다보니 글을 읽을때마다 문장과 문장을 분리하고 해석하는 프로세싱 단계가 내 머릿속에서 이뤄지게 된다. 무의식중에 일어나는 현상이지만 이런 처리 절차는 우리 뇌를 피곤하게 하고, 글을 읽고 싶은 생각을 사라지게 만든다.


후자의 글은 어떠한가?
글이 술술 읽혀진다.
문맥과 문맥을 적절하게 나눴고, 띄워쓰기도 아주 잘 되어 있다.
이처럼 좋은 가독성을 가진 글을 읽는 것을 우리들은 선호한다.
그럼 코드도 이렇게 만들어야 하는 게 당연한 거 아닐까?

 

코드를 예로 들어보자.

 

예문1

@RequestMapping("/list")
public String list(Model model, Pageable pageable) {
	PageWrapper page = new PageWrapper(accountService.list(pageable), "/account/list");
	model.addAttribute("list", page.getContent());
	model.addAttribute("page", page);
	return "account/accountList";
}

 

예문2

@RequestMapping("/list")
public String list(Model model,Pageable pageable) 
{

	PageWrapper page = new PageWrapper(accountService.list(pageable), "/account/list");
    
	model.addAttribute("list", page.getContent());
    
	model.addAttribute("page", page);
    
	return "account/accountList";
    
}

어떤 예문의 코드가 더 가독성이 좋은지 판단이 될 것이다.

 

 

| 가독성보다 더 중요한 것은?

물론 개발한 코드의 가독성보다 더 중요한 것은 얼마나 유연하게 코드를 잘 짜느냐이다.
유연하다라는 표현이 좀 어렵게 느껴질지 모른다.
코드의 유연함?
코드가 무슨 연체동물도 아니고 뭘 유연하게 만들어야 한다라는 말인 것이냐.. 사실 나도 이런 표현이 왜 쓰이고 있는지 잘 모르겠다.
유연함이라는 단어에서 유추할 수 있듯이 시시각각 변하는 상황들을 잘 대처할 수 있는 코드? 그런 것을 의미하는 것은 아닐까?

예를 한번 들어보자.
유연함이란 털끝만큼도 없는 코드가 저기 있다. 헌데 어느순간 변경사항이 발생한다.
유연함이 없는 코드는 코드를 수정하고 또 다른 곳을 수정하고, 또 다른 곳을 수정해야 하는 반복적인 작업이 발생할 수 있다.
어떤 한 변경 사항이 트리거가 되어 연쇄적인 수정 사항이 발생하게 된다면 그것만큼 힘든 작업이 없을 것이다.
반면 구조를 잘 잡은 코드는 어떠한 변경 사항이 발생해도 대처하기가 쉽다.
사실 이렇게 글로 구구절절 써봤자 겪어보지 못하면 이 말이 무슨 말인지 잘 와닿지 않을 것이다.
그래서 백문의 불여일타가 중요하다라는 것이다.
어떤 깨달음을 얻기 위해서는 내가 직접 코딩을 해보고 그 상황에 직면해 봐야 한다.
글로 읽거나 유튜브 영상을 보고 난 뒤~~ 공부 끝~~~ 하지 말라는 말이다.
input(학습)이 되었으면 output(경험)을 해야 내 것이 되는 것이다.

내 것 = 학습 + 경험

 

| 결론

나도 아직 많이 부족하다.
어려운 논리의 문제를 맞닥들이면 그것을 개발하여도 만족스럽지가 않다.
서비스에 문제 없이 잘 동작하나 단순하지 않은 설계의 코드를 보고 있자면 내 마음도 복잡해 진다.

다만, 누군가가 내 코드를 읽을 때 소설책 읽듯이 술술 읽혔으면 하는 바램이다.

'개발이야기' 카테고리의 다른 글

REST API 설계 시 코드성 값 (Integer vs String)  (0) 2023.05.17
if 지옥에 빠지다  (0) 2023.05.13
비효율의 숙달화  (448) 2023.05.10
Java Heap Dump 를 이용한 문제 해결  (0) 2021.05.27
Github webhook 302 오류  (0) 2021.05.20
Mail health check failed 오류  (2) 2021.05.19

댓글()