본문 바로가기

JAVA

JAVA ) interface의 역할과 선언방법 (개념)

 

interface란 무엇인가? 

자바에서 interface의 역할이란 객체의 사용 방법을 정의한 타입이다.

 

일반적으로 개발코드가 직접 객체를 호출하고 사용하는데, 인터페이스를 사용하게되면 개발코드가 인터페이스 메소드를 호출하게 되고 인터페이스 메소드가 객체를 호출해서 개발코드로 리턴해주게된다.

 

즉 인터페이스는 개발코드와 객체가 서로 통신하는 접점 역할을 하는 것이다

 

 

그럼 왜 굳이 인터페스를 개발코드와 객체 사이 접점으로 사용하는 걸까?

 

이유는 개발 코드를 수정하지 않고 사용하는 객체를 변경 할 수 있도록 하기 위해서이다

 

한번에 이해가 되질 않기에 예시를 가져와 보았다. 출처: https://limkydev.tistory.com/197

 

서울시는 밤길 여성들의 안전한 귀가를 위해 30억을 투입해 1000개 유명 중국 H사의 CCTV를 설치했다고 치자. 이제 CCTV에서 송출되는 영상을 각 지역 관할 파출소나 경찰서에서 모니터링 할 수 있도록 1년에 걸쳐 10억을 투자해 CCTV 모니터링 프로그램 시스템을 구축했다. 근데,, 문제가 생겼다 H사의 CCTV는 배터리가 불량고 비가 오면 방수처리가 잘 안되어 고장이 나기 시작했다.. 안되겠다 국산 G사의 CCTV로 전부 다 교체하기로 했다. 그런데 맙소사..중국 H사 CCTV의 영상 송출 모듈에만 특화된 프로그램을 만든 것이다. 다시 프로그램을 만들고 시스템을 구축해한다..응?

감이 올 것이다.

 

만약 현재 시중에서 판매되고 있는 CCTV 제조사가 CCTV의 송출 모듈을 모두 공통적으로 규격에 맞는 모듈로 개발했다면 이런 유지보수성의 불편함은 발생되지 않을 것이며 호환성이 높아질 것이다. 정리하면, 제조사가 다른 CCTV여도 영상 송출이라는 동일한 기능을 제공하게 하는 것이 바로 인터페이스이다.

 

 

 

 

 

 

인터페이스 특징

인터페이스는 상수와 메소드만을 구성한다, 인터페이스는 객체가 될 수 없기에 생성자를 가질 수 없다.
선언 가능한 구성멤버는 상수,추상메소드, 디폴트메소드, 정적메소드 가 있다.

 

상수 필드  
- 인터페이스는 객체 사용 설명서이다! , 그러기에 데이터가 변동 가능 하면 안되며 절대적이여야 한다
- 상수를 선언할 때에는 반드시 초기값을 대입해야 한다.

추상 메소드 
- 객체가 가지고 있는 메소드를 설명한것으로 구현내용을 제외하고 어떤 매값이 필요하고 리턴타입이 무엇인지만 알

준다, 실제 실행부는 구현객체가 오버라이팅 해서 가지고 있다.


디폴트 메소드  
- 인터페이스에서 선언이 되지만 사실은 구현객체가 가지고 있는 인스턴스 메소드

- 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위해 사용한다

 

정적 메소드 

- 디폴트 메소드와 달리 객체가 없어도 인터페이스 만으로 호출이 가능하다   

 

 

 

 

 

인터페이스에서 사용하는 구성 멤버 별 의미 

 

상수 : 인터페이스에서 값을 정해줄테니 함부로 바꾸지 말고 제공해주는 값만 참조해라 (절대적)

추상메소드 : 가이드만 줄테니 추상메소드를 오버라이팅해서 재구현해라. (강제적)

디폴트메소드 : 인터페이스에서 기본적으로 제공해주지만, 맘에 안들면 각자 구현해서 써라. (선택적)

정적메소드 : 인터페이스에서 제공해주는 것으로 무조건 사용 (절대적)

 

 

 

 

 

 

 

 

 

 

다음 포스팅에서 인터페이스를 구성하는 멤버들을 코드로 구현해보자.