[Clean Code]클린코드_추천사, 0.들어가면서, 1. 깨끗한 코드

Sohee Yeo·2024년 6월 11일
0

Clean Code

목록 보기
1/1
post-thumbnail

✨ Clean Code

🧐 개발자라면 누구나 협업하기 좋은 코드, 유지보수를 효율적으로 할 수 있는 코드 등 좋은 코드에 대해 끊임없이 고민할 것이다. 나 또한 더 나은 코드에 대한 고민을 하지만 정작 깨끗한 코드가 무엇인지 모르고, 깨끗한 코드를 알아보지 못한다. 좋은 코드에 대한 힌트를 얻고자 <클린 코드>를 읽고 내용 정리를 해보려 한다!

📌 추천사

  • 사소한 곳에서 발휘하는 정직은 사소하지 않다.
  • 책임 있는 전문가라면 프로젝트를 시작할 때 생각하고 계획할 시간을 확보해야 한다.
  • 세세함에 주의를 기울이는 태도는 전문가에게 더더욱 필수적인 자질이 되었다.
  • 스크럼과 애자일에 관심이 모여진 현재는 제품을 신속하게 시장에 출시하는 방법론을 강조한다. 하지만 대다수 활동은 제조가 아니라 유지보수다.

🔑 5S 철학

Lean의 토대
→ 린(Lean)은 불필요한 낭비를 최소화하고 소프트웨어의 가치를 최대화하는 방식.

1. 정리, 조직, 정렬(Sort): 적절한 명명법 등과 같은 방법을 사용해 무엇이 어디에 있는지 알아야 함.
2. 정돈, 단정함, 체계화(Seiton): 코드는 누구나 예상하는 위치에 있어야 함.
3. 청소, 정리, 광내기(Seiso): 주석 혹은 주석으로 처리한 코드는 제거해야 함.
4. 청결, 표준화(Seiketsu): 일관적인 구현 스타일과 기법 필요.
5. 생활화, 규율(Shutsuke): 관례를 따르고, 자기 작품을 자주 돌아보고, 기꺼이 변경하는 규율.

  • 품질은 하늘에서 뚝 떨어진 위대한 방법론이 아니라 사심 없이 기울이는 무수한 관심에서 얻어진다.
  • 소프트웨어 설계에서 재작업은 가치를 가져온다.
  • 코드에 정직하고, 코드의 상태에 관하여 동료들에게 정직하고, 무엇보다도, 자기 코드에 대해서 자신에게 정직하라.

📌 0. 들어가면서

  • 장인정신
    - 장인에게 필요한 원칙, 패턴, 기법, 경험이라는 지식 습득
    - 열심히 일하고 연습해 지식을 몸과 마음으로 체득
  • 깨끗한 코드를 작성하는 방법은 매우 어렵다. 고생을 해야 한다.

📌 1. 깨끗한 코드

코드가 존재하리라

  • 앞으로 코드가 사라질 가망은 전혀 없다! → 코드는 요구사항을 상세히 표현하는 수단이니까.
  • 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업 = 프로그래밍. 이렇게 명시한 결과가 바로 코드.
  • 코드 = 요구사항을 표현하는 언어
  • 요구사항에 더욱 가까운 언어를 만들 수도 있고, 요구사항에서 정형 구조를 뽑아내는 도구를 만들 수도 있다. 하지만 어느 순간에는 정밀한 표현이 필요하다.

나쁜 코드

  • 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. 우리 모두는 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다.
  • 다시 돌아와 나중에 정리하겠다고 다짐했었다. 나중은 결코 오지 않는다.

나쁜 코드로 치르는 대가

  • 나쁜 코드는 개발 속도를 크게 떨어뜨린다.
  • 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. 그러다가 마침내 0에 근접한다.
  • 빨리 가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.
  • 깨끗한 코드를 작성하려면 '청결'이라는 힘겹게 습득한 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요하다. 열쇠는 '코드 감각'이다.
  • '코드 감각'이 있는 프로그래머는 나쁜 모듈을 보면 좋은 모듈로 개선할 방안을 떠올린다.

💡 깨끗한 코드란?

  • 논리 간단히, 의존성 최대한 줄여야 유지보수 쉬워짐.
    나쁜 코드 ⇒ 깨진 창문 비유
    → 창문이 깨진 건물은 누구도 상관하지 않는다는 인상을 풍긴다. 사람들도 관심을 끊는다. 창문이 더 깨져도 상관하지 않고, 마침내는 자발적으로 창문을 깬다. 창문이 깨지고 나면 쇠퇴하는 과정이 시작된다.

  • 메모리 누수, 경쟁 상태, 일관성 없는 명명법 등 오류 처리 꼼꼼히 처리.

  • 깨끗한 코드는 한 가지를 제대로 한다. 나쁜 코드는 너무 많은 일을 하려 애쓰다가 의도가 뒤섞이고 목적이 흐려진다.

  • 단순하고 직접적, 설계자의 의도 숨기지 않음.
    좋은 소설과 마찬가지로 깨끗한 코드는 해결한 문제의 긴장을 명확히 드러내야 한다.

  • 작성자가 아닌 사람도 읽기 쉽고 고치기 쉬움.

  • 단위 테스트 케이스와 인수 테스트 케이스가 존재.

  • 인간이 읽기 좋은 코드를 작성해야 함.

  • 언제나 누군가 주의 깊게 짰다는 느낌을 줌.
    → 누군가 시간을 들여 깔끔하고 단정하게 정리한 코드다. 세세한 사항까지 꼼꼼하게 신경 쓴 코드다.

  • 모든 테스트 통과, 중복 없음, 시스템 내 모든 설계 아이디어를 표현, 클래스 / 메서드 / 함수 등을 최대한 줄임.

  • 중복 줄이기, 표현력 높이기, 초반부터 간단한 추상화 고려하기.

  • 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드.

  • 코드를 읽는 시간 : 코드를 짜는 시간 = 10:1을 훌쩍 넘는다. 그러므로 읽기 쉬운 코드가 매우 중요하다.

보이스카우트 규칙

캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.

  • 지속적인 개선이야말로 전문가 정신의 본질이다.

결론

  • 예술에 대한 책을 읽는다고 예술가가 된다는 보장은 없다. 이 책 역시 마찬가지다. 이 책을 읽는다고 뛰어난 프로그래머가 된다는 보장은 없다. 단지 뛰어난 프로그래머가 생각하는 방식과 그들이 사용하는 기술과 기교와 도구를 소개할 뿐이다.

"연습해, 연습!"



📘 책을 읽으며 메이크업을 했던 시절이 떠올랐다. 눈썹의 대칭, 속눈썹의 각도 등 아주 사소한 부분이 전체를 좌우한다. 메이크업도 시간 내에 완성하는 것이 매우 중요한데, 시간에만 집중하고 디테일에 주의를 기울이지 않으면 완성도가 떨어지고 결국 내 실력은 발전하지 않는다. 프로그래밍도 메이크업과 닮았다는 생각이 들면서, 일정에 맞추기에 급급해 코드에 집중하기보다는 기능이 돌아가는지에만 집중했던 내 모습이 떠올라 부끄러워졌다. 물론 현업에서는 기한을 맞추는 것이 비즈니스 측면에서 매우 중요하기 때문에 꼼꼼하게 코드의 품질에만 집중하는 것은 불가할 것이다. 하지만 깨끗한 코드를 위한 디테일한 관심과 노력이 곧 나와 팀원, 나아가 팀과 회사에 도움이 될 것은 분명할 것이다.
'장인 정신'은 내가 무언가를 처음 시작할 때마다 스스로에게 세뇌하는 마인드이다. 어떠한 분야의 전문가란 머리로 하는 사람이 아닌 몸과 마음으로 하는 사람이라고 생각한다. 장인 정신을 가지고 무의식에 새길 만큼 많은 시간과 노력을 들일수록 전문가에 가까워질 것이다. 이 책을 통해 장인 정신을 가진 개발자가 되기 위한 마인드를 정립할 수 있을 것 같아 기대된다. 연습하고, 연습하자!



profile
실패에 무딘 사람. 프론트엔드 개발자를 꿈꿉니다

0개의 댓글