[Kotlin] Class & Inheritance

Jiyoon Chae·2021년 11월 14일
0

Kotlin

목록 보기
2/5

클래스의 기본 구조

클래스는 '값'과 그 값을 사용하는 '기능'들을 묶어 놓은 것

고유의 특징 값 <속성> + 기능 구현 <함수>

인스턴스

클래스를 이용해서 만들어 내는 서로 다른 속성의 객체를 지칭.

fun main() {
  
  var a =Person("박보영", 1990) //인스턴스 a
  var b = Person("전정국", 1997) //인스턴스 b
  var c = Person("장원영",2004)  //인스턴스 c
  
  a.introduce()
  b.introduce()
  c.introduce()
  
}

class Person(var name:String, val birthYear: Int) {
    fun introduce(){ //함수 추가
	    println("안녕하세요, ${birthYear}년생 ${name}입니다")
		}
  }

객체지향의 기본 구조 + 함수형 언어의 장점 = 코틀린

클래스의 생성자 constructor

: 새로운 인스턴스를 만들기 위해 호출하는 특수한 함수.

<기능>

  1. 인스턴스의 속성을 초기화
  2. 인스턴스 생성 시 필요한 구문을 수행 - init함수를 통해 가능

(init 함수는 파라미터나 반환형이 없는 특수한 함수, 생성자를 통해 인스턴스가 만들어 질 때 호출되는 함수)

기본 생성자

:클래스를 만들 때 기본으로 선언

보조 생성자

:필요에 따라 추가적으로 선언,

기본 생성자와 다른 형태의 생성자를 제공하여 인스턴스 생성시 편의를 제공하거나, 추가적인 구문을 수행하는 기능을 제공하는 역할,필요에 따라 추가적으로 선언, 기본 생성자와 다른 형태 의 생성자를 제공하여 인스턴스 생성시 편의를 제공하거나, 추가적인 구문을 수행하는 기능을 제공하는 역할

보조생성자 만들 때는 반드시 기본 생성자를 통해 속성을 초기화 해줘야함.

보조 생성자가 기본 생성자 호출

constructor(name:String):this(name,1997)
fun main() {
  
  var a =Person("박보영", 1990)
  var b = Person("전정국", 1997)
  var c = Person("장원영",2004)
  
  var d = Person("박지민")
  var e = Person("김석진")
  var f= Person("김남준")
 
  
}

class Person(var name:String, val birthYear: Int) {
   init {
       println("${this.birthYear}년생 ${this.name}님이 생성되었습니다")
   }
    constructor(name:String):this(name, 1997){
        println("보조생성문이 사용되었습니다")
    }
 }

클래스의 상속

inheritance

상속의 필요성

  1. 이미 존재하는 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때.

  2. 여러개의 클래스를 만들었는데 공통점을 뽑아 코드 관리를 편하게 할 때 사용.

수퍼 클래스 : 속성과 함수를 물려주는 클래스

서브 클래스 : 물려받는 클래스

상속 구현 : Animal ⇒ Dog, Cat 확정

open은 클래스가 상속될 수 있도록 클래스 선언시 붙여주는 키워드

fun main() {
  var a =Animal("별이", 5, "개")
  var b = Dog("별이", 5)
  a.introduce()
  b.introduce()
  
  b.bark()
  var c = Cat("루이", 1)
  c.introduce()
  c.meow()
}

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

class Cat(name:String, age:Int): Animal(name,age,"고양이"){
    fun meow(){
        println("야옹야옹")
    }
}

결과값 : 
저는 개 별이이고, 5살입니다.
저는 개 별이이고, 5살입니다.
멍멍
저는 고양이 루이이고, 1살입니다.
야옹야옹

상속 규칙

  1. 서브 클래스는 수퍼 클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없음.
  2. 생성시 반드시 수퍼클래스의 생성자까지 호출되어야함.
profile
바닐라라떼 좋아☕

0개의 댓글

관련 채용 정보