<aside> 💡 자바복습을 하며 protected를 왜 많이 안쓰는지 다시금 알게되고 abstract와 interface를 쓸때의 활용성 OCP개방폐쇄원칙에 대해서 다시금 알게 되어 정리하게 되었습니다.
</aside>
protected
접근 제어자는 해당 클래스와 그 클래스를 상속받은 서브클래스에서만 접근할 수 있는 멤버 변수를 정의합니다.-이점에 대해서 abstract도 interface도 똑같이 상속받기 마찬가지 아닌가? 의문이 들다가 알게 되었다
protected를 쓰는 순간 OCP개방폐쇄원칙에 어긋나서 어떠한 객체든 받아들인다는 확장에 열려있지않아 쓸수 없다
-어디까지나 protected로 개인 메서드를 상속해서 쓸때 기본 부모클래스에서class Accumulator{ protected void accumulate(int num){}
-protected int getAccVal(){return val;}}로 해줘서 SavingAccount extends Accumulator{}로 구현하는식으로 protected메서드 덕분에 구현이 가능한 구조가 되었다
그러나 내부에서 쓰기에는 좋으나 외부로 노출되어야할 부분 외부라이브러리같은곳에서 상속을 받을수도 없고 OCP개방폐쇠원칙에도 어긋나서 interface나 abstract로 구별해주는게 좋다, 설사 상속을 외부라이브러리에서 한다해도 코드 내용이 길어진다
<aside> 💡 같은 패키지 안에서 사용하기위해 protected로 메서드 만들기
public class Accumulator {
private int val;
public Accumulator(int init){
val=init;
}
protected void accumulate(int num){
//음수는 누적대상에서 제외
if(num<0){
return;
}
val+=num;
}
protected int getAccVal(){
return val;
}
}
</aside>
<aside> public class SavingAccount extends Accumulator{
public SavingAccount(int initDep){
super(initDep);
}
public void saveMoney(int money){
accumulate(money);
}
public void showSaveMoney(){
System.out.println("지금까지의 누적금액 :");
System.out.println(getAccVal());
}
}
</aside>
확장에는 열려 있고 수정에는 닫혀 있어야 한다는 원칙입니다.
추상클래스(공통 조립 나사)