구현 가능 기능 : RemoteControl / Searchable -> 인터페이스로 사용.
이유) 다른 여러 기기에서 공통된 기능을 탑재할 수 있지만 각각의 기능은 따로 구현이 가능하므로 인터페이스로 선언해준다. 이때 implements를 사용하는데 이는 인터페이스 구현할 때 쓰이는 것이다. 부모 클래스는 선언만하고 내용은 자식클래스에서 오버라이딩하여 구현 가능하므로 이렇게 공통된 기능을 구현하려고 할 때 유용하게 쓰인다.
1
2
3
4
5
6
7
8
9
10
11
12
|
package Interface;
//걍 진짜 기본적인 틀만..선언하고 나중에 다른 클래스에서 오버라이딩하여 구현ㅇ
public interface RemoteControl {
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
public void turnOn();
public void turnOff();
public void setVolume(int volume);
}
|
cs |
1
2
3
4
5
6
|
package Interface;
public interface Searchable {
void search(String url);
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package Interface;
public class Audio implements RemoteControl{
public int volume;
@Override
public void turnOn() {
System.out.println("오디오를 킵니다.");
}
@Override
public void turnOff() {
System.out.println("오디오를 끕니다.");
}
@Override
public void setVolume(int volume) {
if(volume > RemoteControl.MAX_VOLUME) {
this.volume = RemoteControl.MAX_VOLUME;
}
else if(volume < RemoteControl.MIN_VOLUME) {
this.volume = RemoteControl.MIN_VOLUME;
}
else {
this.volume = volume;
}
System.out.println("현재 볼륨: " + this.volume);
}
public void search(String url) {
System.out.println(url + " 을 검색합니다.");
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package Interface;
//이때 볼륨의 최대, 최소는 인터페이스에서 미리 설정했으므로 바뀌지 않음
public class Television implements RemoteControl{
public int volume;
@Override
public void turnOn() {
System.out.println("TV를 킴");
}
@Override
public void turnOff() {
System.out.println("TV를 끔");
}
@Override
//인터페이스에서 구현한 상수(최대볼륨,최소볼륨)사용하려면
//인터페이스 이름. -> 메소드 자동 호출. 선택가능.
public void setVolume(int volume) {
if(volume > RemoteControl.MAX_VOLUME) {
this.volume = RemoteControl.MAX_VOLUME;
}
else if(volume < RemoteControl.MIN_VOLUME) {
this.volume = RemoteControl.MIN_VOLUME;
}
else {
this.volume = volume;
}
System.out.println("현재 볼륨 : " + this.volume);
}
//search 인터페이스 구현,
public void search(String url) {
System.out.println(url + " 을 검색합니다.");
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package Interface;
//메인 메소드가 있으므로 실행하는 ...
//remoteControl을 텔레비전과 오디오에서 하는거임ㅇㅇ. 그래서 객체 선언해주고 메소드 사용.
public class RemoteControlExample {
public static void main(String args[]) {
RemoteControl rc1 = new Television();
rc1.turnOn();
rc1.turnOff();
rc1.setVolume(5);
RemoteControl rc2 = new Audio();
rc2.turnOn();
rc2.turnOff();
rc2.setVolume(3);
}
}
|
cs |
-RemoteControl & Search 기능 둘다 사용가능한 스마트TV 구현.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package Interface;
//스마트테레비 : 리모트컨트롤 & 검색기능 둘다 상속받음.
public class SmartTelevision implements RemoteControl, Searchable {
private int volume;
@Override
public void search(String url) {
System.out.println(url + " 을 검색합니다.");
}
@Override
public void turnOn() {
System.out.println("TV를 킴");
}
@Override
public void turnOff() {
System.out.println("TV를 끔");
}
@Override
public void setVolume(int volume) {
this.volume = volume;
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package Interface;
public class SmartTelevisionEx {
public static void main(String[] args) {
SmartTelevision tv = new SmartTelevision();
//스마트 텔레비전은 remoteControl 과 Searchable 두개를 상속 받음.
//상속 받았을 때 부모 클래스 것만 볼 수 있음.(이용 가능)
//tv. -> search, turnOn, turnOff, setVolume 모두 사용 가능.
RemoteControl rc = tv;
Searchable sc = tv;
//rc. -> search 사용 불가.
//sc -> search만 사용 가능.
}
}
|
cs |
'Language > JAVA' 카테고리의 다른 글
베타테스트 문제 (0) | 2021.12.10 |
---|---|
Multi Thread Examples (0) | 2021.11.24 |
조회 프로그램 (0) | 2021.10.12 |
완전탐색 (0) | 2021.10.03 |
객체 배열 (0) | 2021.09.28 |