1. 객체
코틀린은 하이브리드 객체-함수형 언어로 객체 지향과 함수형 프로그래밍의 프러다임을 모두 지원합니다.
객체는 데이터를 저장하는 val, var를 포함하며(프로퍼티), 클래스 내부에 정의된 함수를 통해 연산을 수행하는데 클래스 내부에 정의된 함수를 멤버 함수라고 합니다. 클래스는 프로퍼티와 멤버 함수를 정의하기 위한 요소입니다. 클래스에 속하는 val이나 var을 만든 것을 객체 생성, 인스턴스 생성이라고 합니다.
2. 클래스를 만드는 방법
클래스의 정의는 class키워드, 클래스 이름, 본문(프로퍼티 정의나 함수정의)이 들어가며 기본적으로 public 접근 제한자를 갖습니다.
class Animal {
val name = "동물"
fun move(): String {
return "이동하기"
}
}
class Member {
val name: String = ""
val age: Int = 0;
}
클래스의 본문은 {} 중괄호로 감싸며, 프로퍼티와 메서드를 정의합니다. 이 때 클래스의 본문이 비어있으면 중괄호를 생략할 수 있습니다.
class Animal
클래스의 인스턴스를 생성하려면 자바에서 new키워드를 사용하는 것과 달리 코틀린에서는 클래스 이름 뒤에 괄호를 넣고 필요한 인자를 추가해주면 됩니다.
fun main() {
val animal = Animal() //인스턴스 생성
val animalMove = animal.move() //함수 호출
println(animalMove) // 이동하기 출력
val Member = Human() //인스턴스 생성
}
3. 생성자
코틀린은 주 생성자와 보조 생성자를 지원하는데 이를 통해 초기화 로직을 다양하게 구성할 수 있습니다.
3-1 주 생성자
주 생성자는 클래스의 헤더에 정의되며 constructor키워드(생략 가능)를 통해 정의할 수 있으며 기본적인 프로퍼티 초기화에 사용됩니다.
파라미터가 없는 경우를 제외하고는 반드시 존재해야하며 파라미터가 하나도 없는 경우, 주 생성자 정의를 생략해도 되며 기본적으로 No-Args Constructor이 생성됩니다.
class Member constructor(name: String, age: Int) {
val name = name
val age = age
}
//constructor 생략 가능
class Member(name: String, age: Int) {
val name = name
val age = age
}
현재 Member 클래스에서는 name과 age 프로퍼티가 정의되어 있는데 코틀린에서는 생성자 파라미터와 프로퍼티를 통합하여 선언할 수 있습니다.
class Member (val name: String, val age: Int)
또한 코틀린에서는 getter와 setter를 기본적으로 제공합니다.
fun main() {
val member = Member("민준", 29)
println(member.name) // 민준 출력
member.name = "만만준" // 에러 발생 name프로퍼티가 val로 선언되어 있기 때문에 재할당 불가
}
class Member (var name: String, val age: Int)
fun main() {
val member = Member("민준", 29)
println(member.name) // 민준 출력
member.name = "만만준"
println(member.name) //만만준 출력
}
3-2 init블록
init 블록은 주 생성자 호출 후 실행되며 초기화 과정에서 필요한 로직을 추가할 수 있습니다.
class Member (var name: String, val age: Int) {
init {
println("$name 님의 나이는 $age 입니다") //Member 인스턴스 생성시 해당 로직이 실행된다.
}
}
3-3 보조 생성자
보조 생성자는 constructor 키워드를 사용하여 보조 생성자를 정의합니다. 주로 추가적인 초기화 로직이나 다양한 초기화 방법을 제공하기 위해 사용됩니다.
class Member (var name: String, val age: Int) {
init {
println("$name 님의 나이는 $age 입니다")
}
constructor(email: String) : this(email, 20)
}
이 때 보조 생성자는 반드시 주 생성자 또는 다른 보조 생성자를 호출해야 합니다.
fun main() {
val member = Member("민준")
println(member.age)
val member2 = Member("민준", 25)
println(member2.age)
}
민준 님의 나이는 20 입니다
20
민준 님의 나이는 25 입니다
25
위의 예시처럼, 보조 생성자를 사용하면 객체를 생성할 때 다양한 방식으로 초기화할 수 있습니다. 주 생성자에서 제공할 수 없는 추가적인 로직이나 선택적인 값들을 보조 생성자에서 처리할 수 있습니다.
4. 총정리
1. 객체
- 객체는 데이터를 저장하는 val, var와 연산을 수행하는 멤버 함수로 구성됨
- 클래스는 프로퍼티와 멤버 함수를 정의하기 위한 기본 단위
- 인스턴스 생성은 클래스 이름 뒤에 괄호를 붙여 생성
2. 클래스 정의
- 클래스는 class 키워드를 사용하여 정의하며, 기본적으로 public 접근 제한자를 가짐
- 클래스 내부에는 프로퍼티와 멤버 함수가 정의되며, 본문이 비어 있을 경우 {}를 생략 가능
3. 생성자
주 생성자(Primary Constructor): 클래스 선언 시 정의되며, 주로 프로퍼티를 초기화하는 데 사용
- 주 생성자는 파라미터를 정의하고, 이 파라미터를 클래스의 프로퍼티에 연결하여 객체 초기화 작업을 진행
- 파라미터가 없는 경우 No-Args Constructor가 제공
- 보조 생성자(Secondary Constructor): constructor 키워드를 사용하여 정의되며, 주 생성자 외에 다양한 초기화 방법을 제공할 수 있다.
'Kotlin 정리' 카테고리의 다른 글
[Kotlin 공부 6일차] 오버로딩, when (0) | 2024.12.06 |
---|---|
[Kotlin 공부 5일차] 확장 함수, 이름 붙은 인자와 디폴트 인자 (0) | 2024.12.04 |
[Kotlin 공부 3일차] 루프와 범위 (0) | 2024.11.29 |
[Kotlin 공부 2일차] 코틀린에서 함수와 조건문(if), 문자열 템플릿 다루기 (0) | 2024.11.28 |
[Kotlin 공부 1일차] var val, 데이터 타입 (0) | 2024.11.27 |