IT 개발/Java
[Java] 자바 - 인터페이스(interface)의 이해 및 사용하는 이유
KADOSHOLY
2022. 7. 1. 23:16
반응형
자바 - 인터페이스(interface)의 이해 및 사용하는 이유
자바의 추상클래스에 이어 이번에는 상수와 추상메소드만으로 이루어진 인터페이스에 대해서 알아보도록 하겠습니다.
목차
- 인터페이스란?
- 인터페이스 특징
- 인터페이스 장점 및 사용이유
- default메소드 및 static메소드
- 인터페이스 사용예시
1. 인터페이스(interface)란?
인터페이스란? 클래스에서 특정 기능(메소드)을 구현하도록 강제 할 수 있는 기능으로 다음과 같은 특징을 가지고 있습니다.
1) 인터페이스 특징
- 인터페이스는 interface 키워드를 사용하여 정의합니다.
- 인터페이스는 상수와 추상메소드로 구성되어 있습니다. (자바8부터 default 메소드와 static 메소드 사용가능)
- 인터페이스 안의 모든 상수는 public static final 타입입니다. (생략가능)
- 인터페이스 안의 모든 추상메소드는 abstract public 타입니다. (생략가능)
- 추상클래스와 마찬가지로 인스턴스를 생성할 수 없습니다.
- 인터페이스는 레퍼런스 변수의 인터페이스 타입으로 사용될 수 있습니다.
- 인터페이스는 다른 인터페이스를 extends 키워드로 상속 받을 수 있으며, 다중 상속이 가능합니다.
- 클래스에서 인터페이스의 구현은 implements 키워드를 사용하여 구현할 인터페이스를 지정후, 추상메소드를 모두 오버라이드 하여 내용을 완성 하여야 합니다.
2) 인터페이스 장점 및 사용이유
- 인터페이스를 구현한 클래스들을 하나의 인터페이스 타입으로 다룰 수 있습니다. (인터페이스 멤버만 사용 가능)
- 기능(메소드)의 구현을 강제함으로써, 클래스의 설계 또는 표준화를 유도 할 수 있습니다.
3) default 메소드 및 static 메소드
- 자바8부터 인터페이스에 default 메소드와 static 메소드를 추가할 수 있습니다.
- 인터페이스가 여러곳에서 사용되고 있는 상황에서 새로운 추상메소드를 추가할 경우, 모든 곳에서 오버라이드를 해주어야 하는 번거로움있습니다. 이에 대한 대응책으로 인터페이스에서도 구현부를 가질 수 있는 default 메소드를 활용할 수 있습니다.
- interface는 다중상속이 가능하기 때문에, default 메소드 이름이 충돌할수 있습니다. 이때는 해당 이름의 메소드를 오버라이드하여 재정의후 사용하시면 됩니다.
- interface 안에 default 메소드는 아래와 같이 { } 안에 실행문을 사용할 수 있습니다.
interface Attakable {
default void basicAttack( ) {
System.out.println("공격");
}
}
2. 인터페이스 사용예시
1) 클래스 정의
public class Human { // Human 클래스 정의
String name;
public void speak() {
System.out.println(name + ": 안녕하세요");
}
}
interface Attackable { // Attackable 인터페이스 정의
abstract public void attack();
}
class Archer extends Human implements Attackable { // Archer 클래스정의 (Human상속, Attackable구현)
@Override
public void attack() {
System.out.println(name + ": 공격합니다.");
}
}
2) 객체 생성 및 사용
public class HelloWorld {
public static void main(String[] args) {
Archer a1 = new Archer(); // Archer 클래스 타입
a1.name = "궁수1";
a1.speak();
a1.attack();
Attackable a2 = new Archer(); // Attackable 인터페이스 타입
// a2.name = "궁수2"; // 사용불가
// a2.speak(); // 사용불가
a2.attack();
}
}
3) 실행결과
궁수1: 안녕하세요
궁수1: 공격합니다.
null: 공격합니다.
반응형