[JAVA] 인터페이스

인터페이스란?


● 모든 메서드가 추상 메서드로 선언됨 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' 카테고리의 다른 글

[JAVA] Object 클래스  (0) 2023.08.11
[JAVA] 추상 클래스  (0) 2023.08.10
[JAVA] 다형성  (0) 2023.08.09
[JAVA] 상속  (0) 2023.08.07
[JAVA] 배열  (0) 2023.08.04