인터페이스(Interface)는 자바에서 다양한 클래스들이 특정 메서드들을 구현하도록 강제하는 역할을 하는 추상형(abstract type)입니다.
1. 인터페이스의 정의
인터페이스는 interface 키워드를 사용하여 정의됩니다. 인터페이스 내에는 추상 메서드, 상수, 디폴트 메서드, 정적 메서드가 포함될 수 있습니다.
interface MyInterface {
// 추상 메서드
void myMethod();
// 상수 (public static final이 생략됨)
int MY_CONSTANT = 42;
// 디폴트 메서드 (Java 8 이후)
default void defaultMethod() {
// 구현
}
// 정적 메서드 (Java 8 이후)
static void staticMethod() {
// 구현
}
}
2. 인터페이스의 구현
클래스에서 인터페이스를 구현하려면 implements 키워드를 사용합니다. 클래스는 여러 개의 인터페이스를 동시에 구현할 수 있습니다.
class MyClass implements MyInterface {
public void myMethod() {
// 구현
}
}
3. 다중 상속
자바에서는 클래스는 하나의 클래스만을 상속할 수 있지만, 인터페이스는 다중 상속이 가능합니다. 클래스가 여러 인터페이스를 구현할 수 있습니다.
interface Interface1 {
void method1();
}
interface Interface2 {
void method2();
}
class MyClass implements Interface1, Interface2 {
public void method1() {
// 구현
}
public void method2() {
// 구현
}
}
4. 추상 메서드
인터페이스의 메서드는 기본적으로 추상 메서드이며, 본체를 가지지 않습니다. 하위 클래스에서 반드시 이를 구현해야 합니다.
interface MyInterface {
void myMethod();
}
class MyClass implements MyInterface {
public void myMethod() {
// 구현
}
}
5. 상수
인터페이스 내에서 선언된 변수는 자동으로 public, static, final 속성을 갖습니다. 이는 상수로 사용됩니다.
interface MyInterface {
int MY_CONSTANT = 42;
}
6. 디폴트 메서드와 정적 메서드
Java 8부터는 인터페이스에 디폴트 메서드와 정적 메서드를 정의할 수 있게 되었습니다.
- 디폴트 메서드 : default 키워드를 사용하여 메서드를 구현할 수 있습니다. 구현하지 않아도 되며, 하위 클래스에서 재정의할 수 있습니다.
- 정적 메서드 : static 키워드를 사용하여 정적 메서드를 정의할 수 있습니다. 인터페이스를 통해 직접 호출할 수 있습니다.
interface MyInterface {
default void defaultMethod() {
// 구현
}
static void staticMethod() {
// 구현
}
}
7. 함수형 인터페이스
Java 8부터는 람다 표현식을 지원하기 위해 하나의 추상 메서드만을 갖는 인터페이스를 함수형 인터페이스(Functional Interface)라고 합니다. @FunctionalInterface 애노테이션을 통해 확인할 수 있습니다.
@FunctionalInterface
interface MyFunctionalInterface {
void myMethod();
}
8. 인터페이스의 활용
인터페이스는 다형성을 지원하고, 클래스 간의 결합도를 낮춰서 유연하고 확장 가능한 코드를 작성하는 데 기여합니다. 코드의 재사용성을 증가시키며, 각 클래스가 특정 행동을 제공하기 위해 어떤 메서드를 구현해야 하는지 명시적으로 정의합니다.
interface Eater {
void eat();
}
class Person implements Eater {
public void eat() {
// 구현
}
}
class Animal implements Eater {
public void eat() {
// 구현
}
}
자바 인터페이스는 자바의 객체지향 프로그래밍에서 중요한 역할을 하며, 유연하고 확장 가능한 코드를 작성하는 데 큰 도움을 줍니다. 추상 클래스와 비교하면서 해당 개념을 더 잘 이해할 수 있습니다.
With ChatGPT
'JAVA > 포스팅' 카테고리의 다른 글
자바 내부 클래스의 특징 (0) | 2023.11.13 |
---|---|
자바 내부 클래스(inner class) (0) | 2023.11.13 |
자바 인터페이스의 장점 (0) | 2023.11.13 |
자바 인터페이스를 이용한 다형성 (0) | 2023.11.13 |
자바 인터페이스를 이용한 다중상속 (0) | 2023.11.13 |