자바에서 인터페이스란?
: 클래스가 구현해야 하는 메서드들의 집합을 정의하는 일종의 템플릿
- 객체의 동작을 명시하는 역할을 한다.
- 해당 인터페이스를 구현하는 클래스는 그 안에 선언된 모든 메서드를 반드시 구현해야 한다.
특징
- 인터페이스 안에는 기본적으로 구현되지 않은 추상 메서드들이 정의된다. 메서드들은 선언만 되어 있고 실제 구현은 인터페이스를 구현하는 클래스에서 이루어진다.
- 자바 클래스는 여러 인터페이스를 구현할 수 있다. 이를 통해 다형성을 높이고 클래스가 다양한 행동을 가질 수 있게 한다.
- 인터페이스 안에 선언된 변수는 암묵적으로 public, static, final 로 간주되며 상수로 동작한다.
- 인터페이스는 다른 인터페이스를 상속할 수 있으며 여러 인터페이스로부터 상속받아 새로운 인터페이스를 정의할 수 있다.
인터페이스의 필요성
- 표준화와 일관성 유지 - 인터페이스는 클래스들이 동일한 메서드 시그니처를 가지도록 강제한다.
- 다형성 지원 - 여러 클래스가 같은 인터페이스를 구현하면 그 클래스들은 해당 인터페이스 타입으로 다룰 수 있다.
- 유연한 설계 - 서로 다른 클래스들이 상속 관계 없이 동일한 기능을 제공할 수 있다.
- 다중 구현 - 하나의 클래스가 여러 역할이나 기능을 가질 수 있게 되어 더욱 복잡한 동작을 구현할 수 있다.
- 의존성 감소 - 한 클래스가 다른 클래스의 구체적은 구현에 의존하지 않고 그 클래스가 구현한 인터페이스에 의존하게 된다.
인터페이스와 추상클래스의 비교
목적 | 동작(메서드) 정의를 강제 | 공통된 동작 및 상태 공유 |
상속/구현 가능성 | 여러 인터페이스 구현 가능 | 단일 추상 클래스 상속만 가능 |
메서드 유형 | 추상 메서드, default, static 메서드 | 추상 메서드와 구현된 메서드 |
필드 | 상수만 허용 (public, static, final) | 인스턴스 변수 포함 가능 |
다형성 | 높은 유연성 | 다형성은 제한적 |
인터페이스 - 서로 관련 없는 클래스들이 동일한 동작을 구현하게 하려는 경우에 적합
추상 클래스 - 관련 있는 클래스들 간에 공통된 속성이나 동작을 공유하면서 부분적인 구현을 제공하려는 경우에 적합
인터페이스 사용 예
인터페이스 IAnimal
public interface IAnimal {
String bike(); // 인터페이스 사용 시 추상메소드 취급
}
IAnimal을 상속받은 Cat, Dog, Cow
public class Cat implements IAnimal{ // IAnimal 인터페이스를 상속 받음
public String bike() {
return "야옹야옹!";
}
}
public class Dog implements IAnimal{
public String bike() {
return "멍멍멍멍!";
}
}
public class Cow implements IAnimal{
public String bike() {
return "음메음메";
}
}
테스트 코드
import java.util.Scanner;
public class InterfaceTest_01 {
static String answer;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 인터페이스 테스트
do{
System.out.print("동물 선택 고양이(0), 강아지(1), 소(2) : ");
int kind = sc.nextInt();
IAnimal ia = getBikeKind(kind);
System.out.println(ia.bike()); // 선택된 동물의 울음소리
System.out.print("\n계속하시겠습니까? (Y/N) ");
answer = sc.next();
} while(answer.equalsIgnoreCase("Y"));
}
// 인터페이스 형의 메소드 구현
public static IAnimal getBikeKind(int kind) {
IAnimal ia = null;
switch (kind) {
case 0 :
ia = new Cat();
break;
case 1 :
ia = new Dog();
break;
case 2:
ia = new Cow();
break;
}
return ia;
}
}
-> Cat, Dog, Cow를 IAnimal 인터페이스로 한 번에 다룰 수 있다. bike() 를 실행하더라도 각자 동물에 맞는 울음소리가 출력된다.
'JAVA > 기초공부' 카테고리의 다른 글
[JAVA] java.lang 패키지 내의 주요 클래스들 (1) | 2024.10.13 |
---|---|
[JAVA] 예외처리 (0) | 2024.10.13 |
[JAVA] 추상 클래스 (5) | 2024.10.09 |
[JAVA] 형 변환, static, final (2) | 2024.10.09 |
[JAVA] 접근 제한자 (11) | 2024.10.03 |