개발의 시작과 끝

2020.06.01 / Day - 47 자바 인터페이스 본문

풀스택/자바 공부, 복습

2020.06.01 / Day - 47 자바 인터페이스

개발지혜 2020. 6. 1. 12:53

47일차

 

인터페이스(Interface)

 

▶ 정의

프로젝트의 설계도 같은 것으로, 기능에 대해 선언만 한 상태이다.

인터페이스는 모든 기능을 추상화로 정의한 상태

즉, 모든 메서드의 선언만 정의하고 메서드의 기능에 대해 주석만 기입한 상태이다.

인터페이스도 추상 클래스처럼 구현이 안된 멤버를 포함하므로 인스턴스를 시킬수 없고

인터페이스를 상속 받은 클래스에서 멤버를 구현한 뒤 자식 클래스를 인스턴스하여 사용된다.

 


 

 구현

인터페이스는 예약어로 class 대신 inteface를 사용하며, 접근 제어자로 public 또는 default를 사용한다.

- 인터페이스는 추상 메서드와 상수만 멤버로 가질 수 있다.
- 일반 메서드와 멤버 변수는 구성원으로 가질 수 없다.
- 모든 멤버 변수는 public static final이어야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract이어야 하며, 이를 생략할 수 있다.

 


 

 인터페이스 사용

인터페이스 자체를 인스턴스 시킬수는 없다. 자식 클래스에서 인터페이스에서 선언한 메서드를 오버라이딩으로 재 구현하고 자식 클래스를 생성해야 한다. 인터페이스는 자식으로 인터페이스와 클래스를 받을 수 있다.

 

인터페이스를 자식으로 가질 경우

interface 자식인터페이스 extends 부모인터페이스{
}

extends를 예약어로 사용하여 부모인터페이스를 상속 받는다. 부모 인터페이스에서 선언한 메서드를 재 구현하지 않아도 되고 기능 선언을 추가할 수 있다. 자식 인터페이스를 상속 받은 클래스는 부모인터페이스와 자식인터페이스에서 선언한 메서드를 모두 오버라이딩해야 한다.

 

클래스를 자식으로 가질 경우

class 자식클래스 implements 부모인터페이스{
}

implements를 사용하여 부모인터페이스를 상속 받는다.부모인터페이스에서 선언한 메서드에 대해서 모두 오버라이딩하여 재 구현해야 한다.

 


 

 인터페이스를 이용한 다중 상속

Java에서는 class의 다중 상속을 허용하지 않는다. 이런한 점을 보완 하고자 interface를 이용한 다중 상속은 허용한다.
비고) 콤마를(,) 구분자로 사용함

// 1
interface Parent1{
 void method1();
}

// 2
interface Parent2{
 void method2();
}

// 3
public class Child implements Parent1, Parent2{
 @Overrding
 public void method1(){
 }
 
 @Overrding
 public void method2(){
 }
} 

 

부모 인터페이스로 Parent1, Parent2를 선언하고 Child클래스에서 이 둘을 상속했다.
Child 클래스에서는 두 인터페이스에서 선언한 method1(), method2()를 모두 오버라이딩하여 재 구현해야한다.

 


 

 인터페이스 사용 이유

  • 클래스간 결합도를 낮출 수 있다.

객체지향 설계 원칙의 하나로 클래스간의 영향도는 낮출수로 좋다.(클래스간 간접적인 관계로 변경) 사용자에서 제공자를 직접 사용하지 말고 인터페이스로 사용하면 제공자쪽에 소스의 변경이 있어도 사용자쪽에 직접적인 영향이 없어 변경을 하지 않아도 된다.

  • 표준화가 가능하다.

클래스이 기본틀을 제공하여 개발자들에게 정형화된 개방을 강요한다.

  • 개발 시간을 단축 시킬수 있다.

제공자쪽에서 미 구현되어 있어도 사용자쪽에서 인터페이스 명과 메서드 명만 알고 있어도 사용자쪽에서 개발이 가능하다.