본문 바로가기
TIL/Learn - Java

자바 인터페이스란?

by koreashowme 2019. 8. 16.

https://anatomylab.tistory.com/34

 

자바 인터페이스란?

안녕하세요. 매일 같은 패턴으로 시작했더니, 식상하시죠? 어쩔수 없죠 뭐. 래파토리 없는 남자 봉합 인사 올립니다. 오늘은 인터페이스에 대해 알아보려고 합니다. 자바의 인터페이스. 자바의 꽃이라 표현하는 분..

anatomylab.tistory.com

오늘은 인터페이스에 대해 알아보려고 합니다.
자바의 인터페이스. 자바의 꽃이라 표현하는 분들도 계신 것을 보면 중요한 개념임에는 틀림이 없는 것 같습니다.

지난 시간에 상속에 대해 설명할 때 빠트린 것 같은데, 자바는 C++ 등과는 다르게 다중 상속이 안됩니다.

"내가 니 애비다."
"아임유어빠~더~얼~"
"넌 내 자식이야!"

누가 진짜 아버지인거야? @.@;;

자바는 다중 상속이 안되기 때문에 족보는 확실합니다.
막장 드라마마냥 여기 저기 아버지라 불러야 하는 사태는 없는 것이죠.

인터페이스에서 왜 이런 다중상속 이야기가 나오느냐?!
어쩔수 없이 비교가 되기 때문입니다.

혹자들은 타언어의 다중상속을 대채하는 개념이 인터페이스라고도 합니다.
물론 또 다른 혹자들은 다중상속이 프로그램을 불명확하게 하는 요소가 되기 때문에 제거했다고 하기도 합니다.
저는 허접해서 뭐가 맞는 말인지는 모르겠습니다. 그러니 그냥 이렇게 쓰는구나~ 정도만 알아봅시다.
package suture.character; public interface Character { }

소스를 보면 알겠습니다만, 기본형태는 클래스와 비슷합니다.
class 대신 interface라고 해주면 되니까요.

 

그럼 인터페이스는 뭘까요? 클래스와는 무엇이 다를까요?
인터페이스는 클래스의 형태를 지정하는 설계도 같은 겁니다.

직접 예제를 통해 무슨 의미인지 알아보도록 하죠.

package suture.character; public interface Character { public String getName(); }

인터페이스에 메소드를 하나 정의했습니다.
그런데 좀 이상하죠? 메소드에 구현부가 없습니다. { } 영역이 없다는 말이죠.
인터페이스에서는 이렇게 선언만 하게 됩니다.

그럼 이 인터페이스를 받아서 클래스를 생성해보겠습니다.



클래스 상속에서는 extends를 사용하지만 인터페이스는 implements라는 키워드를 사용합니다.
Character 인터페이스를 implements 했더니 에러 표시가 떴군요.

The type NonPlayerCharacter must implement the inherited abstract method Character.getName()

이런 에러 메세지를 표시해주네요.
저도 뭔소린지 잘 모르겠습니다만, getName() 메소드를 필히 구현하라는 것 같습니다.
하라는데 해보죠 뭐.

package suture.character; public class NonPlayerCharacter implements Character { String name; public String getName() { return this.name; } }

이제 에러가 사라졌네요.
인터페이스를 왜 설계도라고 했는지 이제 감이 오셨겠죠?
인터페이스에 정의한 메소드들은 해당 인터페이스를 사용하는 클래스에서 반드시 구현해야 합니다.

그리고 인터페이스는 여러개를 사용할 수가 있습니다.
다음과 같이 사용하면 되는데, 저는 메소드를 안만들었습니다만,
인터페이스에 정의된 메소드는 모두 구현해야 합니다.

package suture.character; public class NonPlayerCharacter implements Character, Monster { String name; public String getName() { return this.name; } }

이 정도면 아시겠죠?
다양한 용법이 있겠습니다만, 이해하기 어렵고 귀찮으면 인터페이스는 법이라고 생각하세요.
반드시 해야할 일을 규정하고 있다~

사실 인터페이스 없이도 왠만한 프로그램은 다 짤수 있습니다만,
또 핵심적인 기능으로 제공하는데 사용해야 할 필요가 있을땐 사용해줘야 하겠죠.

그럼 오늘은 이만~ 살아있다면 또 봐염~

출처: https://anatomylab.tistory.com/34 [해부학연구실]


comment