본문 바로가기

Kotlin

Kotlin 스타일 가이드 - 1

소스 파일

모든 소스 파일은 UTF-8로 인코딩되어야 한다.

이름지정

1. 소스 파일에 최상위 클래스가 하나만 있는 경우

파일 이름은 해당 클래스의 이름과 동일해야 하며, 대소문자를 구분하여 .kt 확장자를 붙여야 한다.

// Person.kt 파일
class Person(val name: String, val age: Int)

Person.kt라는 파일 이름이 클래스 Person과 동일하게 설정됨

// ChatManager.kt 파일
class ChatManager {
    fun sendMessage(message: String) {
        println("Sending: $message")
    }
}

ChatManager.kt라는 파일 이름이 클래스 ChatManager와 동일하게 설정됨

 

2. 소스 파일에 최상위 수준 선언이 여러개 포함된 경우

파일의 내용을 설명하는 이름을 선택하고, PascalCase를 적용하여 .kt 확장자를 추가해야 한다.

만약 파일 이름이 복수형이면 camelCase도 허용된다.

// Utils.kt 파일 (파일 내 여러 개의 최상위 수준 함수가 존재)
fun printHello() {
    println("Hello")
}

fun getCurrentTime(): String {
    return "2025-02-07 12:00"
}

여러개의 최상위 함수가 포혐되어 잇기 때문에, 파일 이름을 utils.kt처럼 일반적인 기능을 설명하는 이름으로 설정

 

// networkingUtils.kt 파일
fun fetchDataFromServer() { ... }
fun parseJsonResponse() { ... }

파일이 복수형 이름을 가질 경우, networkingUtils.kt처럼 camelCase도 가능

 

정리

 

  • 최상위 클래스가 하나만 있을 경우 → 파일 이름을 클래스 이름과 동일하게 설정 (Person.kt)
  • 여러 개의 최상위 선언이 있을 경우 → PascalCase 사용 (Utils.kt)
  • 파일 이름이 복수형이면 camelCase도 허용됨 (networkingUtils.kt)

 

특수문자

공백 문자

 

1. ASCII 수평 공백 문자(띄어쓰기, 0x20)만 사용해야 한다.

 

  • 줄 끝을 나타내는 줄 마침 문자 시퀀스(예: \n, \r\n)를 제외하고, 코드 전체에서 공백 문자는 스페이스(띄어쓰기) 하나만 사용해야 한다.
  • 즉, 탭(\t)이나 다른 공백 문자는 사용하지 않는다.

- 올바른 예시

val name = "Alice Bob" // 띄어쓰기는 0x20 (ASCII 스페이스) 사용

 

- 잘못된 예시

 

val name = "Alice	Bob" // (X) 탭(\t) 사용 금지

 

2. 문자열과 문자 리터럴에서 다른 공백 문자는 이스케이프 처리된다.

  • 문자열(String)이나 문자(Char)에 들어가는 공백 문자(줄 바꿈, 탭 등)은 반드시 이스케이프 문자로 표현해야 한다.

- 올바른 예시

val text = "Hello\nWorld"  // (O) 줄 바꿈은 \n 사용
val tabbed = "A\tB"        // (O) 탭은 \t 사용

 

- 잘못된 예시

val text = "Hello 
World" // (X) 줄 바꿈을 직접 입력하면 안 됨

val tabbed = "A	B" // (X) 직접 탭 문자 입력 금지

 

3. 탭(\t) 문자는 코드 들여쓰기에 사용하지 않는다

  • Kotlin 코드에서 탭 문자(\t)를 사용하여 들여쓰기를 하면 안된다. 대신 스페이스(띄어쓰기)로 들여쓰기해야 한다..

- 올바른 예시

fun hello() {
    println("Hello") // (O) 스페이스 4개로 들여쓰기
}

 

- 잘못된 예시

fun hello() {
	println("Hello") // (X) 탭(\t)으로 들여쓰기 금지
}

 

※ 이스케이프 처리란? 특정 문자가 HTML 코드나 다른 마크업 언어로 해석되지 않도록 변환하는 과정

 

특수 이스케이프 문자 시퀀스

특수 문자(백스페이스, 줄 바꿈, 탭 등)는 이 시퀀스가 상응하는 유니코드(예: \u000a) 이스케이프 문자 대신 표준 이스케이프 시퀀스(예: \n)가 사용된다.

 

비 ASCII 문자

  • 한글, 특수 기호(∞, ☺) 같은 비 ASCII 문자를 사용할 때는 실제 문자 그대로 사용하거나 유니코드 이스케이프를 사용할 수 있다.
  • 코드를 쉽게 읽을 수 있도록 선택해야 한다.
  • 인쇄 가능한 문자에는 사용하지 않는 것이 좋다.
  • 문자열 리터럴 및 주석 외부에는 절대 사용하지 않아야 한다.
val symbol = "∞" // (O) 실제 문자 사용
val korean = "안녕하세요" // (O) 한글 직접 사용
val symbol = "\u221e" // (X) 유니코드 이스케이프 사용 금지
val korean = "\uc548\ub155\ud558\uc138\uc694" // (X) 유니코드 이스케이프 사용 금지

정리

 

  1. 공백 문자
    • ASCII 스페이스(0x20)만 사용해야 하며, 탭(\t)은 사용하지 않는다.
  2. 문자열과 문자 리터럴
    • 공백 문자(줄 바꿈, 탭 등)는 이스케이프 문자를 사용해야 한다. (예: \n, \t, \r)
  3. 특수 문자
    • 유니코드 이스케이프(\u000a 등) 대신 일반 이스케이프(\n, \t 등)를 사용해야 한다.
  4. 비 ASCII 문자
    • 읽기 쉬운 코드 작성을 위해 직접 입력하는 것이 좋다.
    • 문자열과 주석을 제외하고 유니코드 이스케이프 사용 금지 (\u221e 대신 ∞ 사용)

 

 

구조

.kt 파일은 다음과 같은 순서로 구성된다.

  • 저작권 및/또는 라이센스 헤더(선택사항)
  • 파일 수준 주석
  • Package 문
  • Import 문
  • 최상위 수준 선언

빈 줄 하나만 사용하여 각 섹션을 구분한다.

 

저작권/라이선스

  • 파일에 저작권 또는 라이선스 헤더가 포함된 경우 맨 위에 여러 줄로 주석을 넣어야 한다.
  • KDoc 스타일 또는 한 줄 주석을 사용 금지

- 올바른 예시

/*
 * Copyright 2024 MyCompany, Inc.
 * Licensed under the Apache License, Version 2.0
 */

 

- 잘못된 예시

/**
 * (X) KDoc 스타일 사용 금지
 * Copyright 2024 MyCompany, Inc.
 */

 // (X) 한 줄 주석 사용 금지
 // Copyright 2024 MyCompany, Inc.


파일 수준 주석

파일 전체에 영향을 주는 어노테이션이나 주석이 있으면, 패키지 선언(package) 앞에 배치한다.

/*
 * Copyright 2024 MyCompany, Inc.
 */

@file:JvmName("MyCustomFileName") // 파일 수준 주석

package com.example.app

 

Packgae 문

  • package 문은 열 제한을 받지 않으며 줄바꿈되지 않습니다.
package com.example.myapp.utils

 

Import 문

  • 클래스, 함수 및 속성의 import 문은 단일 목록으로 그룹화되고 알파벳 순(ASCII 정렬)으로 정렬 된다.
  • 모든 유형의 와일드 카드(import com.example.*) 가져오기는 허용되지 않습니다.
  • package 문과 마찬가지로 import 문은 열 제한을 받지 않으며 줄바꿈되지 않습니다.

- 올바른 예시

import android.content.Context
import android.widget.TextView

- 잘못된 예시

import android.widget.*  // (X) 와일드카드 사용 금지

최상위 수준 선언

.kt 파일에는 최상위 수준에서 클래스, 함수, 속성 등을 선언할 수 있다.

  • 파일의 내용은 하나의 주제에 집중해야 한다.
  • 관련 없는 요소들은 다른 파일로 분리해야 한다.

클래스 멤버 정렬

클래스 내 멤버(속성, 함수 등)도 최상위 선언과 같은 규칙을 따른다.

  • 일반적으로 읽는 순서대로 정리 (위에서 아래로 흐름을 이해할 수 있도록)
  • 같은 목적을 가진 멤버끼리 묶어야 한다.

 


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

 

'Kotlin' 카테고리의 다른 글

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