[Kotlin/코틀린] 11. 확장함수, 비동기 프로그래밍, 쓰레드, 코루틴

2023. 12. 19. 23:07스파르타/Kotlin

 

 

11. 확장함수

코틀린에서는 자바와 달리 외부에서 클래스의 메소드를 추가할 수 있다.

기존 클래스에 쉽게 메소드를 추가할 수 있다.

과도하게 사용하면 코드의 가독성을 해칠 수 있지만 장점도 존재한다.

원하는 메소드가 있지만 내가 설계한 클래스가 아닐 때 외부에서 메소드를 관리한다.

내 목적을 위해 외부에서 관리하기 때문에 원본 클래스의 일관성을 유지할 수 있다.

 

 

예시 코드

Student 클래스에 이름과 나이만 출력하는 displayInfo 함수만 존재하는데 추가로 등급까지 조회를 하고 싶다.

요구사항

X개발자가 클래스를 만들어서 전달해줬는데 나는 다른 기능도 추가되었으면 해요

A개발자도 본인이 사용할 메소드가 추가적으로 필요하다고 해요

B개발자도 본인이 사용할 메소드가 추가적으로 필요하다고 해요

X개발자는 나름대로 확장성을 고려해서 클래스를 만들었는데..

모든 요구를 들어주다가는 고려한 내용들을 지키지 못할것같아요

이때, 확장함수를 이용해서 필요한 기능들을 본인들이 추가해서 사용해요

fun main() {
    fun Student.getGrade() = println("학생의 등급은 ${this.grade} 입니다")
    var student = Student("참새", 10, "A+")
    student.displayInfo()
    student.getGrade()
}

class Student(name: String, age: Int, grade: String) {
    var name: String
    var age: Int
    var grade: String

    init {
        this.name = name
        this.age = age
        this.grade = grade
    }

    fun displayInfo() {
        println("이름은 ${name} 입니다")
        println("나이는 ${age} 입니다")
    }
}

 

Student 클래스를 변경하지 못하는 상황일 때에는

확장함수를 이용해서 새롭게 메소드를 추가해서 사용할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

이후 내용 추가 예정