자바의 인터페이스(Interface)는 객체 지향 프로그래밍에서 여러 클래스들이 공통된 동작을 공유할 수 있도록 정의한 규약입니다. 인터페이스는 클래스 사이의 표준 과정을 확립하여 코드의 가독성과 확장성을 높여주며, 객체 지향 프로그래밍의 원칙 중 하나인 코드의 재사용성을 지키는데 도움이 됩니다. 이번 글에서는 자바의 인터페이스에 대해 더 자세히 알아보고, 예제 코드를 통해 기능을 이해해 보겠습니다.
1. 인터페이스의 개념 및 장점
인터페이스는 자바에서 키워드 'interface'를 사용하여 선언되며, 모든 메서드가 추상 메서드(abstract method)로 구성되어 있습니다. 인터페이스를 상속 받은 클래스는 해당 인터페이스에 선언된 메서드를 모두 구현해야 합니다. 인터페이스 사용 시 다음과 같은 장점들이 있습니다.
- 코드의 재사용성
공통된 동작을 인터페이스로 모듈화하면, 여러 클래스에서 해당 인터페이스를 구현할 수 있고 코드를 중복되게 작성할 필요가 없습니다. - 확장성
새로운 기능이 추가되거나 변경되어야 할 경우, 인터페이스만 수정하여 관련된 클래스들에게 쉽게 변경점을 전달할 수 있습니다. - 다형성
인터페이스를 구현한 클래스의 인스턴스를 인터페이스 타입으로 참조할 수 있어, 다양한 클래스들을 하나의 인터페이스로 관리할 수 있습니다.
2. 자바 인터페이스 구현 및 사용
자바에서 인터페이스를 구현하고 사용하기 위해서는 다음과 같은 과정들을 거칩니다.
인터페이스 선언
클래스에서 인터페이스 구현
예제로 설명하면 아래와 같습니다.
// 인터페이스 정의
interface Flyable {
void fly(); // 모든 클래스가 구현해야 하는 추상 메서드
}
// 인터페이스를 구현하는 클래스 정의
class Bird implements Flyable {
@Override
void fly() {
System.out.println("새가 날아갑니다!");
}
}
class Airplane implements Flyable {
@Override
void fly() {
System.out.println("비행기가 이륙합니다!");
}
}
public class Main {
public static void main(String[] args) {
Bird bird = new Bird(); // 구현된 Bird 클래스 사용
Airplane airplane = new Airplane(); // 구현된 Airplane 클래스 사용
bird.fly(); // "새가 날아갑니다!"
airplane.fly(); // "비행기가 이륙합니다!"
}
}
위의 예제에서 Flyable은 인터페이스이며, Bird와 Airplane은 서로 다른 클래스지만 Flyable 인터페이스를 구현합니다. 이를 통해 새로운 날 수 있는 객체를 추가할 때 기존 코드를 수정하지 않고 간단하게 애플리케이션에 새로운 기능을 추가할 수 있습니다.
3. 인터페이스 예제
결제 방식을 나타내는 인터페이스를 정의하고, 여러 종류의 결제 방식 클래스를 구현해보겠습니다. 해당 인터페이스는 결제 금액과 결제 방식에 대한 정보를 출력하는 메서드를 구현할 것입니다.
// 인터페이스 정의
interface Payment {
void pay(int amount);
}
// 인터페이스를 구현하는 클래스 정의
class CreditCard implements Payment {
@Override
void pay(int amount) {
System.out.println(amount + "원을 신용카드로 결제합니다.");
}
}
class Cash implements Payment {
@Override
void pay(int amount) {
System.out.println(amount + "원을 현금으로 결제합니다.");
}
}
public class Main {
public static void main(String[] args) {
CreditCard creditCard = new CreditCard(); //구현된 CreditCard 클래스 사용
Cash cash = new Cash(); // 구현된 Cash 클래스 사용
creditCard.pay(10000); // "10000원을 신용카드로 결제합니다."
cash.pay(5000); // "5000원을 현금으로 결제합니다."
}
}
자바 인터페이스를 통해 프로젝트의 규모가 커져도 코드의 유연성과 확장성을 향상시킬 수 있으며, 객체 지향 프로그래밍의 핵심 원칙을 준수하게 됩니다.
'Programming > Java' 카테고리의 다른 글
자바의 입출력 (0) | 2023.08.02 |
---|---|
자바의 내부 클래스 (0) | 2023.08.01 |
자바의 추상 클래스 (0) | 2023.07.30 |
자바의 다형성 (0) | 2023.07.29 |
자바의 상속 (0) | 2023.07.28 |