인터페이스란?
● 모든 메서드가 추상 메서드로 선언됨 public abstract
● 모든 변수는 상수로 선언됨 public static final
package ch10;
public interface RemoteController {
// 인터페이스란?
// 구현된 것이 아무것도 없는 밑 그림만 있는 기본 설계도 이다.
// 특징
// 멤버 변수, 일반 구현 메서드를 가질 수 없다.
// 오직 추상 메서드와 상수만을 멤버로 가질 수 있다.
// 인터페이스는 표준, 약속(강제성있는규칙), 규약을 의미한다.
// 추상클래스보다 추상화가 더 높다. - 기능적인 측면으로 많이 활용한다.
public static final int SERIAL_NUMBER = 100; // 상수만을 가질 수 있다.
//public int number; 멤버 변수 사용 불가
public abstract void turnOn(); // 추상 메서드만 가질 수 있다.
// public void turnOff() {} 인스턴스 메서드를 가질 수 없다.
// 인터페이스 안에 선언하는 기능은 전부 public abstract 이다.
// public abstract 생략 가능하다.
void turnOff();
} // end of interface
추상클래스처럼 new를 사용할 수 없다
인터페이스 예제
Refrigerator 클래스
package ch12;
public class Refrigerator
extends HomeAppliances implements RemoteController, SoundEffect {
@Override
public void turnOn() {
System.out.println("냉장고 전원을 켭니다.");
}
@Override
public void turnOff() {
System.out.println("냉장고 전원을 끕니다.");
}
@Override
public void notification() {
System.out.println("띠리리~~링~**");
}
}
Television 클래스
package ch12;
public class Television extends HomeAppliances
implements RemoteController{
@Override
public void turnOn() {
System.out.println("티비 전원을 켭니다.");
}
@Override
public void turnOff() {
System.out.println("티비 전원을 끕니다.");
}
}
Toy 클래스
package ch12;
public class ToyRobot
implements RemoteController, SoundEffect {
int width;
int height;
String color;
String name;
@Override
public void turnOn() {
System.out.println("장난감 로봇을 켭니다.");
}
@Override
public void turnOff() {
System.out.println("장난감 로봇을 끕니다.");
}
@Override
public void notification() {
System.out.println("뚜두두르루~~~");
}
}
인터페이스 설계
리모트 컨트롤 인터페이스
package ch12;
// 인터페이스를 사용하는 방법
public interface RemoteController {
// 인터페이스란
// 구현된 것이 아무것도 없는 밑 그림만 있는 기본 설계도
// 즉, 추상 메서드나 static 상수만을 기본적으로 가진다.
// public abstract void turnOn();
// public abstract void turnOff();
// public abstract 생략이 가능 하다. - 컴파일러가 넣어줌
void turnOn();
void turnOff();
}
사운드 인터페이스
package ch12;
public interface SoundEffect {
// 인터페이스 안에 추상 메서드는
// 가능한 작게 설계 하는 것이 좋다.
public abstract void notification();
}
HomeApplication
추상 클래스
package ch12;
public abstract class HomeAppliances {
int width;
int height;
String color;
}
객체
package ch12;
public class MainTest1 {
public static void main(String[] args) {
// 결론
// 코드를 좀 더 유연하고 확장성 있게
// 설계할 때 표준, 규약, 규칙을 지켜서 설계하고 싶다면
// 인터페이스를 활용하자.
HomeAppliances appliances1 = new Television();
HomeAppliances appliances2 = new Refrigerator();
// HomeAppliances appliances2 = new ToyRobot();
RemoteController controller1 = new Television();
RemoteController controller2 = new Refrigerator();
RemoteController controller3 = new ToyRobot();
RemoteController[] remoteControllers
= new RemoteController[3];
remoteControllers[0] = new Television();
remoteControllers[1] = new Refrigerator();
remoteControllers[2] = new ToyRobot();
for (int i = 0; i < remoteControllers.length; i++) {
// RemoteController remoteController = remoteControllers[i];
remoteControllers[i].turnOn();
}
for (int i = 0; i < remoteControllers.length; i++) {
// RemoteController remoteController = remoteControllers[i];
remoteControllers[i].turnOff();
}
} // end of main
}
결과
티비 전원을 켭니다.
냉장고 전원을 켭니다.
장난감 로봇을 켭니다.
티비 전원을 끕니다.
냉장고 전원을 끕니다.
장난감 로봇을 끕니다.
'JAVA' 카테고리의 다른 글
[이클립스] 조건문(if~else, 실행문, 비실행문, 표준입력, 표준출력) (0) | 2024.03.19 |
---|---|
[JAVA] Object 클래스 (0) | 2023.08.11 |
[JAVA] 추상 클래스 (0) | 2023.08.10 |
[JAVA] 다형성 (0) | 2023.08.09 |
[JAVA] 상속 (0) | 2023.08.07 |