ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 나에게 필요한 클린 코드
    DEV 2022. 3. 9. 22:57

    서론

    클린 코드를 읽어봐야지 생각만 하다가 시간이 생긴 김에 처음으로 일독한 후

    많은 내용을 모두 다 기억하고 적용하면 좋겠지만 지금 내가 코드를 작성할 때 중점을 두고 고민해볼 내용을 정리해보았다.

    이름 정하기

    지금도 클래스, 메소드, 변수 등의 이름을 지을 때 조금 길어지더라고 한눈에 보고 확인할 수 있는 이름을 정하려고 노력하고 있지만 서로 너무 비슷하거나 혼동되는 이름을 정하지 않도록 좀 더 고려해야 할 것 같다.

    이름을 잘 정하고 싶은데 막상 이름이 잘 생각나지 않는 난제는 참 어렵다..

    함수에 대하여

    함수는 하나의 일만!

    하나의 함수에서 많은 일을 하게 되면 작성할 때는 잘 알지만 조금만 시간이 흐른 뒤에 보게 된다면 도대체 뭘 하고 싶은 건지 모르게 된다. 따라서 함수는 하나의 일만 해야 하며 그 행위에 맞는 이름을 갖게 해야 한다.

    하나의 일만 하게 하려면 결과적으로 함수를 나눠야 한다. 함수 속에서 중첩 구조를 줄이고 너무 길지 않게 작성하자.

    함수의 인수 개수

    함수의 인수는 적을수록 좋다. 3항 이상의 인수는 가능한 피하도록 작성해보자

    오류 처리도 한가지 작업

    오류 처리도 한가지 작업이기 때문에 Try/Catch 블록을 뽑아내보자

    public void delete(something){
        try{
            deleteSomething(something);
        } catch (Exception e){
            logError(e)
        }
    }
    
    private void deleteSomething(something){
        delete...
    }

    주석

    주석이 코드보다 주가 돼서는 안된다. 주석이 없이 코드만 보고 이해할 수 있도록 작성하도록 하자.

    법적 정보, 특정 정보 제공, 의도 설명, 경고, 중요성, TODO 주석을 제외하고는 대부분은 작성할 필요가 없다.

    오류 처리

    오류 코드로 처리하기보다 예외를 사용하자

    오류 코드로 처리하면 코드가 복잡해지니까 예외를 던져서 중요 로직과 오류 처리 코드를 분리하자.

    예외 클래스 정의

    외부 라이브러리를 호출하는 경우 외부 라이브러리가 던질 예외를 잡아 하나의 예외만 반환하도록 클래스를 감싸서 사용하자.

    이렇게 처리하면 외부 라이브러리와 프로그램 사이의 의존성이 크게 줄어들게 된다.

    Local port = new LocalPort(12);
    try{
        port.open();
    } catch (PortDeviceFailure e) {
        ...
    } finally {
        ...
    }
    
    public class LocalPort {
        private ACMEPort innerPort;
    
        public LocalPort(int portNumber){
            innerPort = new ACMEPort(portNumber);
        }
    
        public void open(){
            try{
                innerPort.open();
            } catch (DeviceResponseException e){
                throw new PortDeviceFailure(e);
            } catch (... e){
                throw new PortDeviceFailure(e);
            } catch (... e){
                throw new PortDeviceFailure(e);
            } 
        }
    }

    테스트

    지저분한 테스트 코드는 테스트하는 것보다 안 좋은 결과를 낼 수 있다.

    테스트 코드를 BUILD-OPERATE-CHECK 패턴을 적용하여 가독성을 높이자.

    F.I.R.S.T

    • Fast : 테스트는 빠르게 동작해야 한다. 그래야 자주 돌려볼 수 있다.
    • Independent : 각 테스트는 독립적이어야 한다.
    • Repeatable : 어떤 환경에서도 반복 가능해야 한다.
    • Self Validationg : bool 값으로 결과를 내어 테스트 스스로 성공 여부를 가늠할 수 있어야 한다.
    • Timely : 적시에 작성해야 한다. 단위 테스트 작성 후 실제 코드를 구현하자.

    마무리

    클린 코드를 읽고 나서 당장 기억하고 적용해보고 싶은 부분들을 정리하였는데 막상 코드를 작성할 때 되면 또 생각나는 대로 작성하게 될지 모른다.

    하지만 클린 코드라는 것은 단번에 완성되는 것이 아니고 책에서 나오듯 보이스카웃 규칙처럼 항상 더 좋은 코드로 정리해 나간다면 깨끗한 코드를 만들어 갈 수 있을 것이다.

    클린 코드도 지금은 처음 읽어봤지만 시간이 흐르고 난 뒤에 다시 읽어 본다면 그때는 다른 교훈을 얻을 수 있을 것 같다.

    반응형

    댓글

Designed by Tistory.