코틀린(Kotlin)

Seoyeon·2025년 9월 1일
0

1. 기본 개념

  • JetBrains에서 개발한 오픈소스 언어, 현재는 안드로이드 공식 언어
  • JVM 기반 → 자바와 완벽 호환 (JVM, JS, Native, Android 어디서든 실행 가능)
  • 정적 타입 언어 (컴파일 시 타입 결정) + 타입 추론 지원
  • OOP + FP(객체지향 + 함수형) 모두 지원
  • 문법 간결 → 세미콜론 ; 필요 없음
  • 모든 것이 객체 (기본 타입도 클래스)

2. 기본 타입

  • Numbers: Byte, Short, Int, Long, Float, Double (언더스코어 _ 가능)
  • Char: Char (자바처럼 숫자 저장 불가)
  • Boolean: Boolean
  • Array: Array<Type>
  • String: 문자열 (템플릿: "Hello $name")

특징

  • 작은 타입이 큰 타입의 하위 타입 아님 → 명시적 변환 필요

    val x: Int = 5
    val y: Long = x.toLong()

3. 변수와 상수

  • var: 변경 가능 변수

  • val: 변경 불가 (자바 final)

  • null 허용: 타입 뒤에 ? 붙임 → String?

  • 초기화 지연

    • lateinit var : 나중에 초기화 (기본타입 불가, null 초기화 불가)
    • val ... by lazy { } : 처음 사용 시 초기화
var age: Int = 10
val name: String = "Kotlin"
lateinit var title: String
val number: Int by lazy { 42 }
  • 엘비스 연산자 ?: → null이면 기본값 반환

    val str: String? = null
    val result = str ?: "기본값"

4. 제어문

  • if → 표현식으로 값 반환 가능
  • when → 자바 switch 대체, break 필요 없음
  • for → 범위/컬렉션 순회
  • break/continue + label 가능
val score = 85
val grade = when(score) {
    in 90..100 -> "A"
    in 80..89 -> "B"
    else -> "F"
}

5. 함수

  • 기본 문법

    fun add(a: Int, b: Int): Int = a + b
  • 반환타입 Unit (void) 생략 가능

  • 디폴트 파라미터, 이름 지정 인자 가능

  • infix 함수 → 중위 호출

    infix fun Int.times(str: String) = str.repeat(this)
    println(2 times "Hi") // HiHi
  • 재귀함수 / 꼬리재귀 (tailrec) 지원

  • 람다: 익명 함수

    val sum = { x: Int, y: Int -> x + y }
    println(sum(3, 4))
  • 고차함수: 함수가 함수 인자/리턴 가능


6. 클래스와 객체

  • 클래스 선언

    class Person(val name: String, var age: Int)
    val p = Person("Kim", 20)
  • 상속: open 필요

    open class Animal
    class Dog: Animal()
  • 생성자

    • 주(primary): 헤더에 정의
    • 부(secondary): 반드시 주 생성자 호출
  • 중첩 클래스: static 성격

  • inner 클래스: 바깥 클래스 참조 가능 (this@Outer)


7. 특별한 클래스

  • Data classtoString(), equals(), copy() 자동

    data class User(val id: Int, val name: String)
  • Enum class → 열거형

  • Sealed class → 상속 제한, when 사용 시 else 불필요

  • Object class → 싱글톤

  • companion object → 자바 static 대체


8. 접근 제한자

  • public: 기본, 전체 공개
  • private: 파일/클래스 내부
  • protected: 상속 관계에서만 접근
  • internal: 같은 모듈 안에서만

9. 컬렉션

  • List: 순서 + 중복 가능

    val list = listOf(1,2,3) // 읽기전용
    val mlist = mutableListOf(1,2,3) // 수정 가능
  • Set: 중복 불가

  • Map: key-value 구조


10. Android + Jetpack Compose

  • Compose: 안드로이드 최신 UI 툴킷 (선언형)

  • @Composable 함수 → UI의 기본 빌딩 블록

    @Composable
    fun Greeting(name: String) {
        Text(text = "Hello $name")
    }
  • Compose 함수 이름 → 보통 명사형 (DoneButton())

  • 상태(State) → 값이 바뀌면 UI 자동 리컴포지션

  • 상태 호이스팅 → 재사용성을 위해 상태를 바깥으로 분리

  • UI 기본 컴포저블: Text, Button, TextField, Spacer


11. 테스트

  • 로컬 테스트: JVM에서 실행, 빠르고 리소스 적음
  • 계측(Instrumentation) 테스트: 실제 기기/에뮬레이터에서 실행, UI 테스트

0개의 댓글