hoonii2

[Java] 05. Interface 본문

개념 공부/(개발) 01. Java

[Java] 05. Interface

hoonii2 2022. 11. 25. 17:58

Interface 는 Abstract 와 유사한 기능을 하지만 아래의 차이점이 있다.

 

1. Abstract 

: 필드 선언 'static' , 'final' 사용할 없다
: method 작성할 'public', 'protected', 'private' 선언할 있다.
: extend
통해 abstract 이든 아니든 Class 개만 extend 있다.

: abstract method 실행 구문을 포함하지 않는다.
 

2. Interface

: 모든 필드는 자동으로 'public, 'static', 'final' 된다.
:
선언하는 모든 method 'public' 된다.
:
든지 Interface implement 있다.
: Interface 'public' 으로 지정하지 않으면 동일한 패키지에 정의된 클래스에서만 해당 Interface 접근할 있다.
: Interface 내에서 'default' or 'static' 으로 지정하지 않는 method abstract 암묵적으로 지정되므로 abstract 따로 지정할 필요가 없다. (사용할 수는 있지만 불필요한 코드)

 

즉, Interface 내에 암묵적으로 abstract 메소드를 사용 시 ( 그냥 인터페이스 내에서 메소드 사용 시 Abstract 매소드가 된다 ) 실행 구문 없이 이를 Implement 하는 Class 에서 실행문을 작성할 수 있다.

 

그러면 Abstract 와 Interface 를 굳이 나눌 필요가 있을까?

 

1-1. Abstract 사용하는 경우

  • 밀접한 관련이 있는 여러 클래스 코드를 공유하는 경우
  • Abstract Class 상속하는 Class 많은 공통 메소드 또는 필드가 있거나 public 이외의 액세스 한정자 (ex, protected, private) 필요한 경우
  • static/final 하지 않은 메소드를 정의하고자 하는 경우

1-2 Interface 사용하는 경우

  • 관련없는 여러 클래스가 이를 구현하는 경우 ( ex, Comparable, Cloneable )
  • 특정 데이터 유형의 동작을 지정하고자 하지만 이를 사용하는 Class 목적과 공통인지 관심이 없는 경우
  • 다중 상속을 활용하고자 하는 경우

하지만 보통 Interface 를 사용하고 Abstract 가 불필요한가에 대한 Stackoverfow 토론도 있다. (https://stackoverflow.com/questions/7202616/java-abstract-interface)

 

Java abstract interface

Consider an example (which compiles in java) public abstract interface Interface { public void interfacing(); public abstract boolean interfacing(boolean really); } Why is it necessary fo...

stackoverflow.com

 

3. Default / Static Interface

: 미리 생성되어 사용중인 Interface 에 추가적인 메소드를 추가하고자 하는 경우 사용한다.

: 실행 구문을 인터페이스 내에 작성할 수 있어 기존 Interface 를 Implement 하는 Class 들에 수정사항을 필요로 하지 않으며 추가되는 메소드를 자유롭게 사용할 수 있게 된다.

 

 

4. Functional Interface

: 인터페이스 내에 Abstract 메소드가 하나만 있는 인터페이스를 의미한다

: @FUnctionalInterface 어노테이션으로 의미를 지정 및 검사를 할 수 있다.

: 3 번의 내용으로 해당 인터페이스 내에 Default/Static 메소드를 구현해도 Abstract 메소드가 한 개만 있다면 문제없이 동작한다.

: 람다 표현식으로 함수형 인터페이스를 인스턴스로 생성하여 간단하게 사용할 수 있다

 

Comments