[JAVA] 12-3. 봉인된 클래스 (제한 클래스)의 정의 및 사용법

Re_Go·2024년 5월 27일
0

JAVA

목록 보기
16/37
post-thumbnail

봉인된 클래스란 하위 클래스들에 의한 상위 클래스의 무분별한 남용을 방지하고자 Java 15부터 도입된 클래스로, 상위 클래스에서 지정한 하위 클래스만 해당 상위 클래스를 상속받도록 할 수 있는 기능입니다.

사용법은 접근 제한자의 뒷부분에 sealed 키워드를 작성해준 뒤, 클래스 이름 뒤에 permites 키워드를 작성하고, 다시 그 뒤에 해당 클래스의 상속을 허용할 하위 클래스들을 작성해주면 됩니다.다음과 같습니다.

public sealed class phone permites AiFunction{	
}

다음은 sealed 키워드에 의해 생성된 클래스를 상속받는 하위 클래스는 해당 클래스에 의해 봉인된 클래스를 다른 클래스로 상속 받을 수 있기 때문에, final 키워드를 붙여 허용된 클래스를 끝으로 더 이상 상속이 안되게 하거나, non-sealed 키워드를 붙여 상속이 가능하도록 해야 하는데요.

non-selaed 클래스를 상속 받는 또 다른 하위 클래스는 해당 클래스를 상속 받되, permites를 지정한 상위 클래스의 멤버까지 지정 받는 것은 아닙니다. 한 마디로 non-sealed 키워드는 해당 하위 클래스부터 다시 상속을 허용하는 것을 의미하지, 해당 하위 클래스가 상속 받은 sealed 클래스(상위 클래스) 까지의 상속을 허용한다는 것은 아님을 표시한 키워드라고 할 수 있죠.

// 추상 클래스: Ai 기능
sealed abstract class AiFunction permits Smartphone {
    // 추상 메서드 : 
    abstract void talkingWithAi();
}

// 하위 클래스: 폴더블폰은 Ai 기능 상속을 허용되지 않으므로 상속받지 못합니다. 그러나 상속을 받도록 하고는 있으므로 final이나 non0-selaed 키워드 중 하나를 붙여줘야 하되, AiFunction 부분에서 The type FlipPhone extending a sealed class AiFunction should be a permitted subtype of AiFunction 에러가 발생합니다.
non-sealed class FlipPhone extends AiFunction {
    // 전화 걸기 메서드 구현
    void talkingWithAi() {
        System.out.println("talking with AI");
    }
}

// 하위 클래스: 스마트폰은 Ai 기능 상속이 허용되므로 상속 메서드를 구현하는 것이 가능합니다. 해당 클래스에 final 키워드를 붙일 경우, 해당 클래스를 끝으로 더 이상 하위 클래스로부터의 상속을 허용하지 않음을 의미하게 됩니다.
final class Smartphone extends AiFunction {
    void talkingWithAi() {
        System.out.println("talking with AI");
    }
    // 추가 기능: 인터넷 사용
    void browseInternet() {
        System.out.println("Browsing the internet from Smartphone");
    }
}

public class Hello {
    public static void main(String[] args) {
        // 폴더블폰 객체 생성 및 사용
        FlipPhone flipPhone = new FlipPhone();
        flipPhone.talkingWithAi(); // Ai기능 사용 x

        System.out.println();

        // 스마트폰 객체 생성 및 사용
        Smartphone smartphone = new Smartphone();
        smartphone.talkingWithAi(); // Ai기능 사용 o
        smartphone.browseInternet();
    }
}
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글