클래스 정의 - swkim0128/PARA GitHub Wiki
코틀린의 클래스는 객체 지향 프로그래밍(OOP)의 기본 단위로, 속성(properties)과 동작(methods)을 포함합니다. 코틀린의 클래스는 간결하고 효율적으로 정의할 수 있습니다.
class 클래스이름 {
// 속성과 메서드 정의
}
class Person {
var name: String = ""
var age: Int = 0
fun introduce() {
println("안녕하세요! 제 이름은 $name이고, 나이는 $age살입니다.")
}
}
- new 키워드는 사용하지 않고, **클래스이름()**으로 객체를 생성합니다.
fun main() {
val person = Person()
person.name = "John"
person.age = 30
person.introduce() // 출력: 안녕하세요! 제 이름은 John이고, 나이는 30살입니다.
}
- 클래스 이름 옆에 괄호를 사용하여 기본 생성자를 정의합니다.
문법
class 클래스이름(val 속성1: 타입, var 속성2: 타입) {
// 클래스 본문
}
예제
class Person(val name: String, var age: Int)
fun main() {
val person = Person("Alice", 25)
println("이름: ${person.name}, 나이: ${person.age}")
}
- constructor 키워드를 사용하여 보조 생성자를 정의합니다.
- 보조 생성자는 주 생성자를 호출해야 합니다.
문법
class 클래스이름(val 속성1: 타입, var 속성2: 타입) {
constructor(매개변수: 타입) : this(기본값1, 기본값2) {
// 보조 생성자 본문
}
}
예제
class Person(val name: String, var age: Int) {
constructor(name: String) : this(name, 0) {
println("보조 생성자가 호출되었습니다.")
}
}
fun main() {
val person = Person("Bob")
println("이름: ${person.name}, 나이: ${person.age}")
}
- var: 변경 가능한 속성
- val: 읽기 전용 속성
class Person {
var name: String = "Unknown" // 변경 가능
val birthYear: Int = 2000 // 읽기 전용
}
- 메서드는 클래스 내부에 정의된 함수입니다.
class Calculator {
fun add(a: Int, b: Int): Int {
return a + b
}
}
fun main() {
val calc = Calculator()
println(calc.add(5, 3)) // 출력: 8
}
- 클래스 초기화 시 실행되는 블록입니다.
- 기본 생성자의 매개변수로 초기화 작업을 수행할 수 있습니다.
예제
class Person(val name: String, val age: Int) {
init {
println("초기화 블록 실행: 이름은 $name, 나이는 $age")
}
}
fun main() {
val person = Person("Alice", 25)
}
출력:
초기화 블록 실행: 이름은 Alice, 나이는 25
- 코틀린의 클래스와 속성은 다음과 같은 접근 제한자를 가집니다:
- public(기본값): 모든 곳에서 접근 가능.
- private: 클래스 내부에서만 접근 가능.
- protected: 클래스와 하위 클래스에서 접근 가능.
- internal: 같은 모듈 내에서만 접근 가능.
예제
class Person {
private var secret: String = "비밀" // 클래스 내부에서만 접근 가능
var name: String = "Unknown" // 공개 접근
}
fun main() {
val person = Person()
person.name = "John"
// person.secret = "새 비밀" // 오류: private 속성은 접근 불가
}
- 데이터를 저장하기 위해 설계된 클래스로, 코틀린은 equals, hashCode, toString 메서드를 자동으로 생성합니다.
- data 키워드를 사용하여 정의합니다.
예제
data class User(val name: String, val age: Int)
fun main() {
val user1 = User("Alice", 25)
val user2 = User("Alice", 25)
println(user1) // 출력: User(name=Alice, age=25)
println(user1 == user2) // 출력: true (내용 비교)
}
- 코틀린의 클래스는 기본적으로 final이며, 상속하려면 open 키워드를 사용해야 합니다.
- 상속 시에는 :를 사용합니다.
예제
open class Animal(val name: String) {
open fun sound() {
println("동물이 소리를 냅니다.")
}
}
class Dog(name: String) : Animal(name) {
override fun sound() {
println("멍멍!")
}
}
fun main() {
val dog = Dog("Buddy")
dog.sound() // 출력: 멍멍!
}
기능 | 설명 |
---|---|
클래스 정의 | class 키워드 사용 |
생성자 | 기본 생성자와 보조 생성자 지원 |
초기화 블록 | init 블록에서 초기화 작업 수행 |
접근 제한자 | public, private, protected, internal |
데이터 클래스 | data 키워드로 간결한 데이터 클래스 생성 |
상속 | open 키워드로 상속 가능 |
코틀린의 클래스는 자바보다 간결하며, 데이터 클래스, 초기화 블록, 기본 생성자 등을 통해 코드의 효율성과 가독성을 크게 높여줍니다.