ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이름 짓는 방법
    코드 성장 이야기/박재성 - TDD, Clean Code with java- 10기 2020. 12. 2. 23:06
    반응형

    좋은 이름을 갖는 방법

    1. 이름으로 해당 코드가 어떤 기능을 하는지 알 수 있게 하자

    전 회사에 다니면서

     

    혼자 한 부분을 담당하는 개발이 많다보니 이름에 대해 많은 생각을 하지 못했다.

     

    캐멀 표기법(Camel Notation : Camel Case : 낙타 표기법) 은 지켰지만 많은 부분에서 지키지 못하였다.

     

    아래는 내가 만든 메소드명이다.(생각난 것만 작성..)

     

    예) 

    public interface Disaster{
        int rain();
        int calculate();
    }

     

    위 인터페이스를 보게된다면 재난이란 클래래스에 rain이란 메소드가 있고,

     

    계산하는 메소드가 있다는 것을 알 수가 있다. 

     

    그렇다면 비로인해 어떤 재난이 발생했고, 어떤 계산을 하는지 알 수가 없다.

     

    메소드명이나 클래스명이 명확하지 않다면 개발자는 코드를 읽어 가면서 파악해야한다는 소리다.

     

    이는 곧 개발 생산성이 낮아진다는 것이다.(코드파악 때문에)

     

    위와 다르게 명확하게 작성하면 (아직 공부중이라 틀릴수도 있음..)

     

    아래와 같다.

     

    public interface flood{
        void getRainfall();
        void getPredictionDamagePrice();
    }

     

    처음에 작성한 것보다 명확하게 알 수 있다.

     

    위의 코드는 홍수가 발생이되면 강우량이 얼마고, 이에따른 예상 피해 금액을 가져올 수 있다는 것이다. 

     

    이와같이 개발자가 클래스명, 메소드명만보고 쉽게 알 수 있게 하는것이 매우 중요하다.

     

     

    2. 잘못된 이름을 피해라

    아래의 코드는 파라미터만 제대로 넣는다면 동작되겠지만, 

     

    코드의 명만 보고 사용하게 된다면 원하는 결과와 다른 값이 나오게 될것이다.

     

    이와같이 코드명이 실제 구현된 로직과 다르다면 많은 혼란이 발생 할 수 있다.

     

    public class Calculator{
        public int add(int first, int second){
    		return first - second;
        }
        
        public int div(int first, int second){
        	return first * second;
        }
        
        public int mul(int first, int second){
        	return first / second;
        }
        
        public int sub(int first, int second){
        	return first * second;
        }
    }

     

     

    3. 쉬운 이름으로 해라

    점점 영어를 많이 사용하지 않다보니(사용하는것만 사용함...)

     

    많은 단어들이 내 머리 속에서 지워지고 있다.

     

    게다가 사람들이 사용하지 않는 단어를 사용하게 된다면 많은 고민을 할 때가 있다.

     

    이를 위해서 구글에 검색하기 쉽고, 대중적인 단어로 만들어야 한다.

     

    아래는 어려운 이름과 쉬운 이름의 예시이다.

     

    public class Person{
        void kindMan();
        void unkindMan();
        void crazyMan();
        void cukcooMan();
    }

     

    kind와 unkind, crazy의 뜻은 누구나 알 수 있지만

     

    cukcoo라는 뜻은 잘모르는 경우가 많다.

     

    cukcoo를 검색하게 된다면 밥솥회사만 나올 것이다..

     

    crazy man와 같은 뜻인데 미친놈이라는 뜻이다.(미국 영화보다가 궁금해서 찾아봄)

     

    이렇듯 누구든지 알 수 있는 이름과 검색하기 쉬운 단어로 작성해야 된다.

     

     

    4. 클래스 이름은 명사나 명사구로 작성

     

     

    5. 메서드 이름은 동사나 동사구로 작성

     

     

    6. 한 개념에 한 단어를 사용해라

    아래 코드들을 보면 move는 차가 이동하는것, brake와 stop은 자동차가 멈추는 것을 뜻한다.

     

    개발자는 아래의 코드들을 보게된다면 stop이랑 brake에 대하서 일관하지 않다고 생각 할 것이다.

     

    위의 어긋남이 하나둘 식 모여 많은 코드량이 된다면

     

    개발자는 알맞은 메소드를 사용하기 위해 고생할 것이다.(sts나 intellj같은경우는 미리 메소드를 보여주지만..)

    public class Truck{
        void move();
        void brake();
    }

     

    public class SUV{
        void move();
        void brake();
    }

     

    public class Sedan{
        void move();
        void stop();
    }

     

     

    7. 해당 영역에서 사용하는 이름을 사용해라

    Strategy 패턴을 사용할 때 해당 패턴을 사용하는 class를 이름 뒤에 Strategy를 붙여주는 것이 대부분이다.

     

    만약 붙이지 않고, 사용하거나, 비슷한 의미를 가진 단어를 사용하게 된다면

     

    개발자 입장에서 많은 고민을 할 수가 있다.

     

     

    8. 불필요한 맥락을 없애자

    아래와 같이 계산기 class를 만들었다.

     

    계산기 안에는 덧셈, 뺄셈, 나눗셈, 곱셈이 존재한다는 것을 알 수가 있다.

     

    그렇기 때문에 아래와같이 굳이 메소드명에 calculator라는 명사는 붙이 필요가 없다.

     

    public class Calculator{
        public int addcalculator(int first, int second){
    		return first + second;
        }
        
        public int divCalculator(int first, int second){
        	return first / second;
        }
        
        public int mulCalculator(int first, int second){
        	return first * second;
        }
        
        public int subCalculator(int first, int second){
        	return first - second;
        }
    }

     

     

    참고

    박재성 - TDDTDD, Clean Code with Java 10기

    참고문서 - CleanCode 책 

     

     

    반응형
Designed by Tistory.