Interface
- 인터페이스는 메소드의 틀만 정의하고, 구현체는 없는 상태에서 받아들인다.
interface 인터페이스 이름 {
public static final float pi = 3.14F;
public void makeSomething();
}
- 모든 변수는 상수로 선언된다 - public static final
- 모든 메서드가 추상 메서드로 선언된다 - public abstract
인터페이스의 핵심 원리
- 인터페이스는 클래스와 같은 타입이다.
- 클래스와 다르게 인터페이스는 상속이 아닌 구현을 통해 사용된다.
- 인터페이스는 구현부가 없는 추상 메소드를 가지고 있어, 클래스가 인터페이스를 구현하면 해당 추상 메소드를 반드시 구현해야 한다.
- 하나의 클래스는 여러 개의 인터페이스를 구현할 수 있다.
- 타입 상속을 통해 인터페이스를 구현한 클래스들이 동일한 타입으로 취급될 수 있으며, 이를 이용해 다형성(Polymorphism)을 구현할 수 있다.
인터페이스는 왜 사용하나?
- 인터페이스는 클래스나 프로그램이 제공하는 기능을 추상적으로 선언하여 연결점을 제공합니다.
- 자바에서는 인터페이스를 통해 명세를 제공하여, 클래스나 프로그램이 제공하는 기능에 대해 어떤 기능을 제공하는지, 어떻게 구현되었는지, 어떤 변수와 반환을 하는지 알 수 있습니다.
- 객체가 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 것을 의미합니다.
- 인터페이스는 모듈로 제공되며, 동일한 인터페이스를 사용하여 모듈을 교체할 수 있습니다.
예시
- JDBC 인터페이스
- SQL, Oracle, MySQL 등으로 여러 가지 SQL로 구현을 할 수 있습니다.
- Connection은 코드를 보면 인터페이스입니다. 구현 코드가 하나도 없습니다.
- Connection에 대해 어떤 기능을 제공하는지는 오라클이나 MySQL 등에서 지원을 합니다.
Example
// 인터페이스 선언
interface Shape {
double getArea();
}
// 인터페이스를 구현한 클래스
class Rectangle implements Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getArea() {
return width * height;
}
}
// 인터페이스를 구현한 다른 클래스
class Circle implements Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getArea() {
return Math.PI * radius * radius;
}
}
// 테스트 코드
public class Main {
public static void main(String[] args) {
Shape rect = new Rectangle(5, 10);
Shape circle = new Circle(7);
System.out.println("The area of rectangle is " + rect.getArea());
System.out.println("The area of circle is " + circle.getArea());
}
}
예시에서 Shape
인터페이스는 도형의 면적을 구하기 위한 메소드 getArea()
를 선언합니다.
Rectangle
클래스와 Circle
클래스는 Shape
인터페이스를 구현하여 각 도형의 면적을 계산하는 getArea()
메소드를 구현합니다.
Main
클래스에서는 Shape
인터페이스를 구현한 클래스의 객체를 생성하여 면적을 출력합니다.
이렇게 인터페이스를 사용하면 여러 클래스에서 동일한 메소드를 구현하므로 유지보수가 용이해지고, 다형성을 이용하여 다양한 객체를 사용할 수 있습니다.
레퍼런스
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Java' 카테고리의 다른 글
Java의 내부 클래스 - 🐥 카카오 테크 캠퍼스 (0) | 2023.05.02 |
---|---|
Interface의 활용 - 🐥 카카오 테크 캠퍼스 (0) | 2023.04.28 |
타입 상속 (0) | 2023.04.27 |
추상클래스(Abstract Class) (1) | 2023.04.27 |
프레임워크와 라이브러리의 차이 (0) | 2023.04.27 |