Kotlin 클래스 종류 총정리 🚀

이진영·2025년 6월 12일
post-thumbnail

📺 이 글은 제가 평소 즐겨보는 Kotlin 유튜버
Philipp Lackner 님의 영상
👉 Kotlin Class Types Explained
을 보고 정리한 내용을 바탕으로 작성한 포스트입니다!

🧠 클래스마다 자동으로 생성되는 메서드나 제약 조건이 있다는 사실, 알고 계셨나요?

이 글에서는 영상 속 내용을 기반으로
각 클래스 타입의 특징, 사용 예시, 자동 생성 메서드, 제약사항까지
한 번에 깔끔하게 정리해봤습니다.

Kotlin 클래스 종류 총정리 🚀 (기능 중심 예제 포함)

Kotlin에는 다양한 클래스 및 구조가 존재하며, 각각 특정 목적과 기능을 위해 설계되어 있습니다.
이 글에서는 Kotlin에서 사용 가능한 클래스 및 클래스 유사 구조 15가지를 기능 위주로 묶어 정리하고, 자동 생성 메서드, 제약 조건, 대표적인 사용 예까지 함께 설명합니다 💡


🧱 Regular Class

🧾 설명
가장 기본적인 클래스. 생성자, 메서드, 프로퍼티, 중첩 클래스 등을 자유롭게 가질 수 있음.

💡 예제

class Person(val name: String, var age: Int) {
    fun introduce() {
        println("Hi, I'm $name and I'm $age years old.")
    }
}

📦 Data Class

🧾 설명
데이터 보관용 클래스. 생성자 프로퍼티 기반으로 유용한 메서드 자동 생성.

⚙️ 자동 생성 메서드

  • equals()
  • hashCode()
  • toString()
  • copy()
  • componentN()

⚠️ 제약 사항

  • primary constructorval/var 포함 필수
  • open, sealed, abstract, inner 불가

💡 예제

data class User(val username: String, val email: String)

🧭 Enum Class

🧾 설명
고정된 상수 집합 표현. 각 항목은 인스턴스이며 생성자 및 메서드 포함 가능.

장점

  • 타입 안정성
  • 제한된 값 정의
  • when 문에서 exhaustive 체크 가능

💡 예제

enum class Direction {
    NORTH, SOUTH, EAST, WEST
}

fun move(dir: Direction) {
    when (dir) {
        Direction.NORTH -> println("Go up")
        Direction.SOUTH -> println("Go down")
        Direction.EAST -> println("Go right")
        Direction.WEST -> println("Go left")
    }
}

🛡️ Sealed Class

🧾 설명
제한된 상속 구조. when 문에서 exhaustive 체크 가능.

⚠️ 제약 사항

  • abstract 포함
  • 하위 클래스는 같은 파일 내에서만 정의 가능

💡 예제

sealed class Result
data class Success(val data: String) : Result()
data class Failure(val message: String) : Result()
object Loading : Result()

🔗 Sealed Interface

🧾 설명
sealed class와 유사하지만 다중 구현이 가능.

💡 예제

sealed interface UiEvent
object Click : UiEvent
object Swipe : UiEvent

🧊 Data Object (Kotlin 1.9+)

🧾 설명
objectdata 특성이 결합된 구조. 싱글톤 + 자동 메서드 제공.

⚙️ 자동 생성 메서드

  • toString()
  • equals()
  • hashCode()

💡 예제

sealed class ScreenState
data object Loading : ScreenState
data object Empty : ScreenState

☝️Object

🧾 설명
전역에서 단 하나만 존재하는 싱글톤 객체.

📌 활용 예

  • 유틸 함수 그룹
  • 설정 정보 저장

💡 예제

object AppConfig {
    const val version = "1.0.0"
    fun printVersion() = println(version)
}

🏷️ Annotation Class

🧾 설명
코드에 메타데이터를 부여하는 데 사용. Java와 호환됨.

💡 예제

annotation class Info(val author: String)

@Info("Jiwoo")
class Article

⚡ Value Class

🧾 설명
래핑 없이 값 자체로 동작. 성능 + 타입 안전성 확보.

⚠️ 제약 사항

  • 하나의 프로퍼티만 보유 가능

💡 예제

@JvmInline
value class Email private constructor(val value: String) {
    companion object {
        private val EMAIL_REGEX = "^[\\w.-]+@[\\w.-]+$".toRegex()

        fun create(email: String): Email {
            require(email.matches(EMAIL_REGEX)) { "Invalid email" }
            return Email(email)
        }
    }
}

🧮 Functional Interface

🧾 설명
단 하나의 추상 메서드만 가짐. 람다로 간편하게 구현 가능 (SAM 지원).

💡 예제

fun interface Validator {
    fun validate(input: String): Boolean
}

val notEmpty = Validator { it.isNotEmpty() }

🐾 Abstract Class

🧾 설명
공통 기능 제공 및 구현 강제 목적. 직접 인스턴스화 불가.

💡 예제

abstract class Animal {
    abstract fun speak(): String
}

class Dog : Animal() {
    override fun speak() = "Woof"
}

🧩 Nested Class

🧾 설명
inner 키워드 없이 클래스 내부에 정의된 클래스. 외부 참조 불가.

💡 예제

class Outer {
    class Nested {
        fun message() = "Hello from Nested"
    }
}

🔐 Inner Class

🧾 설명
외부 클래스 인스턴스에 접근 가능 (inner 키워드 필요).

💡 예제

class Outer(val greeting: String) {
    inner class Inner {
        fun sayHello() = "Greeting: $greeting"
    }
}

🚫 Companion Object

⚠️ companion object는 클래스 종류가 아니라 클래스 내부 정적 객체이므로 본 목록에는 포함되지 않습니다.


🌀 Anonymous Object

🧾 설명
이름 없이 즉석에서 인터페이스/추상 클래스 구현.

💡 예제

interface Clickable {
    fun click()
}

val handler = object : Clickable {
    override fun click() = println("Clicked!")
}

📌 클래스 총정리 표

🏷️ 클래스 종류💡 핵심 특징
class가장 기본적인 클래스
data classequals, copy, toString 등 자동 생성
enum class상수 집합 + 타입 안정성
sealed class제한된 상속 구조, when에서 exhaustive 체크
sealed interface다중 구현 가능한 봉인 인터페이스
data object싱글톤 + equals/hashCode/toString 자동 제공
object전역 싱글톤 객체
annotation class메타데이터 정의용 구조
value class (@JvmInline)primitive처럼 동작하는 경량 래퍼
fun interface람다 표현식 가능한 함수형 인터페이스
abstract class인스턴스화 불가, 템플릿 역할
nested class외부 인스턴스 참조 불가한 내부 클래스
inner class외부 클래스 인스턴스 참조 가능
anonymous object이름 없는 일회성 객체 구현
companion object정적 객체 (클래스 자체 아님, 제외됨)

이 글이 Kotlin 클래스 구조를 제대로 이해하고 선택하는 데 도움이 되길 바랍니다 🙌
질문이나 피드백은 댓글로 남겨주세요!

profile
Android Developer

0개의 댓글