⚡️interface란
자바에서는 상속 기능으로 편리하게 부모 클래스의 기능을 물려받아 사용할 수 있습니다.
그리고 그 상속은 클래스로도 구현이 가능하지만 인터페이스를 통해 더 다양한 기능들을 구현 가능합니다.
인터페이스는 클래스와 굉장히 비슷하지만 둘을 구분 지을 몇 가지의 큰 특징이 있는데,
그중 특히 인터페이스는 클래스와 달리 다중 상속이 가능하다는 점을 알아두셔야 합니다.
그럼 인터페이스를 아래 순서대로 알아보겠습니다.
- 인터페이스의 선언
- 인터페이스의 구현
- 인터페이스의 다중상속
⚡️interface 선언
인터페이스의 멤버로는 상수와 추상 메소드, default 메소드, static 메소드가 있습니다.
클래스와 달리 변수 생성이 불가능한 인터페이스는 필드 선언 시 아래와 같이 키워드를 생략해서 생성이 가능합니다.
interface 인터페이스명{ // abstract 생략
// public static final 제어자 생략
int 상수명 = 100;
// public abstract 제어자 생략
void 메소드명(매개변수);
}
클래스와 달리 인터페이스는 필드에 public static final 제어자만, 메소드는 public abstract 제어자만 적용이 되어집니다.
이 제어자는 모든 인터페이스에 공통적으로 적용이 되는 부분이기 때문에 생략이 가능하고 컴파일러 단에서 자동으로 적용이 이루어집니다.
⚡️interface 구현
인터페이스는 직접 인스턴스를 생성할 수는 없고 클래스가 상속을 받아야만 생성이 가능합니다.
클래스는 extends를 통해 상속받지만 인터페이스를 상속받으려면 아래와 같이 implements 키워드가 필요합니다.
class 클래스명 implements 인터페이스명{
public void 메소드명() {
}
}
또한 클래스와 인터페이스에서 동시에 상속받는 것도 가능합니다.
class 클래스명 extends 부모클래스명 implements 인터페이스명{...}
⚡️interface 다중 상속
인터페이스는 클래스와 달리 여러 개의 인터페이스를 다중 상속받아 하나로 뭉칠 수 있습니다.
이는 기능을 더욱 세분화해서 유지보수에 더 유용합니다.
간단하게 복합기를 예로 들어 다중 상속에 대한 개념을 아래의 코드에서 알아보겠습니다.
interface Printable{
int INK = 100;
void print();
}
interface Scannerable{ void scan(); }
interface Faxable{
String FAX_NO = "010-12345";
void send(String tel);
void receive(String tel);
}
복합기는 프린트와 스캔, 팩스 기능이 포함된 기기입니다.
그 기능 3가지를 인터페이스로 선언해준 뒤 아래와 같이 Complexerable로 그 3가지를 다중 상속받습니다.
interface Complexerable extends Printable, Scannerable, Faxable{ }
이제 인터페이스는 준비되었으니 클래스로 구현을 해줍니다.
인터페이스의 메소드는 추상메소드이기 때문에 빠짐없이 구현하도록 합니다.
class Complexer implements Complexerable{
int ink;
Complexer(){ ink = INK; }
public void print() { System.out.println("종이에 출력합니다. 남은 잉크량 : " + --ink); }
public void scan() { System.out.println("이미지를 스캔합니다."); }
public void send(String tel) {
System.out.println(FAX_NO + "에서 "+ tel + "번호로 FAX를 전송");
}
public void receive(String tel) {
System.out.println(tel + "에서 " + FAX_NO + "로 FAX를 수신");
}
}
이로써 3가지 기능을 가진 인터페이스를 복합기가 다중 상속받고 클래스로 구현이 완료되었습니다.
마지막으로 인터페이스 사용 시의 장점 3가지입니다.
- 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능합니다.
- 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있습니다.
- 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능합니다.
다중 상속을 통해 세분화된 기능을 만들 수 있는 인터페이스를 알아보았습니다.
'Java, JSP' 카테고리의 다른 글
[Java/자바] 예외처리 (try - catch - finally), 사용자 정의 예외 (0) | 2022.01.04 |
---|---|
[Java/자바] 내부클래스(Inner Class) - 인스턴스 클래스, 정적 클래스, 지역 클래스, 익명 클래스 (2) | 2022.01.04 |
[Java/자바] 추상메소드와 추상클래스 (0) | 2021.12.31 |
[Java/자바] final 의미와 사용법 (0) | 2021.12.30 |
[Java/자바] 다형성과 오버라이드, 캐스팅 (0) | 2021.12.29 |
댓글