Clean Code 라는 건 없습니다
(steveonstuff.com)- 사람들이 '클린'코드를 위해 노력하지만, '클린' 이란건 유용한 척도가 아님
- 코드는 단순히 '클린'할수 없음. 왜냐하면 '클린' 이란건 코드에 대해서는 아무 것도 설명하지 못함
- 사람들이 코드가 클린하다고 하는 것은, 보통 코드가 어떤 방식으로든 훌륭하기 때문
클린코드는 좋은 코드가 맞을까?
-
코드는 여러가지 이유로 훌륭할 수 있음
ㅤ→ 읽기 쉬운, 이해하기 쉬운, 간단한, 성능 좋은, 안전한, 우아한, 테스트 가능한, 캡슐화된, 확장가능한, 유지보수 가능한, 재사용 가능한.. -
그러나 이러한 특성들은 어떤 면에서는 서로 상충됨
ㅤ→ 가장 단순한 코드는 아마도 가장 테스트하기 쉽지는 않을 것
ㅤ→ 인터페이스와 주입된 종속성은 테스트를 편리하게 하지만, 단순성과는 거리가 있음
ㅤ→ 싱글톤을 많이 쓰면 이해하기는 쉽지만, 유지보수 가능한 어플리케이션은 아닐 수 있음 -
이런것중 일부는 근본적으로 반대되는 것들이라 동시에 모두 충족하기는 어려울수 도 있음
ㅤ→ 엔지니어링은 Trade-off(절충) 이므로, 여기서 얘기하는 절충안을 가지고 팀에서 논의 해보는 것도 가능할 것
코드가 훌륭하다면, 우린 "왜 그런지"를 이야기 해야함
- 누군가 솔루션이 '클린' 하다고 얘기할 때, 그들은 그 이유에 대해서 합리화 하지 못하고 그냥 더 나은 선택이라고만 얘기하는 것
- 기술 솔루션에 대해 건설적인 토론을 하려면 하나의 솔루션이 다른 솔루션보다 나은 이유를 명확히 설명할 수 있어야 함
ㅤ→ 그냥 '클린하다' 대신 '디커플링 되어있고, 이해하기 쉽고, 테스트하기 좋고..'
정확한 용어를 사용해야 함
- 코딩은 일반적으로 팀 스포츠임. 혼자 해킹할 때는 맘대로 할 수 있지만, 팀과 일할때는 아이디어를 논의해야함
- 특정 언어를 사용하여 기술 솔루션에 대해 토론하고, 팀 전체가 공통적인 이해를 가지는 것은 서로를 이해하는데 매우 중요함
- '클린 코드' 라는 말은 모든 사람들에게 각기 다름
ㅤ→ 누군가는 아키텍처가 잘 정의되어서, 누군가에겐 코드가 일관된 서식 스타일로 간단하게 짜여있어서.. - '캡슐화' '테스트 가능한', '재사용 가능한' 같은 단어들은 우리가 모두 동의하는 뜻을 가지고 있음
- 코드 특성을 설명하는 보다 구체적인 단어를 사용할 때 우리가 Same Page(이해하는 것이 같다)에 있다는 것을 확신하게 됨
- '클린' 은 '좋다'와 같은 정도의 정밀도를 가지고 있음
그렇다면 '클린 코드'는 뭐냐 ?
-
나는 코드를 '클린'하다고 설명할 때는, '코드가 좋기는 한데 그 이유를 완전히 확신할 수 없는 경우가 많다'는 결론에 도달했음
ㅤ→ 또는 코드가 좋은 이유를 알고 있지만 명확하게 설명한 단어를 찾지 못할 때 -
그런 직관(Intuition)을 키우는 것도 좋지만 거기서 멈춰서는 안됨. 좀 더 깊게 파고들어서 '왜 이 코드가 좋은지'를 이해하려고 해야함
ㅤ→ 이 코드에는 다른 것에는 없는 다른 특성이 있나? 그리고 그 특성이 우리 프로젝트에 가장 적합할까? 아마도 그게 올바른 솔루션이 아닐 수 있음 -
클린 코드가 필요한 것이 아니라 ______ 코드가 필요하다는 것을 확신할 수 있기를 바람
'그 책'에서 저자가 말한 클린코드는 이 중 '이해하기 쉬운', '테스트 가능한'에 초점이 맞춰져 있었던 것 같습니다. 물론 둘 다 아주 중요한 척도라고 생각합니다. 하지만 아직 정형화되지 않은 스펙이나 완성되지 않은 라이브러리 때문에 소위 말하는 'hack'을 쓰는 경우가 더러 있고, 이렇듯 프로그램의 퀄리티를 위해 코드의 퀄리티를 포기하는 부분은 불가피한 것 같습니다.
공감합니다. “클린”을 “고품질”이라고 볼 때, (와인버그가 말했듯) 품질은 누군가에게 가치있는 무언가니까, 품질에 대한 기준과 정의가 팀 안에서 필요하다고 생각해요.
애매 모호하게 '클린 코드' 라고 말하지 말고 콕 찝어서 얘기하자고 주장하는 글입니다.
이에 대해서는 해커뉴스에서도 '클린 코드'의 해석에 대해서 이런 저런 말들이 있습니다. 댓글도 함께 보세요
There’s No Such Thing as Clean Code https://news.ycombinator.com/item?id=30111516
주제는 조금 다르지만 예전에 올라왔던 아래 글도 참고 하세요
- 잘가, 클린 코드 [번역본] https://news.hada.io/topic?id=1321