협업) 클린 코드를 꼭 해야 할까?
클린 코드(Clean Code)란?
클린 코드란 무엇일까? Wiktionary에는 다음과 같이 정의 되어 있다.
Non-redundant software code comprising of focused task-specific modules and functions, written in a systematic manner so that another coder can easily interpret or modify it.
다른 코더가 쉽게 해석하거나 수정할 수 있도록 체계적으로 작성된, 특정 작업에 초점을 맞춘 모듈과 함수들로 구성된 비중복 소프트웨어 코드.
쉽게 말하면, 모두가 봐도 쉽게 이해할 수 있는 코드를 뜻한다.
왜 클린 코드를 해야 할까?
위 그림을 보면 나쁜 코드의 경우, 초반에 빠르게 개발 될지라도 유지보수성이 좋지 않다는 것을 알 수 있다. 반면 클린 코드의 경우 타 개발자가 쉽게 이해할 수 있어 유지보수성이 좋다. 그렇기에 생산성이 꾸준히 유지되는 모습을 볼 수 있다.
어떻게 클린 코드를 해야 할까?
사실 이건 정답이 없다. 객체 지향 생활 체조 9원칙
을 지켜도 좋고, 의도를 분명히 밝혀라
, 주석 없이 읽히게 해라
와 같은 클린 코드의 원칙
을 따라도 좋다.
나 같은 경우, 클린 코드나 소트웍스 앤솔로지와 같은 서적보다 팀 컨벤션을 우선시 하는 편이다. 결과적으로 우리의 코드를 가장 많이 보는 사람들은 나와 우리 팀원이기 때문이다.
꼭 클린 코드를 해야 할까?
내 답은 필요하다면 하세요 이다. 본인이 필요성을 느끼고 불편함을 느낀다면 하는 것이고, 아니라면 그대로 유지해도 좋다. 이렇게 말하니 너무 무책임한 것 같아, 나만의 리팩토링 기준을 말하면 다음과 같다.
- 팀 컨벤션을 지켰는가
- 객체 지향적인가
- 일주일 전의 내가 봤을 때 이해할 수 있는 코드인가
클린 코드는 관점에 따라, 작성자에 따라 전부 다르다. 그렇기에 너무 리팩토링에 치중하고 클린코드에 집착하지 말라는 말을 하고 싶다. 정답이 없는 문제이기 때문이다. 마치 쇼핑몰에서 옷을 하염없이 고민하는 것과 같다. 일정 수준까지는 범용성 있는 옷, 나에게 맞는 옷을 고민하는 것이 좋지만 계속 고민한다 해서 드라마틱한 결과가 나오기는 힘들 것이다.
논의 사항
다음과 같은 코드가 있다.
public void toString() {
System.out.println("객체 필드들에 관한 설명");
}
위 코드는 객체에 관한 설명을 toString()에서 출력하고 있다. 강사님 말씀에 따르면 해당 방식은 현업에서 굉장히 많이 통용되고 있는 방법이라고 한다.
그러나 toString()은 Java에서 객체에 관한 설명을 반환하라고 이른바 정해둔 코드이며, 메서드 명을 해석해봐도 toString(String으로 변환하라) 라는 뜻이다.
여러분이 볼 때 해당 코드는 깔끔한 코드인가? 아니면 더러운 코드인가?
팀에서 위 코드를 사용한다면 따를 것인가? 바꿀 것인가?