▶ 인터페이스란?
- 인터페이스에 대한 사전적 정의는 사물 간 또는 사물과 인간사이의 의사소통이 가능하도록 일시적 혹은 영구적 접근을 목적으로 만들어진 물리적, 가상적 매체를 의미한다.
- 인터페이스는 특정 기능을 수행하기 위해 선언된 함수들의 집합이다.
▶ 인터페이스의 특징
- 클래스와 extends가 아닌 implements로 상속 관계를 맺는다.
- 변수를 포함할 수 없다. 단, 상수는 정의 가능하다.
- 인터페이스는 명세를 표현하는 장치이고 구현은 클래스가 한다.
- default 메소드 : 인터페이스의 메소드 중 하나는 일반 클래스의 메소드처럼 동작이 정의 될 수 있다.
default 메소드를 활용하면 자바에서도 메소드 다중상속을 잘 활용할 수 있다.
- 인터페이스는 하나 이상 상속받을 수 있다. 따라서 인터페이스는 다중 상속이 가능하다.
- 클래스는 클래스도 상속 받고 동시에 인터페이스도 상속받을 수 있다.
▶ 추상클래스와 인터페이스의 차이점
1. 인터페이스는 추상메소드(abstract method)와 상수(FINAL) 필드만 갖는다.
추상클래스는 추상메소드(abstract method)와 메소드, 상수(FINAL)와 변수 필드 모두 가질 수 있다.
2. 인터페이스는 implements로 다중 상속이 가능하다.
추상클래스는 extends로 다중 상속이 불가능하다.
3. 인터페이스는 상속받는 클래스들이 각자 다른 슈퍼클래스를 갖더라도 필요한 기능이 같을 때 사용한다.
(조상클래스들이 연관이 없어도 같은 기능이 필요하다면 인터페이스를 사용할 수 있다.
추상클래스는 상속관계의 클래스들이 공통적으로 갖는 기능들을 추상화해 놓은것으로
연관관계를 가지고 있는 슈퍼클래스가 가진 메소드들을 상속받아 기능을 구현해야할 때 사용할 수 있다.
▶ 추상클래스와 인터페이스의 유사점
1. 객체를 생성할 수 없다.
2. 상속을 위한 슈퍼 클래스로만 사용된다.
3. 클래스의 다형성, 재생산성을 실현하기 위한 목적을 가진다.
▶ 인터페이스 예제
interface PhoneInterface{
//인터페이스에서 선언되는 필드 변수는 모두 상수 변수(final)이다
final int TIMEOUT = 10000;
void sendCall();
void receiveCall();
default void printLogo() { //default메소드, interface 내부에 메소드
//인터페이스의 메소드 중 하나는 일반 클래스의 메소드 처럼 동작이 정의될 수 있음
System.out.println("**phone**");
}
}
//인터페이스의 구현은 implements 키워드를 활용
class SamsungPhone implements PhoneInterface {
//PhoneIntherface의 모든 추상 메소드 구현
@Override
public void sendCall() {
System.out.println("띠리리리링");
}
@Override
public void receiveCall() {
System.out.println("전화가 왔습니다");
}
public void flash() {
System.out.println("전화기에 불이 켜졌습니다");
}
}
public class Ex11 {
public static void main(String[] args) {
SamsungPhone phone = new SamsungPhone();
phone.printLogo(); //상속받은 인터페이스의 default메소드 바로 사용가능
phone.sendCall();
phone.receiveCall();
phone.flash();
}
}
예제처럼 인터페이스틀은 추상클래스와 유사하지만 인터페이스는 class가 아닌 interface로 정의된다.
default 메소드를 활용하면 메소드 중 하나는 일반 클래스의 메소드처럼 동작이 정의되며 상속받은 클래스 객체에서 바로 사용이 가능하다.
보통 실무에서는 추상클래스보다는 인터페이스가 더 많이 쓰인다고 한다.
'JAVA' 카테고리의 다른 글
java 제네릭(Generic)이란? (0) | 2022.03.26 |
---|---|
java 래퍼클래스(Wrapper class)란? (0) | 2022.03.24 |
java 추상클래스(abstract class) +추상메소드 목적 (0) | 2022.03.19 |
[JAVA] StringTokenizer 문자열 분리하기 (+hasMoreTokens 로 출력) (0) | 2022.03.17 |
JAVA 업캐스팅과 다운캐스팅 (+동적바인딩, 정적바인딩) (0) | 2022.03.16 |
댓글