본문 바로가기
이론 공부 내용 정리

좋은 코드란 무엇인가?

by mazayong 2023. 4. 6.

목차

1. 좋은 코드?

2. 좋지 않은 코드?

3. 좋지 않은 코드를 줄이는 방법

 

 

 

 

1. 좋은 코드?

일반적으로 좋은 코드의 정의는 다음과 같다.

* 읽기 쉬운 코드

* 테스트가 용이한 코드

* 중복이 없는 코드

 

1.1 읽기 쉬운 코드

직관적으로 작성자에게 읽기 쉬운 코드를 작성하려면 작성자에게 익숙한 언어를 사용해 주석을 작성하면 된다.

그러나 주석은 관리하기 어렵고, 주석은 메타데이터여서 주석의 내용과 함수의 실제 동작이 일치한다고 보장할 수 없다. 그래서 요구사항을 반영하느라 함수가 수정될 때 주석이 함께 수정된다는 보장이 없다.

 

또한, 읽기 쉽다는 것은 주관적인 개념이기 때문에 개개인에게 다르게 다가간다. 코드를 읽는 사람의 언어에 따라 읽기 쉬운 기준이 달라지고, 코드를 작성하는 시점에서 작성자가 코드에 대한 이해도가 100%이기 때문에 작성자가 읽기 쉽게 노력해도 한계가 있다.

 

읽기라는 것은 단순히 코드를 읽는 것이 아닌 코드를 이해하는 개념도 포함되기 때문에 "읽기 쉬운 코드"라는 말에 대해 각자 다시 한 번 더 고민해봐야 한다고 생각한다.

 

 

1.2 테스트가 용이한 코드

테스트 코드가 잘 작성되어 있으면 리팩토링에 자신감도 생겨서 좋다고 할 수 있다. 그러나 왜 테스트가 용이한 코드가 왜 좋을까? 그리고 어떻게 테스트가 용이한 코드를 작성할 수 있을까?에 대한 고민이 필요한 주제이다.

 

 

1.3 중복이 없는 코드

물론 중복이 없는 코드는 코드를 실행하는 데 있어서 시간적, 공간적 개념으로 있어서 효율적이기 때문에 개발자라면 중복이 있는 코드를 없애고 싶어할 것이다.

그렇지만 과거에는 중복이었던 코드가, 지금은 해당 코드에 새로운 기능을 추가해서 만들어야 하기 때문에 이전에 중복되었던 코드를 다시 만들고, 기능을 추가한다. 이렇게 하는 일은 동일하지만 목적이 다른 코드를 추출했을 때에 생기는 비효율성에 대해서도 고민이 필요하다.

 

추출해야 하는 코드의 기준은 무엇일까?

 

 

 

 

2. 좋지 않은 코드?

좋지 않은 코드라면 해당 코드에서 이펙트가 없지만 메모리와 CPU를 잡아먹는 등 해당 프로그램 실행에 방해되는 요소를 가진 코드일 것이다.

 

2.1 쓰이지 않는 코드

쓰지 않게 된 코드(Dead Code)가 있는데, 이 코드의 목적과 기능을 알지 못한다면 감히 삭제하지 못해 컴퓨터 자원을 잡아먹는 요소가 될 것이다.

 

2.2 쓰이지 않는 코드라고 판단하게 만드는 요인

* 거리

코드가 동작하는 곳과 코드가 정의된 곳 사이 물리적 거리가 멀면 파악이 힘들어진다. 보고 있는 코드가 일정 범위 내에서만 사용된다는 확신이 있다면 해당 범위만 확인하면 된다.

* 순수하지 않은 함수

함수 외부의 어떤 값을 기반으로 동작하는 함수는 함수의 이펙트를 제어하기 어렵다. 함수 입출력만 확인하여 함수 내부를 수정할 수 없다면 수정하기 까다롭기 때문이다.

 

 

 

 

 

3. 좋지 않은 코드를 줄이는 방법

3.1 추출과 추상화

우선 추출은 특별한 기준 없이 해당 코드를 밖으로 끌어내는 것이고, 추상화는 대상의 중요한 요점들을 정리하여 재해석한 것이다.

 

3.2 추상화가 필요한 이유

추상화는 한 파일에 여러 로직이 얽혀있을 때 각 코드 조각 중 서로 의존 관계에 있는 것을 추출해야 하기 때문이다. 단순한 추출만 이루어질 경우, 재사용하기 어렵고 오히려 자원만 낭비할 수 있기 때문에 함수의 역할을 인지하고 하나의 역할만 하도록 정의해야 한다. 즉, 의존성을 드러내기 위함이 추출의 목적이 되어야 한다.

따라서 추상화가 된 함수는 하나의 목적을 갖게 되고 의미 있는 추출이 이루어진다.

 

그 외에는 삭제하기 쉬운 코드와 어려운 코드의 분리, 일관성 있는 코드, 확장성 있는 코드 등이 중요하다.

 

 

 

https://jbee.io/etc/what-is-good-code/