Java 기초 상속(5) - 경찰과 총의 소유관계
728x90
기본 환경
JDK : 1.8.0_261 버전 JRE : 1.8.0_261 버전 JAVA VERSION : 8 업데이트 261 Eclipse IDE VERSION : 2020-06버전 |
목표
경찰과 총의 관계를 이해하여 소유관계에 대해 이해한다.
이전 게시물과 비교하여 소유관계와 상속관계의 차이를 이해한다.
코드
package ex12inheritance;
/*
구성관계로 표현하기에 적합한 Has-A관계
X has a Y => X과 Y를 소유(보유)하고 있다.
- 경찰이 권총을 소유하고 있다.
- 경찰이 수갑을 소유하고 있다.
Has-A와 같이 소유의 관계를 상속으로 표현하면 클래스 간의
강한 연결고리가 형성되어 권총이 없는 경찰을 표현하기가 힘들어진다.
따라서 이 경우에는 구성관계로 표현하는 것이 적합한다. 구성관계를
클래스의 맴버로 또 다른 객체를 정의하는 것을 말한다.
*/
class Gun{
int bullet;
public Gun(int bNum) {
bullet = bNum;
}
//총을 쏘는 행위를 표현한 맴버메소드
public void shutGun() {
System.out.println("빵야~~~~!");
bullet--; //탄환이 감소됨
}
}
//경찰을 표현한 클래스
class Police{
int handCuffs; //수갑의 보유갯수
Gun gun;//보유한 권총
public Police(int bNum, int hCuff) {
handCuffs = hCuff;
/*
권총 보유 여부 초기화
: 만약 총알이 없는 상태라면 보유한 권총이 없는것으로
표현하기 위해 맴버변수를 null로 초기화 한다.
참조변수가 null값이란 것은 아무것도 참조할 객체가
없다는 의미이다.
*/
if(bNum <= 0) {
gun = null;
}
else {
gun = new Gun(bNum);
}
}
//수갑을 채우는 행위를 표현
public void putHandcuff() {
System.out.println("수갑채움~! 넌 콩밥~!");
handCuffs--;
}
//경찰이 권총을 발사하는 행위를 표현
public void shut() {
if(gun == null) {
//경창이 권총을 소유하지 못했다면 발사할 수 없다.
System.out.println("보유한 권총 없음, 헛방");
}
else {
gun.shutGun();
}
}
}
public class E05HasAComposite {
public static void main(String[] args) {
//권총을 보유한 경찰을 표현
System.out.println("==경찰 1==");
Police police1 = new Police(5, 3);
police1.shut();
police1.putHandcuff();
//권총을 보유하지 못한 경찰을 표현
System.out.println("==경찰 2==");
Police police2 = new Police(0, 3);
police2.shut();
police2.putHandcuff();
}
}
앞에서 컴퓨터는 상속의 관계로 만들었고 경찰과 총은 소유의 관계로 구성을 만들었습니다. 그 이유는 노트북과 테블릿은 컴퓨터 범주안에 포함되지만 총은 경찰의 범주안에 포함되지 않기 때문입니다. 이처럼 사물과 사물의 관계를 객체지향적으로 이해하고 구성할 줄 알아야 가독성이 높은 코드를 완성할 수 있습니다.
결과 값
'Java > Java_기초부터 _끝까지' 카테고리의 다른 글
Java 기초 상속(7) - 전화번호부 (0) | 2020.11.30 |
---|---|
Java 기초 상속(6) - overriding (0) | 2020.11.26 |
Java 기초 상속(4) - 컴퓨터 상속 구조 (0) | 2020.11.24 |
Java 기초 상속(3) - static (0) | 2020.11.20 |
Java 기초 상속(2) - 접근제어 (0) | 2020.11.18 |