6.1 클래스와 설계
- 그룹화할 수 있는 함수와 변수를 한군데 모아놓고 사용하기 쉽게 이름을 붙여놓은 것
class 클래스명 {
var 변수
fun 함수() {
// 코드
}
}
class Log {
var status: Intcompanion objext {
static fun d(tag: String, msg: String) {
// 문자열을 출력하는 코드
}
static fun e(tag: String, msg: String) {
// 문자열을 출력하는 코드
}
}
}
6.2 클래스의 생성
- 함수 형태로 제공되는 생성자를 호출해야지만 클래스 실행
class Kotlin {
init {
// 생성자가 없으면 아무것도 없는 init 블록이 실행되는 것과 같음
}
}
⊙ 프라이머리 생성자
class KotlinOne (생략가능)constructor(value: String) {
// 코드
}
⊙ 세컨더리 생성자
class KotlinTwo {
constructor (value: String) {
println("생성자로부터 전달받은 값은 ${value}입니다.")
}
}
6.3 클래스의 사용
- 클래스 이름에 괄호를 붙여서 클래스의 생성자 호출 : 클래스명() -> constructor 키워드를 직접 호출하지 않음
- Kotlin클래스의 생성자를 호출한 후 생성되는 것을 인스턴스라고 하는데, 생성된 인스턴스는 변수에 담아둘 수 있음
- : var kotlin = Kotlin()
- 생성자에 파라미터가 있으면 값을 입력해야함 : var one = KotlinOne("value")
class KotlinTwo {
constructor (value: String) {
println("생성자로부터 전달받은 값은 ${value}입니다.")
}
}
var one = KotlinTwo("value")
*** 출력 결과 *** 생성자로부터 전달받은 값은 value입니다. |
⊙ 클래스 안에 정의된 함수와 변수 사용하기
class KotlinThree {
var one: String = "None"
fun printOne() {
println("one에 입력된 값은 ${one}입니다")
}
}
var kotlinThree = KotlinThree();
kotlinThree.one = "new value"
kotlinThree.printOne()
*** 출력 결과 *** one에 입력된 값은 new value입니다 |
⊙ 클래스를 인스턴스화 하지 않고 사용하기 : companion object
class KotlinFour {
companion object {
var one: String = "None"
fun printOne() {
println("one에 입력된 값은 ${one}입니다")
}
}
}
KotlinFour.one = "새로운 값"
KotlinFour.printOne()
*** 출력 결과 *** one에 입력된 값은 새로운 값입니다 |
6.4 데이터 클래스
data class 클래스명 (val 파라미터1: 타입, var 파라미터2: 타입)
⊙ 데이터 클래스의 정의와 생성
data class DataUser (var name: String, var age: Int)
var dataUser = DataUser("Michael", 21)
println("DataUser는 ${dataUser.toString()}")
*** 출력 결과 *** DataUser는 DataUser(name=Michael, age=21) |
⊙ copy() 메서드 지원
var newData = dataUser.copy()
6.5 클래스의 상속과 확장
- 코틀린은 클래스의 재사용을 위해 상속을 지원
⊙ 클래스의 상속
- 상속 대상이 되는 부모 클래스는 open 키워드로 만들어야만 자식 클래스에서 사용 가능
- 만약 open 키워드로 열려있지 않은 경우 상속 불가능
- 상속을 받을 자식 클래스에서는 콜론을 이용해서 상속할 부모 클래스 지정
open class 상속될 부모 클래스 { // 코드 }
class 자식 클래스 (value: String) : 부모 클래스(value) { // 코드 }
⊙ 생성자 파라미터가 있는 클래스의 상속
open class 상속될 부모 클래스 (value: String) { // 코드 }
class 자식 클래스 (value: String) : 부모 클래스(value) { // 코드 }
⊙ 부모 클래스의 프로퍼티와 메서드 사용하기
open class Parent {
var hello: String = "안녕하세요"
fun sayHello() {
println(hello)
}
}
class Child: Parent() {
fun myHello() {
hello = "Hello"
sayHello()
}
}
⊙ 프로퍼티와 메서드의 재정의 : 오버라이드
- 상받은 부모 클래스의 프로퍼티와 메서드 중에 자식 클래스에서는 다른 용도로 사용해야 하는 경우 Override 필요
- 동일한 이름의 메서드나 프로퍼티를 사용할 필요가 있을 경우 override 키워드를 사용해 재정의
⊙ 메서드 오버라이드
open class BaseClass {
open fun opened() {
}
fun notOpend() {
}
}
class ChildClass: BaseClass() {
override fun opened() {
}
override fun notOpend() { // notOpend 메서드는 open 키워드가 없으므로 잘못된 사용
}
}
⊙ 프로퍼티 오버라이드
open class BaseClass2 {
open var opened: String = "I am"
}
class ChildClass2 : BaseClass2() {
override var opened: String = "You are"
}
⊙ 익스텐션
fun 클래스.확장할 함수() {
// 코드
}
'프로그래밍 언어 > Kotlin 기초' 카테고리의 다른 글
[Kotlin]tailrec(꼬리재귀) (0) | 2023.02.24 |
---|---|
[Kotlin공부]코틀린문법정리 : 07 설계도구 (0) | 2021.03.04 |
[Kotlin공부]코틀린문법정리 : 05 함수 (0) | 2021.03.01 |
[Kotlin공부]코틀린문법정리 : 04 반복문 (0) | 2021.02.08 |
[Kotlin공부]코틀린문법정리 : 03 배열과 컬렉션 (0) | 2021.02.06 |