어의화된 코드를 쓰다

1930 단어

사례 1: 이해할 수 없는 판단문


첫눈에 if라는 판단 논리를 보았을 때 우리는 이것이 id의 길이를 판단하는 것밖에 몰랐다. 왜 이렇게 판단하는지, 그것이 표현하는 업무의 의미가 무엇인지 알 수가 없었다.
if (String.valueOf(vo.getId()).length() < 15 ) {
   doA();
} else {
   doB();
}

시나리오 1: 주석 작성


주석을 쓰는 방식으로 너의 의도를 설명할 수 있다.주석이 코드 변경에 뒤떨어질 가능성이 높기 때문에 이런 방식도 사실 결점이 있다.
//                 
if (String.valueOf(vo.getId()).length() < 15 ) {
   doA();
} else {
   doB();
}

방안2: 판단 논리 추출 방법

if (isXXX(vo.getId())) {
   doA();
} else {
   doB();
}
....
/**
*             ,         
*/
public boolean isXXX(int id){
  return String.valueOf(vo.getId()).length() < 15 ;
}
  • 가능한 방법명은 업무의 의미를 직접적으로 나타낼 수 있도록 하고 방법명이 너무 길까 봐 걱정하지 마라
  • 뽑은 방법이 스스로 묘사할 수 없으면 방법에 주석을 추가한다
  • Intellij IDEA에서crtl+alt+m 추출 방법
  • 사례 2: 알 수 없는 숫자(문자열) - 마법수


    이른바 마법수란 통속적으로 말하면 코드를 쓴 사람만 의미를 아는 상수(사실 n일이 지나면 코드를 쓴 사람도 기억하지 못할 것이다)이다. 이런 상수는 아무런 주석이나 설명도 없고 상수 자체로도 의미를 추측할 수 없다.
     Person person = new Person();
     person.setSex(1);
    

    우리는 setSex 방법에서 알 수 있듯이 이쪽은 성별을 설정하고 있지만 방법의 매개 변수는 확실히 상수 1이다. 분명히 우리는 1이 남자인지 여자인지 알 수 없다.이때, 우리는 위아래 문장을 뒤집거나, sex의 값이 어디에 쓸모가 있는지 보아야 한다. 생각하면 매우 피를 토한다

    시나리오 1: 상수 추출, 상수로 정의

    private static final int SEX_MAN = 0;
    private static final int SEX_WOMAN = 1;
    ....
     Person person = new Person();
     person.setSex(SEX_WOMAN);
    
  • 상수를 상수로 추출하고 의미화 명명 상수
  • Intellij IDEA에서는 ctrl+alt+c를 통해 상수
  • 로 추출 가능

    시나리오 2: 열거로 정의

    public enum Sex {
      MAN, WOMAN
    }
    ....
     Person person = new Person();
     person.setSex(Sex.WOMAN);
    
  • 매거할 수 있는 상수에 대해enum을 사용하면 더욱 명확해진다
  • 총결산

  • 코드는 개인이 보는 것으로 최대한 어의화 코드를 많이 생각해야 한다
  • 간단할 수 있으면 잔소리하지 마라. 코드량이 품질을 대표하지 않는다
  • 재구성 의식을 유지한다.반드시 근육과 뼈를 상하게 하는 재구성은 필요 없고 실제 상황에 따라 국부 재구성
  • 을 할 수 있다.

    좋은 웹페이지 즐겨찾기