카테고리 없음

0. Interface

pakms980319 2024. 3. 12. 11:18

Interface

  • 메서드: 일반 메서드는 없이 전부 추상 메서드(public abstract)로만 구성한다
  • 속성: 일반 멤버 필드는 없고 public static final로 선언된 상수만 있다
  • 직접 객체를 생성하는 것은 불가능하고, implements 키워드를 이용하여 다른 클래스로 구현할 때에는 객체 생성이 가능하다
  • 구현된 클래스에서는 반드시 추상 메서드를 재정의해야 한다
  • abstract 예약어를 사용하지 않아도 추상 메서드로 인식한다
  • 다중 상속을 지원한다
  • 생성자 사용이 불가능하다

1. 인터페이스 용도

 

1) 낮은 결합도 유지  (Business Component 개발의 원칙 중 하나)

  • OOP 특성 중 다형성 구현에 인터페이스를 사용하여 결합도를 낮춘다
  • 인터페이스 선언, 상속(구현), 메서드 재정의, 형변환의 순으로 구현한다

한 메서드를 수정하였을 때, 다른 메서드도 수정해야 하는 상황을 줄여준다.


2) 설계 사상을 코딩단계에서 구현한다

  • 인터페이스를 implements하게 되면 추상 메서드의무적으로 재정의(overriding)해야 하므로 설계단계에서 인터페이스를 통해 정의한 내용을, 코딩단계에서 클래스로 구현되도록 강제할 수 있으므로 산업현장에서 사용한다

2. 사용 예시 - Remocon

전자기기 각각을 켜고, 끄는 기능이 있다

 

Remocon Interface
Remocon Interface 구현 클래스

 

 

1) 인터페이스는 생성자를 사용할 수 없으며 객체를 생성 할 수 없다


2) UpCasting을 통해 객체를 생성할 수 있다


3) 각 UpCasting한 클래스에서 Overriding한 메서드를 사용할 수 있다

실행 결과


4) 메서드를 통해 UpCasting 하는 경우

실행 결과

 

메서드를 좀 더 범용적으로 사용할 수 있다


5) 인터페이스에 추상 메서드 추가하기

 

5-1) 추상 메서드 setVolumn(), getVolumn() 추가

 

 

5-2) 추상 메서드 구현

 

5-3) 실행 결과

실행 결과


6) TV 클래스를 상속받는 SmartTv 클래스,  Browser 인터페이스를 생성 및 구현

Browser 인터페이스
TV를 상속받고 Browser를 구현하는 SmartTv
실행 결과

 


3. 사용 예시 - 차&타이어

 

  • 한국 타이어와 금호 타이어 클래스가 타이어 인터페이스를 구현
  • Car 클래스에서 타이어 인터페이스 배열 참조 변수를 선언만하고 생성자 호출 때 한국 타이어로 구현하도록 설계
  • TireChange를 통해 금호 타이어로 값을 변경하도록 설계

4. 인터페이스 다중상속

  • 클래스 하나를 콤마로 구분해서 인터페이스 하나 이상을 상속하는 것을 의미한다
  • 다중 상속은 인터페이스만 가능하다
  • 추상 클래스라도 다중 상속은 지원하지 않는다

 

 

1) 추상 클래스는 왜 다중 상속이 안되는가?

  • 상위 클래스로부터 같은 메서드나 속성을 상속받을 때 발생할 수 있는 모호성이나 충돌 문제가 있다

2) 인터페이스는 어떻게 다중 상속을 구현될 수 있는가?

  • 인터페이스는 실질적인 구현이 이루어지지 않고 메서드에 대한 선언만 하고 있기 때문에 위처럼 메서드가 겹치더라도 최종 구현 부분은 구현 객체에서 이루어져 interface는 다중 상속이 가능하다.

3) 인터페이스 다중 상속 실습

 

  • 인터페이스 A, B에 대해 클래스 G가 구현하고있다
  • 추상 메서드 a를 클래스 G에서 구현하였다

실행 결과

 

인터페이스에서는 추상 메서드에 대한 선언만 되었기 때문에 구현 클래스에서 추상 메서드를 구현한다면 동일한 기능으로 사용할 수 있다


4) 추상 클래스 다중 상속은 지원하지 않는다

 

  • 추상 클래스에 대해 다중 상속을 할려고 하면 문법 오류가 발생한다
  • 같은 이름의 멤버에 대해 충돌 오류가 발생할 수 있어 지원하지 않는다

5. 인터페이스끼리의 상속

 

인터페이스끼리도 상속을 통해서 확장을 시켜나갈 수 있고 하위 인터페이스에서 네이밍을 강제하여 객체 간의 통일성을 추구할 수 있다. 인터페이스로 객체를 구현할 때는 implements라는 키워드를 쓰지만 인터페이스끼리 상속을 할 때는 클래스와 마찬가지로 extends 키워드를 사용한다.


출처

 

https://coding-factory.tistory.com/867

 

[Java] 자바 인터페이스(Interface) 사용법 & 예제

인터페이스(Interface)란? 자바에서 인터페이스는 클래스들이 필수로 구현해야 하는 추상 자료형입니다. 쉽게 말하자면 객체의 사용방법을 가이드라인 하는 것이라고 생각하시면 이해가 쉽습니다

coding-factory.tistory.com