코틀린: 클래스와 생성자
1. 클래스의 이해
클래스는 객체 지향 프로그래밍에서 기본적인 구성 요소로, 객체를 생성하는 틀(template)입니다. 코틀린은 클래스 지향 프로그래밍 언어로, 클래스를 사용하여 객체를 정의하고 이를 통해 코드의 구성 요소를 재사용할 수 있습니다. 클래스는 필드(변수)와 메서드(함수)로 구성되며, 각각의 객체는 클래스의 인스턴스(instance)로 생성됩니다.
2. 클래스의 기본 구조
코틀린에서 클래스를 정의하는 문법은 매우 간단합니다. 기본적인 클래스 정의 방법은 다음과 같습니다:
class ClassName {
// 속성
var property1: String = "기본값"
var property2: Int = 0
// 메서드
fun method1() {
println("메서드1 호출됨")
}
}
위 코드에서 ClassName은 클래스의 이름이며, property1과 property2는 속성, method1은 메서드입니다.
3. 기본 생성자와 초기화 블록
클래스에는 기본 생성자를 설정할 수 있으며, 이 생성자는 클래스의 속성을 초기화하는 데 사용됩니다. 기본 생성자를 사용하면 객체가 생성될 때 속성을 쉽게 설정할 수 있습니다. 아래 예제를 통해 기본 생성자를 살펴보겠습니다.
class Person(val name: String, var age: Int) {
init {
println("Person 객체가 생성되었습니다: 이름 = $name, 나이 = $age")
}
}
위의 코드에서 Person 클래스는 name과 age라는 두 개의 속성을 가지며, init 블록 내에서 객체가 생성될 때마다 메시지를 출력합니다.
4. 사용자 정의 생성자
클래스에 사용자 정의 생성자를 추가하여 객체 생성 시 더 다양한 인자를 받을 수 있습니다. 예를 들어, 다음과 같이 여러 생성자를 정의할 수 있습니다.
class Vehicle(val brand: String) {
var speed: Int = 0
constructor(brand: String, speed: Int) : this(brand) {
this.speed = speed
println("차량이 생성되었습니다: 브랜드 = $brand, 속도 = $speed")
}
}
5. 클래스 상속
코틀린은 클래스 상속을 지원합니다. 기본 클래스를 상속받는 새로운 클래스는 기본 클래스의 모든 속성과 메서드를 사용할 수 있습니다. 다음은 상속의 예제입니다.
open class Animal(val name: String) {
open fun sound() {
println("$name is making a sound.")
}
}
class Dog(name: String) : Animal(name) {
override fun sound() {
println("$name says Woof!")
}
}
여기서 Animal클래스는 기본 클래스이며, Dog 클래스는 이를 상속받아 sound 메서드를 오버라이드하고 있습니다.
6. 데이터 클래스
코틀린에는 데이터 클래스를 정의할 수 있는 특별한 구문이 마련되어 있습니다. 데이터 클래스는 주로 데이터를 담고 있는 객체를 만들 때 사용됩니다. 다음은 데이터 클래스의 예입니다.
data class User(val name: String, val age: Int)
7. 컴패니언 객체
코틀린의 클래스는 컴패니언 객체(Companion Object)를 포함할 수 있습니다. 이를 통해 클래스에 속한 정적 메서드나 속성을 정의할 수 있습니다. 다음은 컴패니언 객체의 예입니다.
class Sample {
companion object {
const val CONSTANT = "상수값"
fun staticMethod() {
println("정적 메서드 호출")
}
}
}
8. 코틀린에서의 클래스 활용 예시
자, 이젠 앞서 배운 내용을 바탕으로 안드로이드 애플리케이션에서 클래스를 어떻게 활용할 수 있는지 살펴보겠습니다. 예를 들어, 간단한 유저 정보를 저장하고 표시하는 애플리케이션을 개발해보겠습니다.
class User(val name: String, var age: Int) {
fun displayInfo() {
println("사용자 정보: 이름 = $name, 나이 = $age")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val user = User("홍길동", 30)
user.displayInfo()
}
}
위 예제에서 User 클래스는 이름과 나이를 속성으로 가지며 사용자 정보를 출력하는 메서드를 포함합니다. MainActivity에서는 User 객체를 생성하고 해당 정보를 출력합니다.
9. 클래스와 Kotlin Extension
코틀린에서는 확장 함수를 정의하여 기존 클래스에 새로운 기능을 추가할 수 있습니다. 예를 들어, String 클래스에 확장 함수를 추가해보겠습니다.
fun String.addExclamation(): String {
return this + "!"
}
이렇게 정의된 addExclamation 확장 함수를 String 객체에서 사용할 수 있습니다. 예를 들어:
val greeting = "안녕하세요".addExclamation() // 결과: "안녕하세요!"
10. 결론
이번 글에서는 코틀린의 클래스와 생성자에 대한 기본적인 이해와 활용 방법에 대해 알아보았습니다. 클래스는 객체 지향 프로그래밍의 핵심 개념으로, 다양한 기능을 통해 코드의 재사용성을 높일 수 있습니다. 또한, 기본 생성자 및 사용자 정의 생성자, 데이터 클래스, 컴패니언 객체 등 다양한 클래스의 특성을 활용하여 더 효과적인 안드로이드 애플리케이션을 개발할 수 있습니다.
코틀린을 이용한 안드로이드 개발은 이러한 기초 개념을 바탕으로 다양한 복잡한 애플리케이션을 만드는 재미를 선사합니다. 앞으로의 글에서도 더욱 깊이 있는 주제를 다룰 예정이니 많은 관심 부탁드립니다!