hong's android

[Kotlin] 상속과 위임 본문

Develop/Kotlin

[Kotlin] 상속과 위임

_hong 2023. 2. 21. 16:50

상속과 위임 언제 사용해야 할까?

 

상속은 “is-a” 와 같이 포함 관계가 있는 다른 클래스로 대체가 되는 경우

위임은 포함관계는 아니지만 다른 클래스 객체를 사용해야하는 경우, 구성의 관계 “has-a”

 

상속에서의 문제점

class Animal {
    /*
    public void run() {
        System.out.println("달려달려~");
    }
    */
    
    // 메서드 이름을 run에서 dash로 바꿨다.
    public void dash() {
        System.out.println("달려달려~");
    }
}
 
class Dog extends Animal {
	
}
 
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.run(); // 에러 발생!! 수정이 필요하다.
    }
}

상속은 부모 - 자식 클래스 간의 종속이 생긴다. 그렇기 때문에 유연성이 떨어질 수 있다. 

위 예제는 부모 클래스에서 자식 클래스에 상속하는 메소드의 변경이 일어난 상황이다.

 

자바에서 위임 구현

class Pistol {
    public void bang() {
        System.out.println("권총 빵야!");
    }
    public void reload() {
        System.out.println("재장전");
    }
    public void aiming() {
        System.out.println("조준");
    }
}
 
class Police {
    private Pistol pistol = new Pistol();
	
    public void bang() {
        pistol.bang();
    }
    public void reload() {
        pistol.reload();
    }
    public void aiming() {
        pistol.aiming();
    }
}
 
public class Main {
    public static void main(String[] args) {
        Police police = new Police();
        police.bang();
        police.reload();
        police.aiming();
    }
}

Police 클래스는 위임하고자 하는 객체(pistol)을 가지고 있다. (Composition)

Police와 Pistol간의 결합은 낮아진다. 

 

하지만 같은 메소드를 bang,reload,aiming은 아래와 같은 원칙들을 위배한다.

1) 반복해서 재사용 해야한다. -> DRY 원칙

2) 확장을 할때 변경에 닫혀 있어야한다. -> OCP 원칙

 

코틀린에서의 위임

 

OCP와 DRY 원칙이 위배되고 코드가 많아질수록 위임을 위해 작성해야할 부분들이 많다.

코틀린은 언어 차원에서 위임을 지원해준다. 

class Manager() : Worker by JavaProgrammer()

 

 

Reference

더보기

'Develop > Kotlin' 카테고리의 다른 글

[코틀린] object 키워드  (0) 2023.03.13
[Kotlin] 코틀린 인 액션 2장  (0) 2023.01.16
[Kotlin] 코틀린 인 액션 1장  (0) 2023.01.16