개발놀이터

로버트 C 마틴의 클린코드와 클린코드에 대한 논란 본문

기타/오늘의 책

로버트 C 마틴의 클린코드와 클린코드에 대한 논란

마늘냄새폴폴 2024. 4. 28. 17:12

객체지향의 5대원칙 SOLID를 만들었다고 전해지는 로버트 C 마틴이 쓴 책 클린코드를 읽어봤습니다.

 

취업 준비때는 바빠서 취직하고는 책읽을 시간이 없어서 책 읽는 것을 소홀히했는데, 반성하며 읽다만 클린코드를 읽었습니다. 

 

로버트 C 마틴의 클린코드

 

책에서는 객체지향을 위해 클린코드를 어떻게 작성해야하는지에 대한 가이드라인이 나와있습니다. 

 

함수는 어떻게 작성해야 하는지, 주석은 어떻게 달아야하는지, 클래스는 어떻게 작성해야하는지 등등에 대한 내용이 들어있습니다. 

 

그런데 저자가 표현을 좀 강력하게해서 일부 오해의 소지가 있는것 같습니다. 

 

어떤 유튜버가 영상에서 클린코드를 무조건 맹신하면 안된다면서 "함수 하나에 하나의 책임만을 가지고 각각의 책임들을 함수로 빼야한다." 라는 말을 했는데 이를 오해한 사람들이 모든 함수를 다 빼라고? 코드는 클린해질지라도 가독성은 개나줘버리겠는데? 이런 느낌으로 영상을 제작하였습니다. 

 

하지만 이는 제가 봤을 때 저자의 의도를 잘못 해석한 것 같습니다. 

 

함수로 책임을 분리하되 함수 이름을 정확히 어떤 일을 하는지 명시적으로 적어 코드를 직접 보지 않고도 이 함수의 책임이 뭔지 예측가능하도록 하여 가독성을 높인다고 나와있습니다. 

 

즉, 코드를 보면 이런 느낌이겠죠. 

 

public void payment(MemberRole role) {
	boolean isLogin = loginCheck();
    
    if (!isLogin) {
    	throw new IllegalStateException("로그인을 진행해야합니다.");
    }
    
    boolean isBalanceOver = checkBalance();
    
    if (!isBalanceOver) {
    	throw new IllegalStateException("잔액이 부족합니다.");
    }
    
	paymentLogic(role);
}

private boolean loginCheck() {
	
}

private void paymentLogic(MemberRole role) {
	
}

private boolean checkBalance() {

}

 

영상에선 이렇게 말하더군요. "이러면 왔다갔다 해야해서 가독성이 더 떨어진다". 음... 과연 그럴까요? 남이 내 코드를 본다고 가정을 안하고 개발하시는게 티가 많이 나더군요. 

 

남의 코드를 보고 이해해야 하면 저렇게 굳이 왔다갔다 안합니다. 왜냐? 난 결제로직만 보고싶은데 굳이 로그인 체크나 잔액 체크하는 로직까지 볼까요? 

 

오히려 로그인 체크, 잔액 체크, 결제로직이 하나의 메서드에 다 담겨있으면 어떤게 결제로직이고 어떤게 로그인 체크인지 주석이 없으면 확인하기 정말 힘듭니다. 

 

결제 로직을 봤다가 로그인 체크 로직을 봐야하면 어떨까요? 그럼 다시 로그인 체크 메서드를 보면 됩니다. 

 

또한, 주석 부분도 마찬가지입니다. 저자는 "주석을 달지 말아라 주석은 거짓말을 한다. 주석을 달 필요 없을 정도로 변수명이나 메서드명, 클래스명을 잘 지어라" 라는 말을 합니다. 

 

보통 비즈니스 로직은 변경이 잦고 주석은 거의 변경하지 않기 때문에 나중에 비즈니스 로직과 주석이 서로 다른 얘기를 하는 경우가 있습니다. 이를 저자는 "주석은 거짓말을 한다" 라고 표현한 것이구요. 

 

이를 "클린코드에서 주석을 달지 말래 미친거아니냐?" 라고 해석하시면 곤란하다는 것입니다. 

 

마치며

제 기준에서 클린코드라는 책은 생각이 많아지는 책이었습니다. 내 코드는 클린한가? 라는 생각이 들게하는 책이었습니다. 

 

또한, 이 책을 읽고 공교롭게도 유튜브에 평소 보던 유튜버 분이 이 책에 대해 올린 영상을 봤는데 제 생각이랑 완전 반대되는 내용의 영상이라 개인적으로 저자의 의도를 정확히 이해하고 만든 영상은 아닌 것 같다... 라는 생각이 들었습니다. 

 

평소에 자주 보던 유튜브 채널이었는데 트위터에선 많은 개발자분들이 이 유튜버분을 싫어하시더라구요. 그런거랑 별개로 내용이 재밌어서 봤던건데 이 영상을 계기로 저도 좀 마음이 멀어진 것 같네요. 

 

사실 책이란건 사람마다 느끼는 바가 다르기 때문에 제가 뭐라 말할 수 있는 영역은 아닙니다만, 영상을 보는 사람들에게 직접 책을 읽어보고 판단하게 하는 것이 아니라 마냥 책을 비판하기만 하면 실제 저자의 의도가 제대로 전달되지도 않은채 저 책은 좀 잘못됐다던데 하는 생각이 들게 만드는 것은 바람직하지 않다고 생각합니다. 

 

요즘 책을 읽으면 고등학교때 국어 공부좀 해놓을걸 하고 후회하게 됩니다. 개발 도서나 블로그 글을 보면서 저자의 의도를 이해하는게 쉽지않더라구요. 

 

아무튼! 저는 개인적으로 굉장히 재밌게 본 책입니다. 물론 맹신하면 안됩니다. 자신만의 코드 컨벤션을 지켜가면서 참고만 하는 정도로 읽으면 좋을 책이 될 것 같습니다.