-
[Java] 인터페이스(interface)Java 2023. 9. 4. 15:46
인터페이스
- 구현된 것이 아무것도 없는 밑 그린만 있는 기본 설계도
특징
- 멤버변수, 일반 구현 메서드를 가질 수 없다
- 오직 추상 메서드와 상수만 멤버로 가질 수 있음
- 인터페이스는 표준, 약속(강제성 O), 규약을 의미
- 추상클래스보다 추상화가 더 높다 - 기능적인 측면으로 많이 활용
인터페이스 활용
인터페이스 생성
- interface 키워드를 통해 사용
- 상수만을 가질수 있다 (멤버변수 사용불가)
- 인스턴스 메서드를 가질 수 없다
- 인터페이스 안에서 선언하는 기능은 public abstract이기 때문에 생략 가능
public interface RemoteController { public static final int SERIAL_NUMBER = 100; // 상수 public abstract void turnOn(); // 추상 메서드 void turnOff(); } // end of interface public interface SoundEffect { // 인터페이스 안에 추상 메서드는 // 가능한 작게 설계 하는것이 좋다. public abstract void notification(); }
부모 클래스 생성
- 추상클래스와 인터페이스 둘 다 활용해서 자식클래스를 사용가능
public abstract class HomeAppliances { int width; int height; String color; public abstract void turnOn(); public abstract void turnOff(); }
자식 클래스 생성
- 인터페이스 2개를 구현하며 부모클래스를 상속받는 클래스
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("띠리리~~링~**"); } }
- RemoteController 인터페이스를 구현하며 부모클래스를 상속받는 클래스
public class Television extends HomeAppliances implements RemoteController { @Override public void turnOn() { System.out.println("티비 전원을 켭니다."); } @Override public void turnOff() { System.out.println("티비 전원을 끕니다."); } }
- 인터페이스 2개를 모두 구현하며 부모클래스는 상속받지 않는 클래스
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("뚜두두르루~~~"); } }
메인 클래스
- 코드를 좀 더 유연하고 확장성 있게 설계할 때 표준,규약,규칙을 지켜서 설계하고 싶다면 인터페이스 활용
public class MainTest1 { public static void main(String[] args) { HomeAppliances appliances1 = new Television(); HomeAppliances appliances2 = new Refrigerator(); // HomeAppliances appliances3 = 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();; } System.out.println("----------------------------------"); for (int i = 0; i < remoteControllers.length; i++) { //RemoteController remoteController = remoteControllers[i]; remoteControllers[i].turnOff(); } } }
'Java' 카테고리의 다른 글
[JPA] 스프링 부트 JPA 기본 설정 (0) 2023.12.15 [QueryDSL] QueryDSL 스프링부트 3.0 이상 버전 환경 설정 (1) 2023.12.15 [Java] 템플릿 메서드 (0) 2023.09.04 [Java] 추상 클래스 (0) 2023.09.04 [Java] 다형성 (0) 2023.08.30