[Java] 2. 상속(Inheritance, IS-A) 예제


상속관계 예제로 TV에 대한 예제 코드 포스팅이다.


상속 포스팅

이전 상속관계 포스팅[]


1. TV 객체로 상속 예제

TV에 전원버튼과 채널버튼만 있던 TV기능에서 기술이 발전하면서 단순 TV를 넘어 DigitalTV, InternetTV 등이 출시됨에 따라 TV기능과 리모컨 기능(버튼) 추가되면서

1세대 TV 클래스를 2세대 디지털TV 클래스가 상속을 받고 2세대 디지털TV 클래스가 3세대 인터넷TV 클래스를 상속받으면서

조상 클래스의 기능들을 또 다시 구현하지 않고 상속받기에 TV 기능에 따라 리모컨 버튼도 늘어나면서 버튼에 맞는 메서드만 추가되는 것을 알 수 있다.

/**
 * 1세대 TV
 * 기능 설계도
 */
class TV {
    boolean power;
    int channel;
    int volume;

    //전원
    public void power() {
        power = !power;
    }
    //채널 올리기
    public void upChannel() {
        ++channel;
    }
    //채널 내리기
    public void downChannel() {
        --channel;
    }
    //음량 올리기
    public void upVolume() {
        ++volume;
    }
    //음량 내리기
    public void downVolume() {
        --volume;
    }
}

/**
 * 2세대 디지털 TV
 * 기능 설계도
 */
class DigitalTV extends TV {

    String featureStatus;    //기능 상태

    //채널 번호 직접 입력
    public void setChannel(int channelNum) {
        channel = channelNum;
    }
    //유료채널 이동
    public void movePaidChannel() {
        featureStatus = "유료채널";
    }
    //기본채널 이동
    public void moveDefaultChannel() {
        featureStatus = "기본채널";
    }
}

/**
 * 3세대 인터넷 TV
 * 기능 설계도
 */
class InternetTV extends DigitalTV {

    //인터넷 채널 연결
    public void onInternetChannel(){
        featureStatus = "인터넷채널";
    }
    //인터넷 TV 기능들 구현...
}

/**
 * 인터넷TV 리모컨 기능
 */
public class ExInternetTV4Remote {

    public static void main(String... args) {

        /**
         * UP_BTN
         * DOWN_BTN
         * SET_CHANNEL
         * PAID_BTN
         * INET_ON
         * EXIT_BTN
         */
        String action = args[0];
        String channelNum = (args.length > 1) ? args[1] : "0";

        System.out.println("클릭한 버튼 : " + args[0]);

        InternetTV tv = new InternetTV();

        switch (action) {
            case "UP_BTN":
                tv.upChannel();
                break;

            case "DOWN_BTN":
                tv.downChannel();
                break;

            case "LEFT_BTN":
                tv.downVolume();
                break;

            case "RIGHT_BTN":
                tv.upVolume();
                break;

            case "SET_CHANNEL":
                tv.setChannel( Integer.valueOf(channelNum) );
                break;

            case "PAID_BTN"://유료채널 버튼
                tv.movePaidChannel();
                break;

            case "INET_ON"://인터넷채널 버튼
                tv.onInternetChannel();
                break;

            case "EXIT_BTN"://기본 TV 채널로 나가기 버튼
                tv.moveDefaultChannel();
                break;
        }

        System.out.println("채널 번호: " + tv.channel);
        System.out.println("기능 상태: " + tv.featureStatus);

    }
}