인터페이스

반응형
반응형

인터페이스는 과연 무엇일까?
interface?? 초기의 인터페이스는 

void test();

요런식으로 구현체가 없는 상태로 존재하였다.
그래서 인터페이스를 implements을 하게되면, 구현체가 반드시 필요하였습니다.

하지만 자바8부터 인터페이스에도 구현체를 작성할 수 있게 되었다.

하하하

구현체를 작성하는 방법은 총 3가지다.
1. static 2. default 3. private

원래 언제 만들어졌는지 적으려 했지만 귀찮은 관계로 넘어가자.

아무튼 이 3가지의 공통점은 구현체를 구현을 해야 된다는 점이다.
근데 여기서 드는 의문점이 있다.
static, private같은 경우는 기존 클래스에서 사용법이 크게 다르지 않다. 
static은 메모리상에 먼저 올라가구
private는 그 클래스내에서만 사용이 가능하다는 점은 같다.

근데 default를 생각해보자.

기존 클래스에서 default는 어떤식으로 작성이 되어지는지 생각해보자.
동일한 패키지내에서만 적용이 되어진다.

인터페이스에는 public이 생략이 되었다는 점을 생각해보면,
인터페이스에서 defaulte는 public default가 되버린다. 이거는 조금 이상하다. 아니 많이 이상하다. 조금 헷갈린다.

public 이면 모든 클래스에 적용이 된다는 뜻이고
default는 동일 패키지에서만 적용되는 뜻이된다. 뭐가 맞는걸까?

다시 돌아와서 애초에 인터페이스는 public이 생략이 되었다. 따라서 모든 클래스에 적용이 된다는 뜻이 된다.
근데 왜 default를 붙였을까 고민이 된다. 근데 사실 이거는 크게 신경쓰지 않아도 된다.
아마 추측컨데 default를 붙인 이유는 딱히 방법이 없어서 그런게 아닐까 생각이 든다.

public, protected, private같은 예약어들은 너무 분명하게 범위를 표현하고 있다.
default같은 경우를 생각해보면 클래스 단에서는 package-private라고도 불린다.
이 말은 즉, default란 용어를 보고 변수나 메소드의 범위를 알수 없다는 뜻이다. 단지 우리가 자바에서 알 수 있는 이유는 자바에서 그렇게 정의를 했기 때문이라 생각이 든다.

상수 정의 

인터페이스에는 변수를 정의를 할 수 없다.
과연 없을까? 일반적으로는 불가능하다. 인터페이스 자체가 껍데기만 있는 건데
변수라는건 정의 할 수 없다.
하지만 상수라면 어떨까?
미리 정의 해놓은 상수라면?

public interface Ex {
  int a = 10;
}

대충 요런 식으로 작성이 되어지는데 상수 같은 경우는 public static이 생략이 되어 있다.
결국 Ex.a 뭐 이런식으로 리턴이 된다.
이걸 자주 사용할까는 잘 모르겠지만 인터페이스에서도 상수 정의는 된다는 점을 알려주고 싶었다.
번외로 inner 클래스 inner 인터페이스도 정의가 가능하며 public static이 생략 된채 작성되어진다.

 




반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

SOLID  (0) 2021.09.10
LocalDateTime (미 정재 .ver)  (0) 2021.09.04
람다  (0) 2021.03.01
자바9 모듈  (0) 2021.02.22
제네릭  (0) 2021.02.21

댓글

Designed by JB FACTORY