Post

추상

추상

왜 클린 코드를 추구해야 할까?

출근해서 가장 많이 하는 일이 무엇일지 생각해 보면 답은 이전에 나 아니면 다른 누군가가 작성한 코드를 읽는 것이다. 현재는 어느 정도 익숙해져서 코드를 읽는 속도가 많이 빨라졌지만, 여전히 레거시 코드를 읽는 것은 귀찮고 힘든 작업이다.

별의별 다양한 레거시 코드들을 볼 때마다 커밋 내역을 뒤져보면서 누가 짠 코드인지 마음속으로 욕하기도 한다. 그럴 때마다 언젠가 내 코드를 읽으면서 나와 같은 생각을 할 사람이 있을 수도 있으니 읽기 쉽게 작성하자는 다짐을 하면서 열심히 코드를 작성한다.

다른 사람의 코드를 읽는 것도 문제지만, 아무리 내가 작성했던 코드라도 시간이 흘러서 머릿속에서 잊힐 때쯤에 보면 쉽게 이해하지 못할 때도 많다. 물론, 보다 보면 기억이 나서 다른 사람 코드보다야 금방 이해할 수 있긴 하다.

결국 다른 사람을 위해서도 있지만, 자신을 위해서라도 클린 코드를 추구하며 읽기 좋은, 이해하기 좋은 코드를 작성해야 한다.

추상과 구체

추상이란?

추상은 구체적인 것에서 중요한 것만 추출하고, 불필요한 부분을 버리는 작업이다. 이때 추상화 레벨에 따라 어느 영역까지를 중요하게 혹은 덜 중요하게 볼 것인지에 대한 기준이 달라진다.

컴퓨터에 적용된 추상화

비트는 존재하는지에 대한 여부를 표현하고, 이러한 비트를 8개 모으면 하나의 바이트를 만들 수 있으며, 2개의 바이트로 하나의 문자를, 4개의 바이트로 정수(int)를 표현할 수 있다. (JAVA 기준)

이러한 자료형들이 서로 다른 비트의 개수로 이루어진 데이터들을 어떻게 읽을지 추상화를 한 것이라고 볼 수 있다. 그래서 컴퓨터는 이러한 추상화를 통해 0과 1만으로도 고수준의 작업을 처리할 수 있는 것이다.

즉, 고수준은 추상화 레벨이 높아서 사람이 이해할 수 있고, 저수준은 추상화 레벨이 낮아 사람보단 기계가 이해하기 쉬운 것이다.

추상화와 가독성의 연관성

추상화는 결국 복잡한 무언가를 단순화하여 이해하기 쉽게 만드는 것이기에 복잡한 코드라도 이해에 도움이 되는 중요한 부분들만 추상화를 거친다면 읽기 좋은 코드로 만들 수가 있다.

구체화 할 수 있어야 올바른 추상화다

정보의 중요도를 잘못 파악해 중요한 정보를 부각하지 못하거나, 정보의 중요도에 대한 기준이 해석자 간에 서로 다르다면 추상으로부터 구체를 유추할 수 없게 된다.

읽기 좋은 코드를 위해 추상화를 적용했는데, 정작 읽을 수가 없다면 오히려 부작용만 발생하게 된다. 그래서 항상 추상화할 때는 구체화를 할 수 있는지를 생각해야 한다.

그래서 적절한 추상화란 도메인의 문맥 안에서 구체화할 수 있는 최소한의 핵심만 남겨서 표현하는 것이라고 볼 수 있다.

This post is licensed under CC BY 4.0 by the author.