⭐인터페이스
Interface
객체의 동작을 정의하는 추상타입으로
클래스가 구현할 메서드의 설계도를 제공한다.
👍다형성
👍 유연성
👍 코드재사용성을 높일 수 있다.
예제 1)
인터페이스(동물 )
클래스(새,개)
설계를 통해 인터페이스 사용법을 알아봤다.
public interface Animal { //인터페이스
}
public class Bird implements Animal { //구현클래스
}
public class Dog implements Animal { //구현클래스
}
package com.interface_.animal;
/**
* 4.23 인터페이스
*
* How
* Interface를 선언하면 된다.
* 여기 안에 선언된 메서드는
* 모두 추상메서드가 돼야 한다.
*
* Why?
*/
public interface Animal {
//추상메서드 선언
public abstract void eat(); // 메서드 선언부만 있고 바디가 없다.
public void move(); // abstract 생략 가능
}//end of Animal
package com.interface_.animal;
/**
* 4.23 인터페이스
*/
public class Bird implements Animal{
@Override
public void eat() {
System.out.println("새가 모이를 먹는다");
}
@Override
public void move() {
System.out.println("새가 하늘을 난다");
}
}//end of Bird
package com.interface_.animal;
/**
* 4.23 인터페이스
* <p>
* 인터페이스는 상속이 아니라 구현받다, 구현하다 라고 말한다.
* <p>
* Animal 인터페이스를 구현받았다.
*/
public class Dog implements Animal {
//추상메서드를 구현메서드로 재정의 해야 한다.
@Override
public void eat() {
System.out.println("강아지가 먹이를 먹는다");
}
@Override
public void move() {
System.out.println("강아지가 달린다");
}
//main
public static void main(String[] args) {
//다형성 적용
Animal dog = new Dog(); //업캐스팅 됐다
Animal bird = new Bird();
dog.eat();
dog.move();
System.out.println();
bird.eat();
bird.move();
}//end of main
}//end of dog
예제 2)
인터페이스(리모콘,음향)
추상클래스(가전)
구현클래스(티비,냉장고,로봇,)
설계를 통해 인터페이스 사용법을 알아봤다.
⭐바텀업!
먼저 티비, 냉장고, 로봇 클래스를 만든 뒤
공통된 부분을 추상클래스로
동작 부분은 인터페이스로 선언해간다.
public interface RemoteController { //인터페이스
}
public interface SoundEffect { //인터페이스
}
public abstract class HomeAppliances { //추상클래스
}
public class TV extends HomeAppliances //추상클래스 상속
implements RemoteController, SoundEffect { //인터페이스 구현
}
public class Refrigerator extends HomeAppliances //추상클래스 상속
implements RemoteController , SoundEffect { //인터페이스 구현
}
public class Refrigerator implements Animal, SoundEffect { //인터페이스 구현
2-1.TV 클래스
package com.interface_.appliance;
/**
* 4.23 인터페이스 2강
*/
public class Television extends HomeAppliances implements RemoteController {
// //member
// int width;
// int height;
// String color;
//
// //method
// public void turnOn() {
// System.out.println("TV전원을 켠다");
// }
// public void turnOff() {
// System.out.println("TV전원을 끈다");
// }
@Override
public void turnOn() {
System.out.println("티비 전원을 켠다");
}
@Override
public void turnOff() {
System.out.println("티비 전원을 끈다");
}
}//end of TV
2-2.냉장고
package com.interface_.appliance;
/**
* 4.23 인터페이스 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 soundOn() {
System.out.println("냉장고 문이 열렸다고 경고한다");
}
}//end of Refrige
2-3.장난감로봇
package com.interface_.appliance;
/**
* 4.23 인터페이스 2강
*
* 지금처럼 장난감 로봇이 가전을 상속받는다면 혼동이 올 수 있다.
*
* 추상클래스보다
* 더 유연한 설계기법이 필요하다.
*
* 그것이 인터페이스 Interface 다.
*/
public class ToyRobot implements RemoteController, SoundEffect {
String name;
@Override
public void turnOn() {
System.out.println("장난감 로봇을 켠다");
}
@Override
public void turnOff() {
System.out.println("장난감 로봇을 끈다");
}
@Override
public void soundOn() {
System.out.println("장난감 로봇이 소리를 낸다");
}
}//end of TR
2-4.가전 (추상클래스)
package com.interface_.appliance;
/**
* 4.23 인터페이스 2강
*/
public abstract class HomeAppliances implements RemoteController {
//member
int width;
int height;
String color;
// //method
// public void turnOn() {
// System.out.println("전원을 켠다");
// }
// public void turnOff() {
// System.out.println("전원을 끈다");
// }
}//end of HA
2-5. 리모콘 (인터페이스)
package com.interface_.appliance;
/**
* 4.23 인터페이스 2강
*
* 인터페이스 개념정리
*/
public interface RemoteController {
/*
⭐인터페이스란
구현된 것이 아무것도 없는
밑 그림만 있는 기본 설계도다.
모든 변수는 상수가 된다.
public static final int N;
모든 메서드는 추상메서드가 된다.
심지어 abstract 키워드도 필요 없다.
추상클래스보다 추상화 수준이 더 높다.
⭐Why
인터페이스는
동작 중심의 클래스를 선언해야 할 때 사용한다.
인터페이스는 동작 중심이다.
인터페이스는 표준이다.
또는 강제성 있는 규약이다.
*/
//오직 static final 상수만을 가질 수 있다.
public static final int SERIAL_NUMBER = 100;
//오직 abstract 추상 메서드만을 가질 수 있다.
public abstract void turnOn();
public void turnOff();
}//end of RemoteController
2-6. 음향(인터페이스)
package com.interface_.appliance;
/**
* 4.23 인터페이스 2강
*/
public interface SoundEffect {
//추상메서드
public abstract void soundOn();
}//end of SE
2-7. 코드 실행부
package com.interface_.appliance;
/**
* 4.23 인터페이스 2강
*/
public class MainTest1 {
//main
public static void main(String[] args) {
/*
인터페이스를 사용하면
유연한 코드를 설계할 수 있다.
*/
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++) {
remoteControllers[i].turnOn(); //한번에 모든 전원을 켰다.
}
}//end of main
}
예제 3)
다음 코드다이어그램(uml) 구현
Calc, 인터페이스로 작성
Claclator, 추상클래스로 작성
CompleteCalc, 구현클래스로 작성
⭐코드설계가 이미 완성돼 있다면
탑다운으로 작성하더라도 문제가 없다.
3-1.Calc(인터페이스) 작성
package com.interface_;
/**
* 4.23 인터페이스 3강
*/
public interface Calc { //인터페이스 선언
//인터페이스는 public abstract 생략 가능
void add(int n1, int n2);
void sub(int n1, int n2);
void multi(int n1, int n2);
void divide(int n1, int n2);
}//end of Calc
3-2. Calculator(추상클래스) 작성
package com.interface_;
/**
* 4.23 인터페이스 3강
*/
public abstract class Calculator implements Calc {
}//end of Calculator
3-3. CompleteCalc(구현클래스) 작성
F2를 누르면 구현메서드를 딸깍하고 만들 수 있다.
package com.interface_;
/**
* 4.23 인터페이스 3강
*/
public class CompleteCalc extends Calculator{
@Override
public void add(int n1, int n2) {
}
@Override
public void sub(int n1, int n2) {
}
@Override
public void multi(int n1, int n2) {
}
@Override
public void divide(int n1, int n2) {
}
}//end of CompleteCalc
'Java' 카테고리의 다른 글
자바 API 문서, 보는 습관을 들이자 (0) | 2025.04.24 |
---|---|
오브젝트 Object 클래스, 자동으로 상속되는 최상위 클래스 (0) | 2025.04.24 |
추상 클래스 Abstrct class, 부모클래스를 만들지만 객체로 만들기는 싫을때 (0) | 2025.04.22 |
다형성 Polymorphism, 유연한 코드 작성을 위한 개념 (0) | 2025.04.22 |
연관관계 Association, 포함관계와 비슷하지만 느슨한 개념 (0) | 2025.04.22 |