티스토리 뷰

Clean Code 관련된 내용을 매주 하나씩 정리를 해보려고 한다. Clean Code 관련된 내용은 책에서는 많이 봤고, 머릿속으로는 알고 있지만 잘 지켜지지 않는다.

항상 타협하게 된다. 책과 현실은 다르다고! 2020년부터는 좀더 우아한 프로그래밍을 하기 위해 ... 글을 작성하면서 정리도 하고, 실천도 해볼려고 한다.


의미있는 변수 사용


변수, 메소드 이름이 길더라도 명확하게 의도가 추측될 수 있도록 명명하는 것이 중요하다! 당연하고, 간단한 내용이지만 실제 개발을 할 때, 대부분의 

개발자들이 네이밍에 많은 시간을 투자하고 어려워한다. 이름은 굉장히 중요하다! 아래의 예를 보면, 첫번째 코딩도 의도를 충분히 추측할 수 있지만, 

객체에 메세지를 전달하는 두번째 방식이 가독성, 메소드를 이용한 재사용성, 충분한 의미전달 면에서 더 좋은 코드라 할 수 있다.

  
if(exhibition.getStatus().equals(CLOSED) {
     System.oput.println("종료된 기획전 입니다.")
}
  
if(exhibition.isClosed()) {
     System.oput.println("종료된 기획전 입니다.")
}


지금부터 각각의 상황에 의미있는 이름을 짓는 간단한 TIP을 설명해보겠다.


잘못된 정보를 피하라

개발을 하다 보면 List, Set, Map 등 다양한 컬렉션을 사용하거나 객체의 그룹을 표현하는 경우가 많다. 

 예) LIst<Exhibition> exhibitionList (X) → exhibitions, exhibitionGroup, bunchOfExhibitions (O)

컬렉션의 구현체만 봐도, List라는 것을 알 수 있기 때문에 변수명에 List를 붙일 필요가 없다. 그리고 만약에 Set<Exhibition> 으로 자료구조가 바뀐다고 하면, 

변수명도 변경을 해야하는 불편함이 있을 것이다. 


읽을 수 있는 이름을 사용해라 & 변수의 길이는 변수의 Scope에 맞추어라

String tmpltNm 이라는 변수가 있다면 무엇을 의도하는지 바로 추측이 되는가? 처음 코드를 접하는 사람이라면 쉽게 추측이 되지 않을 것이다.

 예) tmpltNm (X) → templateName (O)

그런데 변수명이 너무 길지 않나? 라는 생각이 들 수 있다. 변수명을 의도가 들어나게 작성하다보면 장엄하게 너무 길어지는 경향이 있다.

그렇다면 변수명의 길이는 어느정도가 가장 적당할까? Scope에 맞추라고 하는데 ... Scope가 무엇일까?

Scope는 말 그대로 범위이다. 해당 변수가 코드에서 얼만큼 차지하느냐?! 예를들어 반복문에서 int i, j 와 같은 경우 반복문에서만 단순히 사용되기 때문에

해당 이름만으로도 충분하다. 하지만, 변수가 해당 메소드 전역에서 계속 사용된다면 길이보다는 충분히 의도가 전달되면 좋을 것이다.

intellij가 충분히 훌륭하기 때문에 변수명이 길어도 많이 타이핑하지 않을 것이다.


클래스 이름

클래스의 이름은 동사가 아니라, 명사 또는 명사구로 작성해야 한다. 동사는 메소드 네이밍할 때 양보하자!

그리고 클래스의 이름에는 xxxManager, xxxProcessor, xxxData, xxxInfo와 같은 형태는 피하는 것이 좋다.

클래스의 이름도 의도를 나타내야하는데, 데이터나 정보를 가지고 있는 않는 클래스가 존재할까? 특정 기능을 처리하지 않는 클래스가 존재할까?

클래스가 하는 당연한 역할일 수 있기 때문에 다음과 이름을 짓는 것은 좋지 않을거 같다.


메소드의 이름

메소드의 이름은 동사, 동사구로 작성해야 한다. 그리고 static factory method를 작성할 때는 해당 메소드의 파라미터를 설명하는 것을 권장한다.

예를들어, 기획전 번호를 이용해서 기획전 객체를 생성하는 메소드가 있다면 아래와 같이 작성할 수 있다. 

첫번째 코드도 기획전을 생성한다는 의미는 충분히 받을 수 있지만, 해당 파라미터가 무엇을 의미하는지는 쉽게 파악할 수 없을 것이다.

두번째 코드를 보면 기획전번호로부터 기획전을 생성한다는 의도를 충분히 파악할 수 있을 것이다.


  
     Exhibition exhibition = Exhibition.createExhibition(23233L);
     Exhibition exhibition = Exhibition.fromExhibitionNo(23233L)


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함