개발/Java

어째서 인터페이스는 protected 접근제한자 허용하지 않는가?

ksy0314 2023. 7. 20. 23:26

 

 

자바를 공부하며 기본적으로 배우는것이 있다.

 

private < default < protected < public 순으로 넓다는것

 

또한 메소드 오버라이딩시 접근제한자의 범위를 줄일수 없다는것이 그것이다.

public interface AA {
	void a();
}

그러나 인터페이스에서 선언한 이녀셕을 오버라이딩 하려 하니

public abstract class BB implements AA{
	protected void a() {};
}

메소드 a에 빨간줄을 그으며

Cannot reduce the visibility of the inherited method from AA

범위를 줄일수 없다고 하지 않는가?

 

 

default 접근 제한자는 protected보다 좁은 범위아닌가?

 

당황하지 않고 빠르게 구글링한 결과

 

인터페이스는 default, protected 접근 제한자를 사용하지 못한다는것을 알게되었다.

 

생각해보면 당연한 말이다.

 

 

인터페이스의 목적

 

인터페이스란 객체의 사용가이드 같은것이다. 

 

외부 객체는 이 인터페이스를 통해 자식 객체의 메소드를 사용한다.

 

즉 외부의 접근을 제한하는 메소드는 인터페이스에 사용할 필요가 없다는 의미가 된다.

 

 

따라서 default, protected 접근 제한자는 사용할수 없으며

 

접근지정자를 지정하지 않으면 이를 public 메소드로 처리한다.

 

그럼 인터페이스의 메소드는 전부 public 으로 보면 되나요?

 

 

 

음... 100% 그렇다고 볼순 없는게 private는 사용 가능하더라

 

아마 인터페이스도 default(접근제한자 아님) 메소드 body 블럭에 사용하라고 만든것 같은데

 

그냥 쓸 수 있다 정도로 생각하면 될것 같다.

 

 

끝!

 

 

 

'개발 > Java' 카테고리의 다른 글

String 메소드 정리  (0) 2024.03.11
String, StringBuffer, StringBuilder, 문자 리터럴 비교  (0) 2024.03.11
Java Math 라이브러리  (0) 2024.03.08
배열 관련 API  (0) 2024.03.07
이클립스 단축키 공략  (0) 2022.09.30