728x90
인터페이스의 역할
📌인터페이스
- 인터페이스는 두 객체를 연결해주는 다리 역할을 해줍니다.
- 사람과 삼성티비, 엘지티비 객체가 존재한다고 생각해 보겠습니다.
- 사람 객체는 멀티 리모컨 인터페이스를 통해서 삼성티비 객체의 채널을 변경할 수 있습니다.
- 이때 삼성티비가 아니라 엘지티비로 객체가 교체된다고 해도 채널을 변경할 수 있습니다.
- 상속 관계가 없는 다른 클래스들이 서로 동일한 행위 즉, 메서드를 구현해야할 때 인터페이스는 구현 클래스들의 동일한 사용 방법과 행위를 보장해 줄 수 있습니다.
- 인터페이스는 스팩이 정의된 메서드들의 집합입니다.
- 인터페이스의 구현 클래스들은 반드시 정의된 메서드들을 구현해야합니다.
- 따라서 구현 클래스들의 동일한 사용 방법과 행위를 보장해 줄 수 있습니다.
- 이러한 특징은 인터페이스에 다형성을 적용할 수 있게 만들어 줍니다.
인터페이스 선언
📌 interface 키워드를 사용하여 인터페이스를 선언할 수 있습니다.
public interface 인터페이스명 {
}
- 인터페이스는 클래스와 마찬가지로 public, default 접근 제어자를 지정할 수 있습니다.
인터페이스 구성
📌 인터페이스의 멤버
- 모든 멤버변수는 public static final 이어야합니다.
- 생략 가능합니다.
- 모든 메서드는 public abstract 이어야합니다.
- 생략 가능합니다. (static 메서드와 default 메서드 예외)
- 생략되는 제어자는 컴파일러가 자동으로 추가 해줍니다.
public interface 인터페이스명 {
public static final char A = 'A';
static char B = 'B';
final char C = 'C';
char D = 'D';
void turnOn(); // public abstract void turnOn();
}
인터페이스 구현
📌 인터페이스는 추상 클래스와 마찬가지로 직접 인스턴스를 생성할 수 없기 때문에 클래스에 구현되어 생성됩니다.
- implements 키워드를 사용하여 인터페이스를 구현할 수 있습니다.
public class 클래스명 implements 인터페이스명 {
// 추상 메서드 오버라이딩
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}
- 인터페이스의 추상 메서드는 구현될 때 반드시 오버라이딩 되어야 합니다.
- 만약 인터페이스의 추상 메서드를 일부만 구현해야 한다면 해당 클래스를 추상 클래스로 변경해주면 됩니다.
인터페이스 상속
📌 인터페이스간의 상속이 가능합니다.
- 인터페이스간의 상속은 implements 가 아니라 extends 키워드를 사용합니다.
- 인터페이스는 클래스와는 다르게 다중 상속이 가능합니다.
public class Main implements C {
@Override
public void a() {
System.out.println("A");
}
@Override
public void b() {
System.out.println("B");
}
}
interface A {
void a();
}
interface B {
void b();
}
interface C extends A, B { }
- 인터페이스 C는 아무것도 선언 되어있지 않지만 인터페이스 A, B를 다중 상속받았기 때문에 추상 메서드 a, b를 갖고 있는 상태입니다. (일반클래스는 다중상속 지원 x)
- 따라서 Main 클래스에서 인터페이스 C가 구현될 때 a, b 추상 메서드가 오버라이딩됩니다.
- 또한 인터페이스의 구현은 상속과 함께 사용될 수 있습니다.
public class Main extends D implements C {
@Override
public void a() {
System.out.println("A");
}
@Override
public void b() {
System.out.println("B");
}
@Override
void d() {
super.d();
}
public static void main(String[] args) {
Main main = new Main();
main.a();
main.b();
main.d();
}
}
interface A {
void a();
}
interface B {
void b();
}
interface C extends A, B {
}
class D {
void d() {
System.out.println("D");
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 인터페이스 다형성 (0) | 2023.06.01 |
---|---|
[JAVA] 디폴트 메서드와 static 메서드 (0) | 2023.06.01 |
[JAVA] 추상 클래스 (0) | 2023.06.01 |
[JAVA] instanceof (0) | 2023.06.01 |
[JAVA] 다형성 (polymorphism) (0) | 2023.06.01 |