- 객체의 동작을 정의하는 추상 타입이다.
- 구현 세부사항을 포함하지 않는다.
- 메서드의 시그니처(이름, 매개변수, 반환 타입)만 정의하며, 이를 구현하는 클래스가 실제 동작을 제공한다.
- 모든 메서드가 추상 메서드로 선언된다.( public abstract)
- 모든 변수는 상수로 선언된다.(public static final)
package com._interface;
// HOW - interface 선언하면 된다.
// 여기 안에 선언된 메서드는 모두 추상 메서드가 되어야 한다.
// WHY
public interface Animal {
// 메서드 선언부만 있고 바디가 없다.
public abstract void eat();
// 생략이 가능하다. abstract 키워드
// public abstract void move();
void move();
}
package com._interface;
// 인터페이스는 구현받다, 구현하다.
// Animal 인터페이스를 구현받다
public class Dog implements Animal {
// 문법
// 추상 메서드를 구현 메서드로 재정의 해야 한다
@Override
public void eat() {
System.out.println("강아지가 먹이를 먹습니다.");
}
@Override
public void move() {
System.out.println("강아지가 달린다");
}
public static void main(String[] args) {
// 다형성
Animal dog = new Dog(); // 업캐스팅
Animal bird = new Bird();
dog.eat();
dog.move();
bird.eat();
bird.move();
} //end of main
}
class Bird implements Animal{
@Override
public void eat() {
System.out.println("새가 모이를 먹습니다");
}
@Override
public void move() {
System.out.println("새가 하늘을 날아 다닙니다.");
}
}
- 추상 클래스와 인터페이스를 활용해서 코드를 작성해 보자.
package com._interface;
public abstract class HomeAppliances {
int width;
int height;
String color;
// public void turnOn(){
// System.out.println("전원을 켭니다.");
// }
//
// public void turnOff() {
// System.out.println("전원을 끕니다.");
// }
}
package com._interface;
public interface RemoteController {
// 인터페이스란?
// 구현된 것이 아무것도 없는 밑 그림만 있는 기본 설계도이다.
// 모든 변수는 -> 상수가 된다. public static final int N;
// 모든 메서드는 추상 메서드가 된다. 심지어 abstract 키워드도 생략 가능하다.
// 추상 클래스보다 추상화가 더 높다.
// 중요! 인터페이스를 사용할 때 무언가 동작 중심의 클래스를 선언해야 할 때 사용한다.
// 인터페이스는 표준이다. 또는 강제성이 있는 규약이다.
// 오직 static final 상수만을 가질 수 있다.
public static final int SERIAL_NUMBER = 100;
public abstract void turnOn();
public abstract void turnOff();
}
package com._interface;
public interface SoundEffect {
public abstract void soundOn();
}
package com._interface;
public class Television extends HomeAppliances implements RemoteController {
@Override
public void turnOn() {
System.out.println("티비 전원을 켭니다.");
}
@Override
public void turnOff() {
System.out.println("티비 전원을 끕니다.");
}
}
package com._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("뚜뚜 ~~~ 뚜뚜 ~~ 날라*");
}
}
'JAVA' 카테고리의 다른 글
swing (0) | 2025.04.26 |
---|---|
인터페이스와 추상 클래스 활용한 코드 작성 (0) | 2025.04.26 |
추상 클래스 구현해보기 (0) | 2025.04.26 |
추상 클래스(abstract class) (0) | 2025.04.26 |
스타크래프트 만들어보기 ver.3 (0) | 2025.04.25 |