관리 메뉴

나만을 위한 블로그

[이펙티브 코틀린] 아이템 18. 코딩 컨벤션을 지켜라 본문

책/Effective Kotlin

[이펙티브 코틀린] 아이템 18. 코딩 컨벤션을 지켜라

참깨빵위에참깨빵_ 2022. 8. 7. 23:49
728x90
반응형

코틀린 문서의 Coding Convensions을 보면 코틀린은 잘 정리된 코딩 컨벤션을 갖고 있다. 이런 컨벤션이 모든 프로젝트에 최적인 것은 아니지만 코틀린 커뮤니티에 속한 사람이라면 이런 컨벤션을 최대한 지키는 게 좋다. 이걸 지켜야

 

  • 어떤 프로젝트를 접해도 쉽게 이해할 수 있다
  • 다른 외부 개발자도 프로젝트의 코드를 쉽게 이해할 수 있다
  • 다른 개발자도 코드 작동 방식을 쉽게 추측할 수 있다
  • 코드를 병합하고 한 프로젝트의 코드 일부를 다른 코드로 이동하는 게 쉽다

 

코틀린 개발자라면 문서에 설명된 컨벤션에 익숙해져야 한다. 컨벤션은 시간이 지나면서 조금씩 변화할 수 있다. 컨벤션을 지킬 때 도움이 되는 2가지 도구가 있다.

 

  • 인텔리제이 포매터 : 공식 코딩 컨벤션 스타일에 맞춰 코드를 바꿔 준다
  • ktlink : 많이 쓰이는 코드를 분석하고 컨벤션 위반을 알려 주는 Linter

 

자바 개발자가 여러 코트린 프로젝트를 살펴보면 코딩 컨벤션을 따로 보지 않고도 어느 정도 쉽게 이해할 수 있을 것이다.

이는 코틀린이 자바의 코딩 컨벤션을 잘 따르고 있으며 많은 코틀린 개발자가 이전에 자바 개발자였기 때문일 수 있다. 자주 위반되는 규칙 중 하나는 클래스, 함수 형식이다.

 

class FullName(val name: String, val surname: String

 

하지만 많은 파라미터를 가진 클래스는 아래처럼 각각의 파라미터를 한 줄씩 작성하는 방법을 사용한다.

 

class Person(
    val id: Int = 0,
    val name: String = "",
    val surname: String = ""
): Human(Id, name) {
    //
}

 

함수도 파라미터를 많이 갖고 있다면 아래처럼 작성한다.

 

public fun <T> Iterable<T>.joinToString(
    separator: CharSequence = ", ",
    prefix: CharSequence = "",
    postfix: CharSequence = "",
    limit: Int = -1,
    truncated: CharSequence = "...",
    transform: ((T) -> CharSequence)? = null
): String {
    //
}

 

아래 코드와 위에서 설명한 코드는 완전히 다르다.

 

// 이렇게 하지 마라
class Person(val id: Int = 0,
            val name: String = "",
            val surname: String = ""
) {
    //
}

 

이 코드는 2가지 측면에서 문제가 될 수 있다.

 

  • 모든 클래스의 아규먼트가 클래스명에 따라서 다른 크기의 들여쓰기를 갖는다. 이런 형태로 작성하면 클래스명을 변경할 때 모든 기본 생성자 파라미터의 들여쓰기를 조정해야 한다
  • 클래스가 차지하는 공간의 너비가 너무 크다. 처음 class 키워드가 있는 줄도 너비가 너무 크고 이름이 가장 긴 마지막 파라미터와 슈퍼 클래스 지정이 함께 있는 줄도 너무 크다

 

많은 개발자가 코딩 컨벤션을 지키지 않는다. 하지만 코딩 컨벤션은 굉장히 중요하다. 가독성 관련 어떤 책을 봐도 코딩 컨벤션과 관련된 내용을 강조한다는 것을 확인할 수 있을 것이다. 코딩 컨벤션을 확실하게 읽고 정적 검사기(static checker)를 써서 프로젝트의 코딩 컨벤션 일관성을 유지하라. 코딩 컨벤션을 준수하면 모두에게 좋다.

반응형
Comments