Kotlin 기초 - (클래스, 인터페이스)

홍석희·2024년 2월 19일
post-thumbnail

🎈클래스 선언

class Person(val name:String, val birthYear:Int) 
{
	init { // 기본 생성자
        println("${this.birthYear}년생 ${this.name} 생성")
    }
    
    constructor(name:String) : this(name, 1999) { // 보조 생성자
    }
    
    fun printProfile() { // 보조 생성자
    	println("이름: $name, birthYear: $birthYear")
    }
}
  • () 괄호 안에 멤버 변수 선언
  • {} 괄호 안에 매서드 선언
  • init : 기본 생성자
  • constructor : 보조 생성자, : this(..)를 활용하여 기본 생성자를 호출하여 멤버 변수 초기화 필요

🎀클래스 상속

kotlin은 상속 금지가 기본 값으로, 상속을 허용하려면 open 키워드를 사용해야 한다

open class Person(val name:String, val birthYear:Int) 
{
    init {
        println("${this.birthYear}년생 ${this.name} 생성")
    }
    
    constructor(name:String) : this(name, 1999) { // 보조 생성자
    }
    
    fun printProfile() {
    	println("이름: $name, birthYear: $birthYear")
    }
}

class Student(name:String, birthYear:Int, var studentNum:Int) : Person(name, birthYear) 
{
    fun printStudentNum() {
        println("${this.birthYear}년생 ${this.name}학생의 학번: ${this.studentNum}")
    }
}
  • 상속받는 클래스는 반드시 상위 클래스의 생성자를 호출해야 함
    • : Person(name, birthYear)
  • 상속받는 멤버 변수는 var 등의 키워드를 붙이지 않고 선언

🚗오버라이딩

kotlin에서는 오버라이드를 위해 슈퍼클래스의 매서드에 open 키워드를 붙여 오버라이드를 허용해 주어야 한다.
또 오버라이드를 적용하고자 하는 서브클래스에 override 키워드를 붙여 주어야 한다.

open class Person(val name:String, val birthYear:Int) {
    init {
        println("${this.birthYear}년생 ${this.name} 생성")
    }
    
    constructor(name:String) : this(name, 1999) { // 보조 생성자
    }
    
    open fun printProfile() {
    	println("이름: $name, birthYear: $birthYear")
    }
}

class Student(name:String, birthYear:Int, var studentNum:Int) : Person(name, birthYear) {
    fun printStudentNum() {
        println("학번: ${this.studentNum}")
    }
    
    override fun printProfile() {
        println("이름: $name, birthYear: $birthYear, 학번: $studentNum")
    }
}

❓추상화

추상 클래스

abstract class Animal {
    abstract fun eat()
}

class Dog : Animal() {
    override fun eat() {
        println("개가 사료를 먹습니다.")
    }
}

인터페이스

interface Runner { 
    fun run() // abstract 적용
}

interface Eater { 
    fun eat() { // open 적용
        println("음식을 먹습니다.")
    }
}

class Cat : Runner, Eater { // 다중 상속
    override fun run() {
        println("고양이가 달립니다.")
    }
    
    override fun eat() {
        println("고양이가 음식을 먹습니다.")
    }
}
  • 인터페이스에서 구현부가 있는 함수는 open, 구현부가 없는 함수는 abstract로 자동으로 선언됨

🍽️프로젝트 구성

  • JAVA와 달리 kotlin은 파일이나 폴더를 기준으로 구분하지 않고 패키지를 기준으로 구분하기 때문에..
    • 파일명과 클래스명이 일치하지 않아도 된다.
    • 하나의 파일에 여러 개의 클래스를 넣어도 컴파일이 가능하다.
profile
개발 기록

0개의 댓글