Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL 1장 - 깨끗한 코드
#clean_code
2년 전
814
2

오늘 TIL 3줄 요약

  • 코드는 요구 사항을 상세히 표현하는 수단이자 언어이다.

  • 나중은 결코 오지 않는다. - 르블랑의 법칙

  • 빨리 가기 위한 유일한 방법은, 언제나 코드를 깨끗하게 유지하는 습관이다.

TIL (Today I Learned) 날짜

2022.04.22 - 2022.04.23

오늘 읽은 범위

1장. 깨끗한 코드

책에서 기억하고 싶은 내용을 써보세요.

코드가 존재하리라

코드를 다루는 책이 시대에 뒤떨어졌다거나, 코드의 종말이 다가왔다고 주장도 여럿 존재한다. 코드는 더 이상 문제가 아니라, 모델이나 요구사항에 집중해야 한다고 주장하며 코드를 자동으로 생성하는 시대가 도래해 프로그래머가 필요없다고 주장하는 생각은 틀렸다.

  • 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업이 프로그래밍이며, 그 결과가 코드이기 때문이다.

  • 고도로 추상화된 언어나 특정 응용 분야 언어로 기술하는 명세 역시 코드이기 때문이다.

💡 코드는 요구 사항을 상세히 표현하는 수단이자 언어이다.

나쁜 코드

  • Killer App 하나로 대박난 회사가 있었지만, 머지 않아 망했다. 원인은 나쁜 코드였다.

  • 나쁜 코드에 발목이 잡혀 고생하며 헤쳐나가는 것을 고행(wading)이라고 한다.

  • 일정에 맞춰 나쁜 코드를 짜고 나중에 고치겠다고 생각한 경험이 있을 것이다. 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로 위로했던 것처럼 말이다. 하지만 나중은 결코 오지 않는다(르블랑의 법칙).

💡 나중은 결코 오지 않는다.

나쁜 코드로 치르는 대가

초기에는 빠른 속도로 진행되던 프로젝트가 1-2년 만에 굼뱅이처럼 느린 페이스로 진행되는 것을 볼 수 있다. 매번 얽히고설킨 코드를 ‘해독'해내서 엃히고설킨 코드를 더해 고칠 때마다 엉뚱한 곳에서 문제가 생기기 때문에 청소할 방법을 찾지 못한다. 불가항력이다.

💡 나쁜 코드로 짠 프로그램에 가해지는 변경사항에는 어느 것 하나 사소하지 않다.

나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. 그러다가 마침내 0에 근접한다. ****관리팀은 새 인력과 팀으로 재설계를 꿈꾸지만, 나쁜 코드를 더 많이 양산하고 생산성은 더더욱 떨어져 거의 0이 된다.

💡 시간을 들여 깨끗한 코드를 만드는 노력이 비용을 절감하는 방법일 뿐만 아니라 전문가로서 살아남는 길이다.

원초의 난제

프로그래머들은 나쁜 코드가 업무 속도를 늦춘다는 사실을 이미 알고 있다. 그럼에도 모든 프로그래머가 기한을 맞추려면 나쁜 코드를 양산할 수 밖에 없다고 느낀다. 즉, 빨리 가려고 시간을 들이지 않는다. 나쁜 코드를 양산하면 결국 기한을 맞추지 못한다.

💡 빨리 가기 위한 유일한 방법은, 언제나 코드를 깨끗하게 유지하는 습관이다.

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

르블랑의 법칙이 굉장히 인상 깊었다. 여러 프로젝트를 진행하면서 일단 기능 구현이 우선이라고 생각하고 코드를 되는대로 짰다. 그리고 나중에 리팩토링 하면되지 하고 생각했다. 하지만 일단 기능이 돌아가니까 괜찮아... 라고 나에게 말하며 나는 다시 그 프로젝트들을 고치지 않았다. 지금까지도.

기억도 제대로 나지 않고, 읽기도 쉽지 않은 코드때문에 이것저것 만져보다가 포기했기 때문이다. 처음부터 깨끗한 코드를 짜는 것은 정말 중요한 것 같다.

깨끗한 코드에 대해서 이야기 하는 부분도 공감이 많이 갔다. 가독성, 중복(효율), 한가지에 집중, 추상화, 오류 처리, 테스트 케이스 모두 중요한 이야기다. 나는 코드를 짤 때 가독성과 효율을 가장 중요하게 생각한다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

추상화라는 단어가 많이 나오는데, 사전적인 뜻을 이해해도 개념이 정확이 이해되지 않는다. 객체 지향에서 추상화란 객체들의 공통 속성과 행위를 추출하는 것이라고 한다.

  • 클래스를 정의하는 것

  • 공통의 속성이나 기능을 묶어 이름을 붙이는 것

불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것이라고도설명되어 있다. 토끼, 치타, 고양이, 사자가 객체라면 동물이라는 클래스를 만드는 것이 추상화라고 볼 수 있다.

그러나 나에게 “추상화를 해봐” 라고 한다면 어떻게 해야할지 아직 감이 오지 않는다.

오늘 읽은 다른사람의 TIL

2 comments