📙 목차
🧡 학습 목표
- 인터페이스가 무엇인지 학습한다.
1. 인터페이스(interface)란?
- 인터페이스는 설계 표준이다.
- 클래스가 따라야할 최소한의 공통 규칙을 정의하는 역할을 한다.
2. 인터페이스를 사용하는 이유
- 개발자마다 서로 다른 방식으로 메서드를 만든다면 일관성이 깨질 수 있다.
- 인터페이스를 활용해서 최소한의 규격을 정의한다.
- 세부 구현은 각 클래스에 맡긴다.
- 일관성을 유지하면서 클래스가 고유한 특색을 확장할 수 있도록 돕는다.
3. 인터페이스 적용
- 인터페이스는 클래스가 지켜야 할 최소한의 규칙을 정의한다.
- 클래스에서 implements 키워드로 인터페이스를 활용할 수 있다.
- 인터페이스를 구현한 클래스를 구현체 라고 한다.
인터페이스 정의
interface Car {
void drive();
void stop();
}
인터페이스 구현
class LuxuryCar implements Car {
@Override
void drive() { // ✅ 인터페이스 규칙 준수
System.out.println("멋지게 이동합니다."); // 구현 내용은 자유롭습니다.
}
@Override
void stop() { // ✅ 인터페이스 규칙 준수
System.out.println("멋지게 정지합니다."); // 구현 내용은 자유롭습니다.
}
void charge() { // 🎉 CarA 만의 기능을 확장 가능합니다.
System.out.println("차량을 충전합니다");
}
}
class SpeedCar implements Car {
@Override
void drive() { // ✅ 인터페이스 규칙 준수
System.out.println("빠르게 이동합니다."); // 구현 내용은 자유롭습니다.
}
@Override
void stop() { // ✅ 인터페이스 규칙 준수
System.out.println("빠르게 정지합니다."); // 구현 내용은 자유롭습니다.
}
void autoParking() { // 🎉 CarB 만의 기능을 확장 가능합니다.
System.out.println("자동 주차 기능을 실행합니다.");
}
}
실행 코드
public class Main {
public static void main(String[] args) {
LuxuryCar car1 = new LuxuryCar();
SpeedCar car2 = new SpeedCar();
// ✅ 각 차량의 공통 기능
car1.drive();
car1.stop();
car2.drive();
car2.stop();
// ✅각 차량의 고유 기능
car1.charge();
car2.autoParking();
}
}
4. 인터페이스의 다양한 기능
- 인터페이스 다중 구현
- 인터페이스 다중 상속
인터페이스 다중구현(multi-implementation)
- implements 키워드로 다수의 인터페이스를 구현할 수 있다.
- 한 개의 클래스가 여러 인터페이스(Animal , Flyable)를 구현한 경우 다중구현 이라고 한다.
// 🚀 "동물의 기본 기능" 인터페이스
interface Animal {
void eat();
}
// ✈ "나는 기능" 인터페이스
interface Flyable {
void fly();
}
// ✅ 다중 구현
class Bird implements Animal, Flyable {
public void eat() {
System.out.println("새가 먹이를 먹습니다.");
}
public void fly() {
System.out.println("새가 하늘을 납니다.");
}
// 추가적으로 land() 메서드도 가능하지만 필수는 아님
public void land() {
System.out.println("새가 착륙합니다.");
}
}
인터페이스 다중상속(multi-inheritance)
- extends 키워드로 상속을 구현할 수 있다.
- 상속은 이후 수업에서 자세하게 다룬다.
// 1. 기본 인터페이스: 동물의 기본 기능
interface Animal {
void eat();
}
// 2. 추가 인터페이스: 나는 기능
interface Flyable {
void fly();
}
// 3. ✅ 다중 상속새로운 인터페이스: 동물 + 나는 기능
interface FlyableAnimal extends Animal, Flyable {
void land(); // 추가 기능
}
// 4. 새 클래스 (FlyableAnimal을 구현)
class Bird implements FlyableAnimal {
public void eat() {
System.out.println("새가 먹이를 먹습니다.");
}
public void fly() {
System.out.println("새가 하늘을 납니다.");
}
public void land() {
System.out.println("새가 착륙합니다.");
}
}
5. 인터페이스에 변수를 선언하는 경우
- 변수 선언시 형식에 관계 없이 자동으로 상수로 선언된다.
- public static final 로 선언된다.
- static 으로 선언되기 때문에 구현체 없이도 활용 가능하다.
- 인터페이스는 표준의 역할이므로 변수선언은 최소화하는 것이 좋다.
public interface Config {
int POPULATION = 100; // public static final 로 선언됩니다.
}
public class Main {
public static void main(String[] args) {
System.out.println(Config.POPULATION);
}
}
6. 실습과제
다양한 가전제품을 일관된 방식으로 조작할 수 있는 인터페이스를 설계하세요.
- 가전제품 종류: Tv, 에어컨, 컴퓨터
- turnOn(); → 기기를 켜는 기능
- turnOff(); → 기기를 끄는 기능
- 각 가전제품의 기능을 확장해보세요.
(강의 자료)
// 📌 가전제품의 기본 기능을 정의한 인터페이스
interface ElectronicDevice {
void turnOn(); // 전원 켜기 기능
void turnOff(); // 전원 끄기 기능
}
// ✅ TV 클래스 (ElectronicDevice 구현)
class TV implements ElectronicDevice {
@Override
void turnOn() {
System.out.println("TV 전원이 켜졌습니다.");
}
@Override
void turnOff() {
System.out.println("TV 전원이 꺼졌습니다.");
}
// 추가 기능 (인터페이스에는 없는 기능)
void changeChannel() {
System.out.println("채널을 변경합니다.");
}
}
// ✅ 에어컨 클래스 (ElectronicDevice 구현)
class AirConditioner implements ElectronicDevice {
@Override
void turnOn() {
System.out.println("에어컨이 가동됩니다.");
}
@Override
void turnOff() {
System.out.println("에어컨이 꺼졌습니다.");
}
// 추가 기능 (인터페이스에는 없는 기능)
void setTemperature() {
System.out.println("온도를 설정합니다.");
}
}
// ✅ 세탁기 클래스 (ElectronicDevice 구현)
class WashingMachine implements ElectronicDevice {
@Override
void turnOn() {
System.out.println("세탁기가 작동을 시작합니다.");
}
@Override
void turnOff() {
System.out.println("세탁기가 작동을 멈춥니다.");
}
// 추가 기능 (인터페이스에는 없는 기능)
void setTime() {
System.out.println("세탁 시간을 설정합니다.");
}
}
public class Main {
public static void main(String[] args) {
// ✅ 가전제품 객체 생성
TV tv = new TV();
AirConditioner airConditioner = new AirConditioner();
WashingMachine washingMachine = new WashingMachine();
// ✅ 개별적으로 전원 켜기
System.out.println("🔌 가전제품을 켭니다.");
tv.turnOn();
airConditioner.turnOn();
washingMachine.turnOn();
System.out.println(); // 줄바꿈
// ✅ 추가 기능 사용
tv.changeChannel();
airConditioner.setTemperature();
washingMachine.setTime();
System.out.println(); // 줄바꿈
// ✅ 개별적으로 전원 끄기
System.out.println("🔌 가전제품을 끕니다.");
tv.turnOff();
airConditioner.turnOff();
washingMachine.turnOff();
}
}
'Java > 강의' 카테고리의 다른 글
[📙 Java 문법 종합반] 객체지향 PART 2 - 상속 (0) | 2025.04.15 |
---|---|
[📙 Java 문법 종합반] 2-7. 객체지향 PART 1 - 캡슐화(접근제어자) (0) | 2025.04.15 |
[📙 Java 문법 종합반] 2-5. final - 변하지 않는 값 (0) | 2025.04.15 |
[📙 Java 문법 종합반] 2-4. static - 클래스가 공유하는 공간 (0) | 2025.04.15 |
[📙 Java 문법 종합반] 2-3. 래퍼클래스(기본형 참조형) (0) | 2025.04.15 |