728x90
확장함수를 사용하면 기존 클래스에 쉽게 메소드를 추가할 수 있다.
- 설명
- 코틀린에서는 자바와 달리 외부에서 클래스의 메소드를 추가할 수 있다.
- 과도하게 사용하면 코드의 가독성을 해칠 수 있지만 장점도 존재한다.
- 원하는 메소드가 있지만 내가 설계한 클래스가 아닐때 외부에서 메소드를 관리한다.
- 내 목적을 위해 외부에서 관리하기 때문에 원본 클래스의 일관성을 유지할 수 있다.
- 주의사항
- 확장함수는 public 멤버에만 접근할 수 있고 private, protected는 접근할 수 없다.
- private 또는 protected 멤버에 접근하려면 클래스 내부의 멤버함수 형태가 적합하다.
- 클래스의 멤버함수처럼 상속할 수 없다.
- 즉, 하위 클래스에서 확장함수를 재정의(오버라이드)할 수 없다.
- 클래스를 변경하지 못하는 상황에서 확장함수로 메소드를 추가해서 사용할 수 있다.
- X개발자가 클래스를 만들어서 전달해줬는데 나는 다른 기능도 추가되었으면 함
- A개발자도 본인이 사용할 메소드가 추가적으로 필요하다고 함
- B개발자도 본인이 사용할 메소드가 추가적으로 필요하다고 함
- X개발자는 나름대로 확장성을 고려해서 클래스를 만들었는데.. 모든 요구를 들어주다가는 고려한 내용들을 지키지 못할것같음
- 이때, 확장함수를 이용해서 필요한 기능들을 본인들이 추가해서 사용함
예시로, 이름 나이만 몸무게만 출력하는 displayInfo 메소드가 있는데 추가로 키 까지 조회 하고 싶다.
fun main() {
fun People.getHeight() = println("키: $height") // 확장함수
val people = People("김나박",20,70.5,180.2)
people.disPlayInfo() /*
이름: 김나박
나이: 20
몸무게: 70.5
*/
people.getHeight() //키: 180.2
}
class People(val name: String, val age: Int, val weight : Double, val height : Double){
fun disPlayInfo(){
println("이름: $name")
println("나이: $age")
println("몸무게: $weight")
}
}