09009
[Java] 클래스 간의 관계 - 포함관계 본문
이전 내용 참고
[Java] 상속
상속 • 부모가 자식에게 물려주는 행위 • 자식(하위, 파생) 클래스가 부모(상위) 클래스의 멤버를 물려받는 것, 자식이 부모를 선택해 물려받는다. • 기존의 클래스를 재사용하여 새로운 클래
haaland09009.tistory.com
클래스 간의 관계 - 포함관계
• 상속과 마찬가지로 클래스를 재사용할 수 있는 방법
• 한 클래스의 멤버변수로 다른 클래스를 선언하는 것
• 작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 커다란 클래스를 만듦
• 단위 클래스들을 포함관계로 재사용하면 간결하고 손쉽게 클래스 작성 가능
• ~은 ~이다(is-a) : 상속관계
ex) sportcar는 car이다. 버스는 자동차이다. 원숭이는 동물이다.
• ~은 ~을 가지고 있다(has-a) : 포함관계
ex) 원은 점을 가지고 있다. ['원은 점이다'라는 문장보다는 '원은 점을 가지고 있다'라는 문장이 바람직함.]
원에 점이 포함된 관계.
✍ Engine.java
package ch07;
public class Engine {
private int displacement;
private String type;
Engine() {
}
Engine(int displacement, String type) {
this.displacement = displacement; this.type = type;
}
void print() {
System.out.println("=================");
System.out.println("배기량 : " + displacement);
System.out.println("엔진타입 : " + type);
}
}
✍ Car2.java
package ch07;
public class Car2 {
private Engine eg; // 포함: 다른 클래스(객체)를 멤버변수/매개변수로 사용
private String color;
Car2() {
}
Car2(Engine eg, String color) {
this.eg = eg;
this.color = color;
}
void print() {
eg.print();
System.out.println("색깔 : " + color);
}
}
✍ Car2Ex.java
package ch07;
public class Car2Ex {
public static void main(String[] args) {
Engine eg1 = new Engine(2000, "GDI");
Engine eg2 = new Engine(1500, "DOHC");
Car2 c1 = new Car2(eg1, "빨강");
Car2 c2 = new Car2(eg1, "초록");
Car2 c3 = new Car2(eg2, "파랑");
c1.print(); c2.print(); c3.print();
System.out.println("-----------------------");
Car2[] car = {c1, c2, c3};
for(int i = 0; i < car.length; i++) {
car[i].print();
}
System.out.println("-----------------------");
Car2[] cars = {c1, c2, c3};
for(Car2 c : cars) {
c.print();
}
}
}
💻 출력 결과
=================
배기량 : 2000
엔진타입 : GDI
색깔 : 빨강
=================
배기량 : 2000
엔진타입 : GDI
색깔 : 초록
=================
배기량 : 1500
엔진타입 : DOHC
색깔 : 파랑
-----------------------
=================
배기량 : 2000
엔진타입 : GDI
색깔 : 빨강
=================
배기량 : 2000
엔진타입 : GDI
색깔 : 초록
=================
배기량 : 1500
엔진타입 : DOHC
색깔 : 파랑
-----------------------
=================
배기량 : 2000
엔진타입 : GDI
색깔 : 빨강
=================
배기량 : 2000
엔진타입 : GDI
색깔 : 초록
=================
배기량 : 1500
엔진타입 : DOHC
색깔 : 파랑
✍ FruitSeller1.java (사과 판매자)
public class FruitSeller1 {
int numberOfApple = 20; // 현재 판매자가 보유한 사과의 개수
int money = 0; // 현재 판매자가 보유한 금액
final int PRICE_PER_APPLE = 1000; // 사과 하나 당 가격
int saleApple(int amt) { // 판매한 사과의 수를 반환하는 메서드, amt는 판매자에게 들어온 가격 (수입)
money += amt;
int num = amt / PRICE_PER_APPLE;
numberOfApple -= num; // 현재 판매자가 보유한 사과의 개수
return num; // 판매한 사과의 수 반환
}
void print() {
System.out.println("================");
System.out.println("판매자 사과개수: " + numberOfApple);
System.out.println("판매자 금전잔액: " + money);
}
}
✍ FruitBuyer1.java (사과 구매자)
public class FruitBuyer1 {
int numberOfApple = 0; // 현재 구매자가 보유한 사과의 개수
int money = 5000; // 현재 구매자가 보유한 금액
void buyFruit(FruitSeller1 fs, int amt) {
int num = fs.saleApple(amt); // 구매자가 구매한 사과의 수 = 판매자가 판매한 사과의 수
numberOfApple += num;
money -= amt;
}
void print() {
System.out.println("================");
System.out.println("구매자 사과개수 : " + numberOfApple);
System.out.println("구매자 금전잔액 : " + money);
}
}
✍ Fruit1Ex.java (결과 출력)
public class Fruit1Ex {
public static void main(String[] args) {
FruitSeller1 fs1 = new FruitSeller1();
FruitSeller1 fs2 = new FruitSeller1();
FruitBuyer1 fb1 = new FruitBuyer1();
FruitBuyer1 fb2 = new FruitBuyer1();
FruitBuyer1 fb3 = new FruitBuyer1();
fb1.buyFruit(fs1, 3000);
fb2.buyFruit(fs2, 2000);
fb3.buyFruit(fs1, 2000);
fs1.print(); fs2.print();
fb1.print(); fb2.print(); fb3.print();
}
}
💻 출력
================
판매자 사과개수: 15
판매자 금전잔액: 5000
================
판매자 사과개수: 18
판매자 금전잔액: 2000
================
구매자 사과개수 : 3
구매자 금전잔액 : 2000
================
구매자 사과개수 : 2
구매자 금전잔액 : 3000
================
구매자 사과개수 : 2
구매자 금전잔액 : 3000
✍ FruitSeller3.java
public class FruitSeller3 {
int numberOfApple, money;
String name; final int PRICE_PER_APPLE = 1000;
public FruitSeller3(String name, int numberOfApple, int money) {
this.name = name; this.numberOfApple = numberOfApple; this.money = money;
}
int saleApple(int amt) {
int num = amt / PRICE_PER_APPLE;
if (numberOfApple >= num) {
money += amt;
numberOfApple -= num;
System.out.printf("%d개 판매, 수입 %d원\n", num, amt);
} else {
System.out.println("사과가 부족합니다.");
num = 0;
}
return num;
}
void print() {
System.out.println("==================");
System.out.println(name + " 사과개수 : " + numberOfApple);
System.out.println(name + " 금전잔액 : " + money);
}
}
✍ FruitBuyer3.java
public class FruitBuyer3 {
int numberOfApple, money;
String name;
public FruitBuyer3(String name, int numberOfApple, int money) {
this.name = name; this.numberOfApple = numberOfApple; this.money = money;
}
void buyFruit(FruitSeller3 fs, int amt) {
if (money < amt) System.out.println("돈이 부족하여 구매할 수 없습니다.");
else {
int num = fs.saleApple(amt);
if (num != 0) {
numberOfApple += num;
money -= amt;
System.out.printf("%s 사과 구매 %d개 지출 %d원\n", name, num, amt);
} else System.out.println("사과를 구매하지 못했습니다.");
}
}
void print() {
System.out.println("==================");
System.out.println(name + " 사과개수 : " + numberOfApple);
System.out.println(name + " 금전잔액 : " + money);
}
}
✍ Fruit1Ex3.java
public class Fruit1Ex3 {
public static void main(String[] args) {
// 판매자 2명 구매자 3명
FruitSeller3 fs1 = new FruitSeller3("제니", 30, 1000);
FruitSeller3 fs2 = new FruitSeller3("로제", 20, 0);
FruitBuyer3 fb1 = new FruitBuyer3("보검", 0, 20000);
FruitBuyer3 fb2 = new FruitBuyer3("은우", 5, 10000);
FruitBuyer3 fb3 = new FruitBuyer3("화사", 0, 50000);
fb1.buyFruit(fs1, 13000);
fb2.buyFruit(fs2, 12000);
fb3.buyFruit(fs1, 15000);
// 사과 돈
fs1.print(); // 제니 30 1000 -> 27 4000 -> 25 5000
fs2.print(); // 로제 20 0 -> 18 2000
// 보검 0 20000 -> 3 17000
fb1.print(); // 은우 5 10000 -> 7 8000
fb2.print(); // 화사 0 50000 -> 2 48000
fb3.print();
}
}
💻 출력
13개 판매, 수입 13000원
보검 사과 구매 13개 지출 13000원
돈이 부족하여 구매할 수 없습니다.
15개 판매, 수입 15000원
화사 사과 구매 15개 지출 15000원
==================
제니 사과개수 : 2
제니 금전잔액 : 29000
==================
로제 사과개수 : 20
로제 금전잔액 : 0
==================
보검 사과개수 : 13
보검 금전잔액 : 7000
==================
은우 사과개수 : 5
은우 금전잔액 : 10000
==================
화사 사과개수 : 15
화사 금전잔액 : 35000
/
5/7
'Back-End > JAVA' 카테고리의 다른 글
[Java] collection (0) | 2023.03.11 |
---|---|
[Java] Object 클래스, equals(), toString() (2) | 2023.03.11 |
[Java] 상속 (0) | 2023.03.11 |
[Java] 다형성, 오버라이딩 (1) (0) | 2023.03.10 |
[Java] 메서드 (0) | 2023.03.10 |