📁 ex01
☕ Slime.java
public class Slime {
double hp = 50;
int attack = 8;
double defense = 0.2;
void attack (Slime enemy) { // 💡 다른 슬라임의 인스턴스를 인자로 받음
enemy.hp -= attack * (1 - enemy.defense);
}
}
☕ Main.java
Slime slime1 = new Slime();
Slime slime2 = new Slime();
slime1.attack(slime2);
📁 ex02
☕ IntArrayInfo.java
public class IntArrayInfo {
int count;
int max;
int min;
int sum; // 기본 0
double average;
IntArrayInfo(int[] nums) {
count = nums.length;
max = nums[0];
min = nums[0];
for (int num : nums) {
max = max > num ? max : num;
min = min < num ? min : num;
sum += num;
}
// 소수부를 잃지 않도록 먼저 1.0을 곱하여 double로 만듦
// 실수와 정수의 연산은 실수를 반환
average = 1.0 * sum / nums.length;
}
}
☕ Main.java
int[] ary1 = {3, 5, 9, 2, 8, 1, 4};
int[] ary2 = {382, 194, 27, 915, 138};
IntArrayInfo aryInf1 = new IntArrayInfo(ary1);
IntArrayInfo aryInf2 = new IntArrayInfo(ary2);
int ary1Max = aryInf1.max;
double ary2Avg = aryInf2.average;
int ary1n2Sum = aryInf1.sum + aryInf2.sum;
여기서 의문이 들수있는게 왜 여기서는 this.count, this.max 처럼 안써주냐는 건데 this 가 꼭 필요했던 예시와는 달리 같은 이름의 인자가 있는게 아니므로 굳이 명시할 필요가 없기 때문이다.
📁 ex03
☕ YalcoChicken.java
public class YalcoChicken {
int no;
String name;
ChickenMenu[] menus;
YalcoChicken (int no, String name, ChickenMenu[] menus) {
this.no = no;
this.name = name;
this.menus = menus;
}
ChickenMenu orderMenu (String name) {
for (ChickenMenu menu : menus) {
if (menu.name.equals(name)) { // 🔴
return menu;
}
}
return null;
}
}
☕ ChickenMenu.java
public class ChickenMenu {
String name;
int price;
String cook = "fry";
ChickenMenu (String name, int price) {
this.name = name;
this.price = price;
}
ChickenMenu (String name, int price, String cook) {
this.name = name;
this.price = price;
this.cook = cook;
}
}
위의 코드를 보면 생성자가 두개 있는 것을 알 수 있는데, 두번째 생성자는 인자가 하나 더 있다. 딱 떠오르는게 메소드에서 배운 오버로딩이다. 즉 이 치킨 메뉴가 인스턴스가 만들어진 방식을 두가지로 정의할 수 있다는 것이다. 첫번째 생성자로 생성하면 String cook = "fry"가 기본값으로 들어가서 이렇게 생성된 것은 전부 튀기는 메뉴가 될 것이다.
☕ Main.java
ChickenMenu[] menus = {
new ChickenMenu("후라이드", 10000),
new ChickenMenu("양념치킨", 12000),
new ChickenMenu("화덕구이", 15000, "bake")
};
YalcoChicken store1 = new YalcoChicken(3, "판교", menus);
ChickenMenu order1 = store1.orderMenu("양념치킨");
ChickenMenu order2 = store1.orderMenu("오븐구이");
int int1 = 1;
int int2 = int1;
int1 = 2;
String str1 = "헬로";
String str2 = str1;
str2 = "월드";
ChickenMenu menu1 = new ChickenMenu("후라이드", 1000);
ChickenMenu menu2 = menu1;
menu1.price = 1200;
menu2의 가격 확인 public static void raisePrice (int avg, ChickenMenu menu, int amount) {
avg += amount; // 원시자료형을 바꾸는거라 원본에 변화x
menu.price += amount;
}
int avgChickenPrice = 12000;
ChickenMenu chickenMenu1 = new ChickenMenu("양념치킨", 12000);
raisePrice(avgChickenPrice, chickenMenu1, 1000);