🏗️ 클래스
📖 클래스란?
**클래스(Class)**는 객체를 만드는 설계도입니다. 데이터(프로퍼티)와 동작(메서드)을 하나로 묶어 관리합니다.
💡 기본 클래스
간단한 클래스
class Person {
var name: String = ""
var age: Int = 0
fun introduce() {
println("안녕하세요, ${name}입니다. ${age}살입니다.")
}
}
fun main() {
val person = Person()
person.name = "홍길동"
person.age = 25
person.introduce()
// 안녕하세요, 홍길동입니다. 25살입니다.
}
생성자
class Person(val name: String, val age: Int) {
fun introduce() {
println("안녕하세요, ${name}입니다. ${age}살입니다.")
}
}
fun main() {
val person = Person("홍길동", 25)
person.introduce()
}
🎯 생성자
주 생성자
// 주 생성자 (Primary Constructor)
class Person(val name: String, val age: Int)
fun main() {
val person = Person("홍길동", 25)
println("이름: ${person.name}")
println("나이: ${person.age}")
}
초기화 블록
class Person(val name: String, val age: Int) {
init {
println("Person 객체 생성: $name, $age")
}
init {
// 여러 개 가능
println("초기화 완료!")
}
}
fun main() {
val person = Person("홍길동", 25)
// Person 객체 생성: 홍길동, 25
// 초기화 완료!
}
보조 생성자
class Person(val name: String, val age: Int) {
var email: String = ""
// 보조 생성자
constructor(name: String, age: Int, email: String) : this(name, age) {
this.email = email
}
}
fun main() {
val person1 = Person("홍길동", 25)
val person2 = Person("김철수", 30, "kim@example.com")
println(person2.email) // kim@example.com
}
기본값
class Person(
val name: String,
val age: Int,
val email: String = "없음" // 기본값
) {
fun info() {
println("이름: $name, 나이: $age, 이메일: $email")
}
}
fun main() {
val person1 = Person("홍길동", 25)
val person2 = Person("김철수", 30, "kim@example.com")
person1.info() // 이메일: 없음
person2.info() // 이메일: kim@example.com
}
🔧 프로퍼티
getter와 setter
class Person(private var _age: Int) {
var age: Int
get() = _age
set(value) {
if (value >= 0) {
_age = value
}
}
}
fun main() {
val person = Person(25)
println(person.age) // 25
person.age = 30
println(person.age) // 30
person.age = -5 // 무시됨
println(person.age) // 30
}
계산 프로퍼티
class Rectangle(val width: Int, val height: Int) {
val area: Int
get() = width * height
val perimeter: Int
get() = 2 * (width + height)
}
fun main() {
val rect = Rectangle(10, 5)
println("면적: ${rect.area}") // 50
println("둘레: ${rect.perimeter}") // 30
}
🎨 메서드
기본 메서드
class Calculator {
fun add(a: Int, b: Int): Int {
return a + b
}
fun subtract(a: Int, b: Int): Int = a - b // 단일 표현식
}
fun main() {
val calc = Calculator()
println(calc.add(10, 5)) // 15
println(calc.subtract(10, 5)) // 5
}
메서드 오버로딩
class Printer {
fun print(text: String) {
println("문자열: $text")
}
fun print(number: Int) {
println("정수: $number")
}
fun print(number: Double) {
println("실수: $number")
}
}
fun main() {
val printer = Printer()
printer.print("Hello") // 문자열: Hello
printer.print(42) // 정수: 42
printer.print(3.14) // 실수: 3.14
}