2009년 JAOO 컨퍼런스에 발표되었던
“깨끗한 코드 만들기: 매소드”에 대한 자료를 소개합니다.

자료는 아래 참고자료 부분에서 받아 보실 수 있습니다.

깨끗한 코드 만드는 일은 설계와 리팩토링이 체질화되지 않으면 참 어려운 일인것 같습니다.
하지만 객체 지향 언어가 갖는 기본적인 성질 정도를 이해하는 사람이
좀 잘해보겠다는 의지만 갖는다면 정말 자료에서 예로 말하고 있는 것 같은
말도 안되는 상황은 피해갈 수 있지 않을까 합니다.

자료를 보면 남의 얘기 갖지만,
우리 프로젝트만 보아도 이 같은 상황을 참 자주 만나게 됩니다.

심지어 메소드 하나가 화면의 크기에 서너배를 차지하는 일은 예삿일이고,
JSP는 끝이 어딘지도 모를 정도로 길고 복잡한 경우도 보았습니다.
이런 상황을 구조적으로 파악하고 리포팅을 해주는 여러 가지 툴도 있지만
리뷰 활동은 문제가 생길 때만 진행하는 게 대다수의 현실인 것 같습니다.
심지어 어떤 툴들은 생산성이라는 이유로 더 심한 복잡한 상황을 유도하는
경우도 있는 것 같습니다.

대부분 이런 상황이 발생한 이유는
비지니스 로직의 복잡성 때문이라고 하기도 하고
데드라인에 쫒겨 기능을 개발하기에도 정신이 없어 그렇게 되었다고도 합니다.

비즈니스 로직이 복잡하고 바쁘면 한 매소드 내에 들어가는 코드가 길어지나요?
어디에서도 이런 이론을 본적은 없는 것 같습니다.

사실은 원칙과 설계에 대한 초기 고민의 부족이
이런 상황을 만드는 경우가 대부분이고
이렇게 한번 시작이 되면 시간이 지날 수록
여러가지 추가 요구사항이 가미되면서 점점 더 코드가 커지고
복잡한 형태로 발전이 되는 경우가 대부분인 것 같습니다.

예전에 싱가폴 컨퍼런스에서 컨설턴트 중 한 사람이
개발에 있어 가장 중요한 두 가지는 테스트 케이스와 API를 작성하는
일이라고 했던 기억도 납니다.

이런 상황에서 테스트 중심의 개발이나
제대로 된 API의 제공은 꿈꿀 수도 없는 상황이지 않나 싶습니다.

하지만 초기에 좀 오래 시간이 걸린다 하더라고
요건 중심의 설계, 그리고 지속적인 테스트와 리팩토링을 통해
보다 적은 코드와 구조적인 모습을 지향하려고 노력한다면
이런 근본적인 문제를 보다 쉽게 풀수 있을 뿐만 아니라
결함이 적고 확장에 유연한 대응구조가 되면서
오려히 테스트나 운영시에 발생하는 비용을 상당히 단축할 수 있지 않을까 합니다.

누구나 다 아는 사실이지만 쉽지 않은 것 같습니다.
이 일은 특히 프로젝트 초기의 역량과 부지런함, 그리고 협업을
전제로 하죠.

JAOO라는 유명한 유럽쪽에서 컨퍼런스에서 발표되었던
깨끗한 코드 만드는 방법에 대한 자료에서 말하는 첫번째와 두번째 원칙은
너무나도 쉽고 명료합니다.

The first rule:
- They should be small.

The second rule:
- They should be smaller than that.

이러한 깨끗한 코드 만들기의
다른 하나로는 언어 자체가 유발시키는 boilerplate code 발생을
효과적으로 차단할 뿐만 아니라, 뛰어난 확장성을 가지고
최근 주목받고 있는 Scala라는 언어가 있습니다.

Groovy의 저자는 2003년 Scala를 보았더라면 Groovy라는 언어 자체를
만들지 않았을 거라는 말도 해죠.
이 저자는 Java5의 Generic System을 만든 사람으로도 유명하죠..
Scala는 자바의 차세대 언어라는 말을 듣고 있기도 합니다.

하지만 언어를 새로 배운다는 게 보통일은 아닌것 같습니다.
Scala는 많은 개념과 Syntax Sugar가 혼재하고 있어
처음 접근시 어렵고 복잡하게 느껴지지만 여태 경험하지 못했던
정말 놀라운 생각의 힘을 볼 수 있습니다.

특히 scala로 된 언어를 컴파일하여 클래스를 생성하고 JVM 위에서
동작할 수 있도록 되어 있어 자바의 모든 API를 사용할  수
있을 뿐만 아니라, 기존의 자바 프로그램과도 쉽게 통합하여
사용할 수 있는 강점이 있습니다.

참조자료

http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus-2009/slides/MichaelFeathers_CleanCodeIIIFunctions.pdf
http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html
http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-1

Posted by 모과이IT
,