본문 바로가기

[Kotlin] 클래스와 상속

@hyeon.s2023. 1. 6. 00:47

클래스와 상속

클래스란?

간단히 말하면 어떤 변수와 그 변수를 사용하는 기능(메서드)들을 묶어둔 것이다.

클래스 기본구조

fun main() {
   Person("서현",22).introduce()
}

class Person(var name:String, var age:Int)
{
    fun introduce()
    {
        println("안녕하세요 ${this.name}입니다 나이는 ${this.age} 입니다.")
    }
}

다음과 같이 Person 클래스를 생성하고, introduce라는 메서드를 만들어서 사용할 수 있다. 

클래스 생성자

생성자란?

새로운 인스턴스를 만들기위해 호출하는 함수로 초기화 기능과 인스턴스 생성시 수행할 구문을 작성 할 수 있다.

아래와 같이 init 함수 안에 생성시 초기화 할 구문을 넣어 구현할 수 있다. 

fun main() {
   Person("서현",22).introduce()
}

class Person(var name:String, var age:Int)
{
    init {
        println("${this.name}님이 생성")
    } // 이 부분이 생성자 함수이다.
    fun introduce()
    {
        println("안녕하세요 ${this.name}입니다 나이는 ${this.age} 입니다.")
    }
}

init 과 같이 초기화 하는 것을 기본생성자라고 하고,필요에 따라 constructor을 통해 보조생성자를 생성 할 수 있다. 

클래스와 상속

상속을 하는 이유

1. 이미 있는 class에서 기능을 확장해서 사용하기 위해서이다.

2. 여러개 class들의 공통 기능을 묶어 관리하기 위해서이다.

상속에서의 약속

1. 서브 class는 슈퍼class와 동일한 이름을 가질 수 없다.

2. 슈퍼 clsdd앞에 open을 해주어야 상속이 가능하다.  *코틀린은 상속 금지가 기본값이다. 

3. 서브 class는 슈퍼 class의 생성자를 호출한다. 

fun main() {
  Animal("코코",5,"개").introduce()
  Dog("코코",5).introduce()
  Dog("코코",5).bark()
}

open class Animal (var name:String, var age:Int, var type:String)
{
    fun introduce() {
        println("저는 ${type}이고, ${age}살 입니다. ")
    }
}

class Dog(name:String, age:Int):Animal(name,age,"개")
{
 fun bark() {
     println("멍멍")
 }
}

위 코드와 같이 Animal 클래스를 상속받은 Dog 클래스를 생성 할 수 있다.

Dog 클래스는 Animal 클래스를 상속받아 introduce() 를 사용할 수 있고, bark() 라는 나만의 메서드를 만들어 사용할 수도 있다. 

 

hyeon.s
@hyeon.s :: 개발로그
목차