티스토리 뷰

JAVA

인터페이스란?

세댕댕이 2021. 11. 25. 17:49

인터페이스는 다른 클래스를 작성하는데 도움을 줄 목적으로 사용되는 일종의 추상클래스라고 할 수 있다. 

추상 클래스보다 추상화 정도가 높아 추상 메서드 이외에 일반 메서드나 멤버변수를 가질 수 없다. 오직 추상 메서드와 상수만을 가질 수 있다.

- 모든 멤버변수는 public static final (상수)여야 하며, 이를 생략하면 컴파일러가 자동으로 붙여준다

- 모든 메서드는 public abstract (추상 메서드)여야 하며, 이를 생략하면 컴파일러가 자동으로 붙여준다.

(예외: static 메소드와 default 메소드)

 

모든 메서드가 추상 메서드이기 때문에, 인터페이스를 구현하는 클래스는 해당 메서드를 반드시 구현(implements)하여 사용해야한다.

- 예외적으로 default 메서드로 지정된 메서드는 구현하지 않아도 된다

- 인터페이스의 메서드를 구현하는 경우, 제한자는 모두 public이 된다.

(인터페이스의 추상 메서드는 모두 public abstract이고, 접근 제한자는 조상의 메서드보다 더 좁은 범위로 변경할 수 없다)

 

또한, 인터페이스는 다중상속을 지원한다. 그리고 상속과 구현을 동시에 하는 것도 가능하다.

 

* 리턴 타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 뜻한다.

-> 인터페이스를 통한 다형성

 

# 왜 인터페이스를 사용하는가?

1. 개발시간 단축

- 인터페이스를 사용하면 메서드를 호출하는 쪽에서는 메서드의 내용을 알 필요가 없다. 

- 객체지향의 핵심이 역할과 책임이었다. 프로그램을 작성하는 사람은 인터페이스의 역할에 맞춰 프로그램을 설계하고, 인터페이스를 구현하는 사람은 역할에 따른 책임을 수행할 수 있도록 구현 클래스를 짜면 된다.

- 한 쪽에서는 인터페이스를 사용해 프로그램을 작성하고, 다른 한 쪽에서는 인터페이스를 실제로 구현하는 클래스를 작성하면 양 쪽에서 동시에 개발을 진행할 수 있다. 

 

2. 일관되고 정형화된 프로그램의 개발이 가능하다

 

3. 서로 관계가 없는 클래스에게 공통 조상을 만듦으로써 관계를 맺어줄 수 있다.

 

4. 클래스의 선언과 구현을 분리함으로써 독립적인 프로그래밍이 가능하다.

(한 클래스의 변경이 다른 클래스에 영향을 주지 않는다)

- 클래스 A와 클래스 B가 있다고 생각해 보자. 클래스 A는 클래스 B의 인스턴스를 생성하고 메서드를 호출한다. 

이 경우 두 클래스는 직접적인 관계에 있으며, 'A-B' 관계라고 표현해보자.

이 경우, 클래스 A를 작성하기 위해서는 클래스 B가 이미 작성되어 있어야 하고, 클래스 B의 메서드 선언부가 변경되면 클래스 A의 코드도 변경되어야 한다. 서로 종속적인 관계인 것이다.

그런데, 인터페이스를 사용하게 되면 클래스 B의 메서드가 변경되거나, 다른 클래스로 아예 대체되어도 클래스 A는 전혀 영향을 받지 않는다. (서로 독립적이다)  'A-I-B' 관계(간접적인 연결)가 되는 것이다.

(클래스 A는 인터페이스 I와 직접적인 연관이 있을 뿐 클래스 B와는 연관이 없어진다)

 

 

# default 메서드

인터페이스에 추상 메서드를 추가할 경우, 해당 인터페이스를 구현하고 있던 클래스들 모두가 새로 추가된 메서드를 구현해줘야한다. 

이런 번거로운 일을 피하기 위해 default 메서드가 등장한다. default 메서드가 추가될 경우, 해당 인터페이스를 구현한 클래스는 해당 메서드를 구현해도 되고, 구현하지 않아도 된다. 

메서드 앞에 '(public) default'를 붙이며 몸통 { } 를 같이 적어줘야한다.

 

 

'JAVA' 카테고리의 다른 글

생성자 대신 정적 팩토리 메서드  (0) 2022.07.15
JAVA의 예외 처리란?  (1) 2021.11.26
추상 클래스란?  (0) 2021.11.25
자바 람다식과 스트림  (0) 2021.11.12
자바를 자바라  (0) 2021.10.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함