protected 접근 제어자
외부에서 접근할 수 없다.
클래스 내부, 같은 패키지에 속한 클래스, 자식 클래스만 접근이 가능하다.
컴포지션과 상속
둘 다 재사용성을 위한 방법이다.
상속으로 해결할 수 있는 문제들 컴포지션으로도 가능하다.
포함 (compostion) : 컴포지션
한 클래스의 멤버 변수로 다른 클래스를 선언하는 것이다.
작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 클래스로 만든다.
class battery {
int capacity;
}
class mouse {
battery newb = new battery();
public void Click() {}
}
has-a 관계와 is-a 관계
컴포지션과 상속을 어디에다가 적용해야 할 지 모르겠으면
has-a 관계와 is-a 관계를 생각하면 편하다.
컴포지션(포함)은 has-a 관계이다.
~~는 ~~를 포함하고 있다.
~~는 ~~를 가지고 있다.
ex) 마우스는 배터리를 가지고 있다.
상속은 is-a 관계이다.
~~는 ~~이다
ex) 고양이는 동물이다.
메모리에서 상속과 컴포지션은?
상속은 객체 생성 시 메모리가 하나의 덩어리
Box box = new Box (10, 20, 30);
한 덩어리로 생성한다.
컴포지션은 객체 생성 시 메모리가 여러 덩어리
Rectangle rectangle = new Rectangle(10, 20);
Box box = new Box(rectangle, 30);
![](https://blog.kakaocdn.net/dn/bTitV6/btr4voQA192/h0dKXbgqFqTI29DirrW3Mk/img.png)
new를 통해 인스턴스를 계속 만들 경우 실행 성능에 영향을 미친다.