본문 바로가기
IT/Java

자바 인터페이스(interface)란 무엇인가?

by flatsun 2019. 2. 19.
반응형


저번에 추상(Abstract) 클래스를 했었는데


인터페이스의 경우에도 그렇게 다르지 않다

인터페이스에서도 body 없이 껍데기만 정의할 수 있는데


body 부분인 {} 없이 메소드 파라미터 뒤에 ;를 입력하면

껍데기만 정의하는 것이 가능하다


근데 껍데기만 정의해서 뭣다가 쓰냐면


인터페이스를 implements 한 class에서 반드시 구현하게 만드는 것이다



이렇게 Inter2를 implements 하는 경우에는

inter2에서 껍데기만 정의한 call2 method를 반드시 구현해야 한다


안하면 에러가 뜨니까..


근데 이걸 왜 하는거지?
저번에 추상 클래스 할 때 사용한 설명을 활용하자면


동물이 울부짖을때 제각각 소리가 다르지 않나
근데 그걸 부모 클래스에서 으헝헝으로 정의해 봤자

사자는 어흥이고 개는 멍멍인데 정의하는 이유가 없지 않은가


그래서 껍데기만 구현한 다음

울음소리는 무조건 구현해야 하니 implements 한 곳에서

각각 어흥, 멍멍 등으로 body를 구현하는 것이다


근데 인터페이스 찾아보다 보면


body까지 구현한 concrete method는 

인터페이스 내에서 작성이 불가능하다! 


이런 내용을 봤을텐데


실제 인터페이스 내에 concrete method를 작성해 보면



어..? 잘되는데?


implements 후 출력까지 되나 확인해 볼까?



어.. 잘되네...


이게 잘못 알고 있었던 게 아니라


자바 1.8 전까지는 Interface 내에서 concrete method를 작성할 수 없었는데

1.8 이후로부터는 concrete method 작성이 가능해서 이렇게 되는거다


또한 인터페이스는 다중 implements가 되는데

 extends 같은 경우에는 한번에 하나만 상속 가능하고

여러개를 상속받지 못한다


하지만 인터페이스는 다중으로 implements가 된다



이 인터페이스 저 인터페이스에서 implements를 받아

껍데기만 있는 내용을 반드시 구현하게 되는 것이다..


이제 실전압축용 요약에 들어가자면


인터페이스의 용도는..


1. 정의한 껍데기 메소드(body가 없는거)를 implements 받은 곳에서 반드시 구현하게 한다

2. Concrete method는 구현하지 않아도 된다

3. 다중 implements가 가능하다


Abstract class와 interface의 차이는 다음 글에서 알아보자

반응형

댓글