코틀린 클래스

코틀린 클래스 완벽 정리

코틀린에서 클래스는 객체지향 프로그래밍의 핵심 단위로,
속성과 동작(함수)을 하나로 묶어 표현한다.
class 키워드를 사용하며, 상속·캡슐화·생성자 등을 직관적으로 다룰 수 있다.


클래스 기본 구조

class 클래스이름 {
// 속성(Property)
// 메서드(Method)
}

예시

class Person {
var name: String = ""
var age: Int = 0
fun introduce() {
println(“안녕하세요, 제 이름은 $name이고 나이는 $age살입니다.”)
}
}

사용 예시

val person = Person()
person.name = "재은"
person.age = 25
person.introduce()

기본 생성자 (Primary Constructor)

기본 생성자는 클래스 선언부에 정의할 수 있다.

class Person(val name: String, var age: Int)

사용 예시

val person = Person("재은", 25)
println(person.name)
println(person.age)

보조 생성자 (Secondary Constructor)

constructor 키워드를 사용해 추가 생성자를 정의할 수 있다.

class User {
var name: String
var age: Int
constructor(name: String, age: Int) {
this.name = name
this.age = age
}
}

여러 생성자 혼합 예시

class User(val name: String) {
var age: Int = 0
constructor(name: String, age: Int) : this(name) {
this.age = age
}
}

init 블록

기본 생성자가 호출될 때 실행되는 초기화 블록이다.

class Person(val name: String, val age: Int) {
init {
println("초기화: 이름=$name, 나이=$age")
}
}

프로퍼티(Property)

클래스의 속성은 var(변경 가능) 또는 val(불변)로 선언한다.

class Car {
var model: String = "미정"
val wheels: Int = 4
}

게터와 세터 (Getter / Setter)

코틀린은 자동으로 게터와 세터를 생성하지만, 직접 정의할 수도 있다.

class User {
var name: String = "Unknown"
get() = field.uppercase()
set(value) {
field = value.trim()
}
}

상속 (Inheritance)

: 뒤에 상속받을 클래스를 지정한다.
코틀린의 클래스는 기본적으로 final이므로, 상속을 허용하려면 open 키워드를 붙여야 한다.

open class Animal {
open fun sound() {
println("동물 소리")
}
}
class Dog : Animal() {
override fun sound() {
println(“멍멍!”)
}
}

추상 클래스 (Abstract Class)

추상 클래스는 인스턴스화할 수 없으며, 상속을 통해 기능을 구현한다.

abstract class Shape {
abstract fun draw()
}
class Circle : Shape() {
override fun draw() {
println(“원을 그립니다.”)
}
}

인터페이스 (Interface)

인터페이스는 클래스가 반드시 구현해야 하는 규칙을 정의한다.

interface Drivable {
fun drive()
}
class Car : Drivable {
override fun drive() {
println(“차를 운전합니다.”)
}
}

데이터 클래스 (Data Class)

데이터 저장 목적의 클래스로, 자동으로 toString(), equals(), copy() 등을 생성한다.

data class User(val name: String, val age: Int)

사용 예시

val user1 = User("재은", 25)
val user2 = user1.copy(age = 26)
println(user1)
println(user2)

싱글톤 (object 키워드)

object 키워드를 사용하면 단 하나의 인스턴스만 가지는 객체를 만들 수 있다.

object Database {
fun connect() {
println("데이터베이스 연결됨")
}
}

사용 예시

Database.connect()

내부 클래스 (Inner Class)와 중첩 클래스 (Nested Class)

  • Nested Class: 외부 클래스와 독립적으로 존재

  • Inner Class: 외부 클래스의 멤버에 접근 가능 (inner 키워드 필요)

class Outer {
private val name = "Outer"
class Nested {
fun show() = “Nested 클래스”
}inner class Inner {
fun show() = “Inner 클래스: $name 접근 가능”
}
}


클래스 요약 비교표

종류 키워드 특징
일반 클래스 class 기본적인 객체 구조
추상 클래스 abstract class 구현 강제, 인스턴스화 불가
데이터 클래스 data class 값 중심 클래스
싱글톤 object 하나의 인스턴스만 존재
인터페이스 interface 다중 구현 가능
내부 클래스 inner class 외부 클래스 접근 가능


게시됨

카테고리

작성자

태그:

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다