본문 바로가기
Spec UP - Backend/나도코딩의 자바기본편

Chap_08.인터페이스(Interface)

by TIS_Ha 2023. 5. 10.
반응형

앞서 배운 추상클래스는 완성되지 않은 클래스였다고 한다면, 인터페이스는 뼈대만 제공하는 구조이다.

상속(extends) : 부모를 하나만 가질 수 있는 단일 상속만 가능한 특징이 있다.


추상클래스 시간에 생성한 FactoryCam과 SpeedCam 클래스에 아래 메소드를 추가한다고 생각해보자.

1) detect() : 화재 or 사고 감지 기능

2) report() : 화재 or 사고 신고 기능

이처럼 각 클래스 별로 겹치는 메소드를 선언하게 되면 관리가 어려워진다.

이를 인터페이스를 통해 코드의 중복을 줄이고 개선된 구조로 만들 수 있다.

 

인터페이스는 [인터페이스를 생성할 패키지명] 마우스 우클릭 -[new]-[JavaClass]-[Int


 

 

위와 같이 Reportable 이라는 인터페이스를 생성하고 report() 메소드를 생성하였다.

report() 메소드는 정의만 할 뿐, 실행할 명령을 입력하지 않는다.

public class VideoReporter implements Reportable { ... }

다른 클래스에서 Resportable 인터페이스를 연결할 때에는 클래스명에 implements 를 입력한다.

( 참고: 상속은 extends 를 입력한다. )

위와 같이 NormalReporter와 VideoReporter 클래스를 생성하고 Reportable 인터페이스를 연결하면  "Implement methods" 메소드를 구현하라는 오류가 발생될 것이다.

Reportable 인터페이스에 정의된 report() 메소드를 구현해주면 정상적으로 클래스가 생성된다.

_02_Interface 클래스를 생성 후 테스트 시 NormalReporter와 VideoReporter의 객체 생성 및 report() 메소드가 정상적으로 실행되는 것을 확인할 수 있다.

 


 

이번에는 화재 감지 기능을 가지는 인터페이스와 클래스를 생성해보자.

위와 같이 FireDetector와 AdvancedFireDetector 클래스를 생성하고 Detectable 인터페이스를 연결하면  "Implement methods" 메소드를 구현하라는 오류가 발생될 것이다.

Detectable 인터페이스에 정의된 detect() 메소드를 구현해주면 정상적으로 클래스가 생성된다.


 

 

반응형

댓글