대부분의 field 선언 변수에 private를 쓰게되는 습관이 있다.
private는 class 안에서,
default는 한 package 안에서,
protected는 한 class, 한 package, 상속받은 subclass 안에서,
oublic은 클래스 all에서,
접근 가능하다고 외웠는데(?)
외운 것 치고 public, private만 주구장창 쓰고
protected는 잘 안쓰게되는 것 같다.
protected의 존재 이유는 뭘까 ?
대다수의 글에서 이렇게 말한다. (네티즌 여러분 이 의견에 대해서는 댓글로 건설적 비판 바랍니다!)
public의 경우 그 자체로 완결된 메서드...
그러나 protected의 경우 상속시에 override해야하는 가능성을 열어둔 것
"필요하다면 구현하시오~!"
어떤 측면에서는 javascript에서 const를 쓰듯이 데이터의 무결성을 보장.
"이 데이터를 쉽게 바꾸려하지마시오~!"
cf. 일반적으로 protected api는 외부 패키지에서 상속을 하지 않는 이상 사용될 수 없다고 알려져 있지만, 실제로는 Reflection API를 통해 사용이 가능하다. 그만큼 reflection API는 OOP를 깨버릴 만큼 강력한 API인 셈이다.
참고 :
https://m.blog.naver.com/PostView.nhn?blogId=2feelus&logNo=220576845725&proxyReferer=https:%2F%2Fwww.google.com%2F
(좋은 생각이 나게한다.)
https://kldp.org/node/48605
(댓글로 토론의 장이 열렸당.)