개발의 시작과 끝
2020.03.04 / Day - 20 자바 인스턴스 변수 복습 본문
bbm - 7일차
무기 인스턴스 변수 이용
class Main {
public static void main(String[] args) {
전사 a전사 = new 전사();
a전사.a무기 = new 칼();
a전사.공격();
a전사.a무기 = new 창();
a전사.공격();
}
}
class 전사 {
무기 a무기;
// 전사가 칼이나 창같은 무기에 대해 모르므로 칼 또는 창의 변경에 자유롭다.
void 공격() {
a무기.사용();
}
}
class 무기 {
void 사용() {
}
}
class 창 extends 무기 {
int 데미지 = 80;
String 이름 = "창";
void 사용() {
System.out.println(이름 + "(으)로 공격합니다.");
System.out.println("데미지 : " + 데미지);
}
}
class 칼 extends 무기 {
int 데미지 = 78;
String 이름 = "칼";
void 사용() {
System.out.println(이름 + "(으)로 공격합니다.");
System.out.println("데미지 : " + 데미지);
}
}
전사가 무기에 대해 몰라야 하기 때문에 외부에서 전사에게 무기를 주입해주어야 한다.
이렇게 하는 이유는 전사가 무기를 알게되면 무기의 변화에 계속 영향을 받게 된다.
전사의 종류가 1종류면 상관 없지만 전사의 종류가 많아지면 각 전사의 클래스에 사용되는 구체 무기들을
다 찾아보고 수정해줘야 하는 불편함을 초래하기 때문이다.
이렇게 앞으로 계속 빼서 프로그램 최초로 한번만 객체를 만들어 연결해주는 팩토리패턴이라는 것도 존재한다.
하나의 무기는 하나의 공격 알고리즘이다.
공격 알고리즘은 게임 진행상 수시로 바뀌며 추가되고 삭제되기도 한다.
때문에 이런 알고리즘이 특정 객체 내부에 구현되어 있으면 그 특정 객체와
이 알고리즘이 강하게 결합되어 서로 영향을 주고받는다.
이 알고리즘을 사용하는 객체가 많아질수록 단지 알고리즘을 사용하고 있을 뿐
다른 부분은 전혀 문제없는 객체들이 알고리즘 수정을 위해 작업이 되어야 하는 상황이 발생한다.
이를 class로 따로 객체로 만들어두면 이 알고리즘이 필요한 다른 객체는 알고리즘 구현 필요 없이
그냥 이 알고리즘 객체를 만들어 연결하여 사용하기만 하면 된다.
이러한 알고리즘을 객체로 분리시키는 것을 캡슐화라고 한다.
'자바 복습' 카테고리의 다른 글
2020.03.06 / Day - 22 자바 static 메서드 복습 (0) | 2020.03.06 |
---|---|
2020.03.05 / Day - 21 자바 생성자, super 생성자 복습 (0) | 2020.03.05 |
2020.03.02 / Day - 18 자바 abstract 클래스 복습 (0) | 2020.03.02 |
2020.03.01 / Day - 17 자바 클래스 복습 (0) | 2020.03.01 |
2020.02.21 / Day - 8 자바 배열 복습 (0) | 2020.02.21 |