[Java] 7. 상속(Inheritance, IS-A) 예제
포함관계 예제로 TV에 대한 예제 코드 포스팅이다.
상속 포스팅
이전 포함관계 포스팅[]
1. 스마트TV 클래스 포함관계 예제
인터넷TV 출시에 이어 스마트TV까지 출시되면서 SmartFeature 클래스에 새로운 기능들이 추가되었다. 지속적인 상속관계로는 관리하기가 힘들어지기 때문에 스마트TV에서는 SmartFeature 기능을 포함관계
로 구현하였다.
SmartTV 클래스는 InternetTV 는 상속관계로 SmartFeature는 포함관계
로 클래스를 만들었다.
추가로 채널, 소리 버튼 기능(메서드)를 통해서 오버라이딩을 이용한 upChannel, downChannel 메서드를 이용한 것을 볼 수 있다. 오버라이딩에 대해서는 해당[] 포스팅에서 설명하겠다.
@Override
public void upChannel() {
if ("스마트채널".equals(featureStatus)) {
super.upChannel();
} else {
this.moveYCursor(1);
}
}
@Override
public void downChannel() {
if ("스마트채널".equals(featureStatus)) {
super.downChannel();
} else {
this.moveYCursor(-1);
}
}
/**
* 스마트 TV 기능
*/
class SmartFeature {
//OTT 기능
public void onOTT(){
//기능 구현
System.out.println("OTT 메뉴 실행");
}
//유뷰트 기능
public void onYoutube() {
//기능 구현
System.out.println("유튜브 메뉴 실행");
}
//블루투스 기능
public void onBluetooth() {
//기능 구현
System.out.println("블루투스 연결");
}
//USB 기능
public void onUsb(){
//기능 구현
System.out.println("USB 연결");
}
}
/**
* 스마트 TV
* 인터넷 TV 상속관계
* 스마트기능 포함관계
*/
class SmartTV extends InternetTV {//상속
//포함관계 예시
SmartFeature smartFeature;
SmartTV() {
smartFeature = new SmartFeature();
};
//포함
void onClinkYoutube() {
onSmart();
smartFeature.onYoutube();
}
void onClinkBluetooth() {
onSmart();
smartFeature.onBluetooth();
}
void onClinkUsb() {
onSmart();
smartFeature.onUsb();
}
//상속
//스마트TV에 스마트기능 사용시에 스마트채널 기능
void onSmart() {
featureStatus = "스마트채널";
}
//오버라이드 예시
public void moveYCursor(int y) {
//포인트 Cursor 위치 상하 이동 기능
}
public void moveXCursor(int x) {
//포인트 Cursor 위치 좌우 이동 기능
}
@Override
public void upChannel() {
if ("스마트채널".equals(featureStatus)) {
super.upChannel();
} else {
this.moveYCursor(1);
}
}
@Override
public void downChannel() {
if ("스마트채널".equals(featureStatus)) {
super.downChannel();
} else {
this.moveYCursor(-1);
}
}
@Override
public void upVolume() {
if ("스마트채널".equals(featureStatus)) {
super.upVolume();
} else {
this.moveXCursor(1);
}
}
@Override
public void downVolume() {
if ("스마트채널".equals(featureStatus)) {
super.downVolume();
} else {
this.moveXCursor(-1);
}
}
}
/**
* 스마트TV 리모컨 기능
*/
public class ExSmartTV4Remote {
public static void main(String... args) {
String action = args[0];
String channelNum = (args.length > 1) ? args[1] : "0";
System.out.println("버튼 클릭: " + args[0]);
//InternetTV tv = new InternetTV();
SmartTV tv = new SmartTV();
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 "ON_YOUTUBE"://유튜브 클릭
tv.onClinkYoutube();
break;
case "ON_BLUETOOTH"://블루투스 클릭
tv.onClinkBluetooth();
break;
case "ON_USB"://USB 클릭
tv.onClinkUsb();
break;
case "EXIT_BTN"://기본 TV 채널로 나가기 버튼
tv.moveDefaultChannel();
break;
}
System.out.println("채널 번호: " + tv.channel);
System.out.println("기능 상태: " + tv.featureStatus);
}
}