인터페이스(Interface)
- 인터페이스란 객체와 객체를 연결하는 접속부 역할을 하는 요소를 뜻합니다.
- 인터페이스는 구체화 되지 않은 객체로 추상 클래스와 유사한 특성을 가지고 있습니다.
- 인터페이스는 필요에 따라 연결된 객체를 다른 객체로 교체해야할 때 유용하게 쓰입니다.
- 인터페이스를 사용하기 위해서는 다른 클래스에서 구현(상속)하여 사용해야 합니다.
- 이 때 인터페이스에서 선언한 메서드의 선언부는 구현되는 클래스에서 반드시 완성되어야 합니다.
- 따라서 같은 인터페이스를 구현한 클래스는 인터페이스를 통해 상황에 맞춰 오버라이딩 된 메서드를 호출할 수 있게 됩니다.
- 구현 해야 할 메서드들이 미리 선언되어 있기 때문에 이를 구현하는 클래스의 사용법을 가이드 해줄 수 있습니다.
- 또한 인터페이스는 추상 클래스와 달리 다중 상속이 가능하여 복수의 객체를 상속받아야 할 때 활용할 수 있습니다.
인터페이스의 선언
- 인터페이스는 class 대신에 interface 라는 예약어를 입력하여 통해 선언할 수 있습니다.
- 인터페이스는 .java 형태의 소스 파일로 작성되고, .class 형태로 컴파일 되기 때문에 물리적 형태는 클래스와 동일합니다.
- 인터페이스는 아래와 같은 요소들을 멤버로 가질 수 있습니다.
- 상수
- 추상 메서드
- 기본 메서드
- 정적 메서드
인터페이스 선언 방법
접근제어자 interface 인터페이스이름 {
인터페이스의 멤버 선언부
// 상수, 추상 메서드, 디폴트 메서드, 정적 메서드
}
인터페이스 사용 예시
// 걷는 기능을 가지는 인터페이스 선언
public interface Walkable {
// 걷기 시작하는 메서드 선언
void startWalk();
// 뛰기 시작하는 메서드 선언
void startRun();
// 멈추는 메서드 선언
void stopMove();
}
인터페이스의 구현
- 인터페이스는 상속이 아닌 구현(implements)라는 용어를 사용합니다.
- 클래스의 상속과 마찬가지로 클래스의 선언 뒤에 implements 예약어를 사용하여 인터페이스의 구현을 선언할 수 있습니다.
- 인터페이스를 구현하는 클래스는 인터페이스에서 선언한 추상 메서드를 반드시 모두 구현해야합니다.
인터페이스 구현 방법
// 구현 인터페이스가 하나일 경우
접근제어자 class 클래스이름 implements 인터페이스이름 {
클래스 구현부
// 구현을 선언한 인터페이스 메서드를 반드시 구현해줘야 함
}
// 구현 인터페이스가 복수일 경우
접근제어자 class 클래스이름 implements 인터페이스이름1, 인터페이스이름2, ... {
클래스 구현부
// 구현을 선언한 인터페이스의 메서드는 반드시 구현해줘야 함
}
인터페이스 구현 예시
// 걷는 기능을 가지는 인터페이스 선언
public interface Walkable {
// 걷기 시작하는 메서드 선언
void startWalk();
// 뛰기 시작하는 메서드 선언
void startRun();
// 멈추는 메서드 선언
void stopMove();
}
// Walkable을 구현하는 Human 클래스 구현
public class Human implements Walkable {
// 클래스 필드
// 클래스 생성자
// 메서드
@Override
public void startWalk() {
System.out.println("사람이 두 발로 걷기 시작합니다.");
}
@Override
public void startRun() {
System.out.println("사람이 두 발로 뛰기 시작합니다.");
}
@Override
public void stopWalk() {
System.out.println("사람이 멈춥니다.");
}
}
// Walkable을 구현하는 Dog 클래스 구현
public class Dog implements Walkable {
// 클래스 필드
// 클래스 생성자
// 메서드
@Override
public void startWalk() {
System.out.println("개가 네 발로 걷기 시작합니다.");
}
@Override
public void startRun() {
System.out.println("개가 네 발로 뛰기 시작합니다.");
}
@Override
public void stopWalk() {
System.out.println("개가 멈춥니다.");
}
}
인터페이스 타입 변수 선언 및 구현 객체 대입
- 인터페이스도 하나의 참조 자료형이기 때문에 변수의 타입으로 선언할 수 있습니다.
- 하지만 인터페이스는 추상적인 자료형으로 스스로 인스턴스를 생성할 수 없습니다.
- 따라서 인터페이스형 변수에 값을 대입하기 위해서는 인터페이스를 구현한 클래스이거나 null이여야 합니다.
- 해당 인터페이스를 구현한 클래스의 인스턴스라면 피구현 인터페이스로 선언한 변수에 모두 대입될 수 있습니다.
인터페이스형 변수 선언 및 대입 예시
// Walkable을 구현한 Human 선언
public class InterfaceExample {
public static void main(String[] args) {
// 인터페이스형 변수 선언
// 변수에 Human의 인스턴스 대입
// 사람이 두 발로 걷기 시작합니다. 출력
Walkable walker;
walker = new Human();
walker.startWalk();
// 다른 구현 클래스도 대입 가능
// 개가 네 발로 걷기 시작합니다. 출력
walker = new Dog();
walker.startWalk();
}
}
'Programing Language > Java' 카테고리의 다른 글
[Java] 중첩 클래스(Nested Class) (0) | 2022.07.08 |
---|---|
[Java] 인터페이스의 요소(Member of Interface) (0) | 2022.07.08 |
[Java] 인터페이스의 상속 및 다형화(Interface Inheritance & Polymorphism) (0) | 2022.07.06 |
[Java] 추상 제어자와 추상 클래스(Abstract Modifier & Abstract Class) (0) | 2022.07.04 |
[Java] 클래스의 추상화(Abstraction) (0) | 2022.07.04 |