본문 바로가기

Kotlin

Kotlin 스타일 가이드 - 2

형식지정

1. 중괄호

1.1. 비어 있지 않은 블록

  • ' { ' 는 같은 줄에 위치하며, ' } ' 는 새 줄에 작성
  • 항상 중괄호 {}를 사용하는 것이 권장

 - 올바른 예시

if (condition) {
    doSomething()
} else {
    doAnotherThing()
}

 - 잘못된 예시

if (condition)
    doSomething()  // WRONG! 중괄호 필요

 

1.2. 빈 블록

  • 빈 블록 {}은 줄바꿈하여 작성
  • 한 줄 {} 사용 금지

 - 올바른 예시

try {
    doSomething()
} catch (e: Exception) {
}  // Okay

 - 잘못된 예시

try {
    doSomething()
} catch (e: Exception) {}  // WRONG!

 

2. 표현식

  • 표현식이 하나만 있을 경우 =를 사용하여 단순화 가능

 - 올바른 예시

fun add(a: Int, b: Int): Int = a + b

 - 잘못된 예시

fun add(a: Int, b: Int): Int {
    return a + b  // 중괄호 없이 가능
}

3. 들여쓰기

  • 4칸 공백 사용
  • 블록이 열릴 떄마다 들여쓰기 증가

 - 올바른 예시

if (condition) {
    for (i in 0..5) {
        println(i)
    }
}

 

4. 한 줄에 한 구문

  • 세미콜론(;) 사용 금지
  • 각 구문을 개별 줄로 작성

 - 올바른 예시

val x = 5
val y = 10


 - 잘못된 예시

val x = 5; val y = 10  // WRONG!

5. 줄바꿈

  • 한 줄 최대 100자 제한
  • 100자를 초과하면 적절한 위치에서 줄바꿈

6. 줄바꿈 위치

  • 연산자(+, -, *, /, %, =) : 연산자 뒤에서 줄바꿈
  • .(?., ::) : 점 뒤에서 줄바꿈
  • , : 쉼표 뒤에서 줄바꿈
  • 람다 화살표 (->) : 화살표 앞에서 줄바꿈

 - 올바른 예시

val result = listOf(1, 2, 3)
    .map { it * 2 }
    .filter { it > 2 }

7. 함수

7.1. 함수 선언

  • 한 줄에 들어가지 않으면 매개변수를 각 줄에 정렬

 - 올바른 예시

fun <T> Iterable<T>.joinToString(
    separator: CharSequence = ", ",
    prefix: CharSequence = "",
    postfix: CharSequence = ""
): String {
    // …
}

7.2. 표현식 함수

  • 단일 표현식의 경우 = 사용 

 - 올바른 예시

fun double(x: Int) = x * 2

8. 속성

  • 한 줄에 들어가지 않으면 = 뒤에서 줄바꿈

 - 올바른 예시

private val defaultCharset: Charset? =
    EncodingRegistry.getInstance().getDefaultCharsetForPropertiesFiles(file)

 

 

9. 공백

9.1. 수직 공백

  • 관련 없는 코드 사이에는 한 줄의 공백 유지
  • 함수와 함수 사이에는 한 줄 공백 추가

 - 올바른 예시

fun firstFunction() {
    // ...
}

fun secondFunction() {
    // ...
}

 

9.2. 수평 공백

  • 연산자와 예약어 뒤에는 공백 추가

 - 올바른 예시

val sum = a + b  // Okay

 - 잘못된 예시

val sum = a+b  // WRONG!

10. 특정 구성

10.1 Enum 클래스

  • 한 줄로 가능하면 한 줄 사용
  • 각 상수를 별도 줄에 작성할 경우 빈 줄 없이 작성

 - 올바른 예시

enum class Answer { YES, NO, MAYBE }
enum class Answer {
    YES,
    NO,

    MAYBE {
        override fun toString() = """¯\_(ツ)_/¯"""
    }
}

 

10.2 주석

  • 코드와 주석 사이에 공백 추가

 - 올바른 예시

// This is a comment
val value = 42

10.3. 암시적 반환/속성 유형

  • 명확한 타입을 작성하는 것이 가독성에 유리
  • 한 줄 함수는 타입 생략 가능

 - 올바른 예시

val name = "Kotlin"  // Okay
fun square(x: Int) = x * x  // Okay

 - 생략 안할경우

fun square(x: Int): Int = x * x  // 타입 생략 가능

11. 이름 지정

11.1. 패키지 이름

  • 소문자, 언더스코어 없이 작성
package com.example.myapp

11.2 유형 이름

  • 대문자로 시작하는 카멜케이스 (PascalCase)
class MyClass
interface MyInterface

11.3. 함수 이름

  • 소문자로 시작하는 카멜케이스 (camelCase)
fun doSomething() { /* ... */ }

11.4.  상수 이름

  • 대문자 + 언드스코어 (UPPER_SNAKE_CASE)
const val MAX_SIZE = 100

11.5.  상수가 아닌 이름

  • 소문자로 시작하는 카멜케이스 (camelCase)
val userCount = 10

11.6.  지원 속성

  • _로 시작하는 네이밍 사용
private var _table: Map<String, Int>? = null
val table: Map<String, Int>
    get() = _table ?: emptyMap()

11.7.  유형 변수 이름

  • 단일 대문자, 필요에 따라 단일 숫자가 뒤에 온다. (T, E, X, T2)
  • 클래스에 사용된 형식으로 된 이름, 대문자 T가 뒤에 온다.(RequestT, FooBarT)
class Box<T>(val item: T)

 

 

 

공식 문서 : https://developer.android.com/kotlin/style-guide?hl=ko#formatting

'Kotlin' 카테고리의 다른 글

Kotlin 스타일 가이드 - 1  (0) 2025.02.07
Kotlin 변수 데이터 유형  (0) 2025.02.06