From a46fa43c21d26d4fa4491fadc3d7a2bcea6a686c Mon Sep 17 00:00:00 2001 From: SuHyun Date: Tue, 16 Jun 2026 15:40:46 +0900 Subject: [PATCH 1/4] =?UTF-8?q?beforetest.260616=5F18=5F=EC=84=9C=EC=88=98?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0-\354\273\254\353\240\211\354\205\230.md" | 2 +- .../2026-06-16-\354\203\201\354\206\215.md" | 75 +++++++++++++++++++ game/src/game.puml | 18 +++++ .../main/java/com/survivalcoding/Hero.java | 23 +++--- .../main/java/com/survivalcoding/Main.java | 10 ++- .../main/java/com/survivalcoding/Person.java | 14 ++-- .../java/com/survivalcoding/PoisonSlime.java | 23 ++++++ .../main/java/com/survivalcoding/Quiz.java | 48 ++++++------ .../main/java/com/survivalcoding/Slime.java | 16 ++++ .../java/com/survivalcoding/SuperHero.java | 19 +++++ .../java/com/survivalcoding/HeroTest.java | 8 +- .../java/com/survivalcoding/PersonTest.java | 20 +++++ .../com/survivalcoding/PoisonSlimeTest.java | 31 ++++++++ .../java/com/survivalcoding/WandTest.java | 5 ++ 14 files changed, 265 insertions(+), 47 deletions(-) create mode 100644 "TIL/sample/2026-06-16-\354\203\201\354\206\215.md" create mode 100644 game/src/game.puml create mode 100644 game/src/main/java/com/survivalcoding/PoisonSlime.java create mode 100644 game/src/main/java/com/survivalcoding/Slime.java create mode 100644 game/src/main/java/com/survivalcoding/SuperHero.java create mode 100644 game/src/test/java/com/survivalcoding/PersonTest.java create mode 100644 game/src/test/java/com/survivalcoding/PoisonSlimeTest.java diff --git "a/TIL/sample/2026-06-15-\354\272\241\354\212\220-\354\273\254\353\240\211\354\205\230.md" "b/TIL/sample/2026-06-15-\354\272\241\354\212\220-\354\273\254\353\240\211\354\205\230.md" index 463ad8f..157c23f 100644 --- "a/TIL/sample/2026-06-15-\354\272\241\354\212\220-\354\273\254\353\240\211\354\205\230.md" +++ "b/TIL/sample/2026-06-15-\354\272\241\354\212\220-\354\273\254\353\240\211\354\205\230.md" @@ -19,7 +19,7 @@ Set : 순서가 없는 집합 (중복 불가) - 컬렉션은 기본형(int, double, boolean 등)을 취급할 수 없다 -## 기억할 것 +## 기억할 것- - 멤버에 대한 접근 : 필드는 private 메소드는 public 클래스 엑세스 지정은 public로 알괄 지정, package private 지정 멤버나 클래스는 통일 패키지내의 클래스에서만 접근 가능 - 리스트와 배열을 비슷 하지만 서로 차이가 있다. 배열은 처음 선언시 메모리 공간이 고정적이고, 리스트는 가변적으로 지정 가능(데이터가 추가 또는 삭제 될 때 크기를 동적으로 늘리거나 줄어듬) diff --git "a/TIL/sample/2026-06-16-\354\203\201\354\206\215.md" "b/TIL/sample/2026-06-16-\354\203\201\354\206\215.md" new file mode 100644 index 0000000..15242f8 --- /dev/null +++ "b/TIL/sample/2026-06-16-\354\203\201\354\206\215.md" @@ -0,0 +1,75 @@ +# 2026-06-08 함수 + +## 오늘 배운 내용 + +- 상속/ + 이전의 만든 클래스와 닮았지만 일부 다른 클래스 + 이전의 만든 클래스에서 함수를 불러옴 +- 기존의 복사 붙여 넣기/ + 추가, 수정에 시간이 걸리고 소스의 파악이나 관리가 어려워 진다. -> 그래서 나온 해결책이 상속 +- 오버라이드/ 부모 클래스의 메서드를 자식 클래스에서 재 작성 할 경우 오버라이드(override)라 부름 + +- 인스턴스/ + 인스턴스는 내부에 부모클래스의 인스턴스를 가지는 다중구조를 가진다. + 보다 외측의 인스턴스에 속하는 메소드가 우선적으로 동작한다. + 외측의 인스턴스에 속하는 메소드는 super 을 사용하여 내측 인스턴스의 멤버에 점근할 수 있다. +- super()/ super는 부모 클래스를 가리키는 키워드. 부모 기능을 유지하면서 추가 기능을 덧 붙일 때 사용. +- 생성자 동작/ 다중구조의 인스턴스가 생성되는데, JVM 는 자동적으로 가장 외측 인스턴스의 생성자를 호출. + 모든 생성자는, “부모 인스턴스의 생성자"를 호출 할 필요가 있다. + 생성자의 선두에 super() 가 없으면, 암묵적인 “super();” 가 추가 됨. + +## 기억할 것 + +```java +public class Hero { + public Hero() { + System.out.println("Hero 생성자"); + } +} + +public class superHero extends Hero { + public superHero() { + System.out.println("superHero 생성자"); + } +} + +public calss Main{ + +public static void main(String[] args) { + SuperHero superHero = new SuperHero(); +} +} +//이런 상황에서 +//Hero 생성자 먼저 출력 후 superHero 생성자 다음 출력 +``` + +- extends로 클래스 상속을 표시 +- super는 반드시 생성자 첫줄에 쓴다 +- is a 원칙 (~은(는) 이다.)/ + 한 클래스와 다른 클래스의 상속 관계를 a는 b에 속해 있다는 것으로 표기하면 이해하기 쉽다. + 개념적으로 관계성이 없는 상속은 잘못된 상속. +- 자식 클래스는 구체화, 부모 클래스는 추상화 (예: 부모 클래스로 엔진/ 자식 클래스로 자동차, 배, 비행기, 로켓) + +## 실습 코드 + +```java + + + + + +``` + +## 어려웠던 점 + +- is a 원칙대로 클래스 이름을 정의 하려고 하니 단어가 잘 생각이 안난다. +- + +## 해결 방법 + +- AI를 통해 단어들을 찾거나 인터넷에 검색을 하여 클래스 이름을 검색 하였다. +- + +## 내일 더 공부할 것 + +- 클래스 상속 활용 diff --git a/game/src/game.puml b/game/src/game.puml new file mode 100644 index 0000000..0ea7d6e --- /dev/null +++ b/game/src/game.puml @@ -0,0 +1,18 @@ +@startuml +scale 4 + +class SuperHero extends Hero{ + +void setFlying(bool flying) + +boolean isFlying() +} +class Hero { + - int hp + - String name + + void attack +} + +class Wizard{ + - int a +} + +@enduml \ No newline at end of file diff --git a/game/src/main/java/com/survivalcoding/Hero.java b/game/src/main/java/com/survivalcoding/Hero.java index 2c3b2b2..b2dd122 100644 --- a/game/src/main/java/com/survivalcoding/Hero.java +++ b/game/src/main/java/com/survivalcoding/Hero.java @@ -3,8 +3,8 @@ import java.util.Random; public class Hero { - public String name; - public int hp; + private String name; + private int hp; //Sword sword; static int money = 100; @@ -17,10 +17,16 @@ static void setRandomMoney() { //setter 값을 입력 - void setHp(int hp) { + public void setHp(int hp) { + this.hp = hp; } + // getter 값을 불러오기 + int getHp() { + return hp; + } + void setName(String name) { if (name == null) { throw new IllegalArgumentException("이름이 null 일 수는 없습니다."); @@ -30,12 +36,7 @@ void setName(String name) { } this.name = name; } - - // getter 값을 불러오기 - int getHp() { - return hp; - } - + Hero() { this.name = "홍길동"; @@ -52,4 +53,8 @@ void attack() { hp -= 1; System.out.println("공격했다"); } + + void heroRun() { + System.out.println("RUN"); + } } diff --git a/game/src/main/java/com/survivalcoding/Main.java b/game/src/main/java/com/survivalcoding/Main.java index a02fe5f..eb77b0d 100644 --- a/game/src/main/java/com/survivalcoding/Main.java +++ b/game/src/main/java/com/survivalcoding/Main.java @@ -8,9 +8,17 @@ public static void main(String[] args) { //용사 생성 (ram 메모리에 용사 데이터 올리기) Hero hero = new Hero(); - hero.setName(""); //Hero.hp = 10; + PoisonSlime slimeA = new PoisonSlime("A"); + slimeA.poisonSlimeAttack(hero); + slimeA.poisonSlimeAttack(hero); + slimeA.poisonSlimeAttack(hero); + slimeA.poisonSlimeAttack(hero); + slimeA.poisonSlimeAttack(hero); + slimeA.poisonSlimeAttack(hero); + slimeA.poisonSlimeAttack(hero); + } } \ No newline at end of file diff --git a/game/src/main/java/com/survivalcoding/Person.java b/game/src/main/java/com/survivalcoding/Person.java index 19ac447..226f94a 100644 --- a/game/src/main/java/com/survivalcoding/Person.java +++ b/game/src/main/java/com/survivalcoding/Person.java @@ -17,8 +17,8 @@ public static void main(String[] args) { ArrayList names = new ArrayList<>(); - names.add("홍길동"); - names.add("한석봉"); + names.add("HONGGILDONG"); + names.add("HANSUKBONG"); Iterator it = names.iterator(); while (it.hasNext()) { @@ -28,19 +28,19 @@ public static void main(String[] args) { //컬렉션 2 List people = new ArrayList<>(); - people.add(new Person("홍길동", 20)); - people.add(new Person("한석봉", 25)); + people.add(new Person("HONGGILDONG", 20)); + people.add(new Person("HANSUKBONG", 25)); for (Person person : people) { - System.out.println(person.getName() + "의 나이는 " + person.getAge() + "살"); + System.out.println(person.getName() + "'s age is " + person.getAge() + "years old"); } } - private String getName() { + String getName() { return name; } - private int getAge() { + int getAge() { return age; } diff --git a/game/src/main/java/com/survivalcoding/PoisonSlime.java b/game/src/main/java/com/survivalcoding/PoisonSlime.java new file mode 100644 index 0000000..3583c65 --- /dev/null +++ b/game/src/main/java/com/survivalcoding/PoisonSlime.java @@ -0,0 +1,23 @@ +package com.survivalcoding; + +public class PoisonSlime extends Slime { + + private int poisonCount = 5; + + public PoisonSlime(String suffix) { + super(suffix); + } + + public void poisonSlimeAttack(Hero hero) { + super.attack(hero); + + if (poisonCount <= 0) { + System.out.println("poisoned!"); + int poisonDamage = hero.getHp() / 5; + hero.setHp(hero.getHp() - poisonDamage); + System.out.println(poisonDamage + " point damage"); + + } + poisonCount--; + } +} diff --git a/game/src/main/java/com/survivalcoding/Quiz.java b/game/src/main/java/com/survivalcoding/Quiz.java index 4aac35c..725ff22 100644 --- a/game/src/main/java/com/survivalcoding/Quiz.java +++ b/game/src/main/java/com/survivalcoding/Quiz.java @@ -2,29 +2,29 @@ public class Quiz { public static void main(String[] args) { - Hero hero1 = new Hero(); - hero1.hp = 100; - Hero hero2 = hero1; - hero2.hp = 200; - System.out.println(hero1.hp); - - Wizard wizard; - int number = 100; - int number2 = number; - number2 = 200; - System.out.println(number); - - System.out.println("=========="); - System.out.println(hero1.hp); - System.out.println(hero1.money); - System.out.println("=========="); - - Hero hero3 = new Hero("서수현"); - - System.out.println(hero3.hp); - System.out.println(hero3.name); - System.out.println(Hero.money); - - Hero.money = 200; +// Hero hero1 = new Hero(); +// hero1.hp = 100; +// Hero hero2 = hero1; +// hero2.hp = 200; +// System.out.println(hero1.hp); +// +// Wizard wizard; +// int number = 100; +// int number2 = number; +// number2 = 200; +// System.out.println(number); +// +// System.out.println("=========="); +// System.out.println(hero1.hp); +// System.out.println(hero1.money); +// System.out.println("=========="); +// +// Hero hero3 = new Hero("서수현"); +// +// System.out.println(hero3.hp); +// System.out.println(hero3.name); +// System.out.println(Hero.money); +// +// Hero.money = 200; } } diff --git a/game/src/main/java/com/survivalcoding/Slime.java b/game/src/main/java/com/survivalcoding/Slime.java new file mode 100644 index 0000000..202d225 --- /dev/null +++ b/game/src/main/java/com/survivalcoding/Slime.java @@ -0,0 +1,16 @@ +package com.survivalcoding; + +public class Slime { + final String suffix; + private int hp; + + public Slime(String suffix) { + this.suffix = suffix; + } + + public void attack(Hero hero) { + System.out.println("slime " + suffix + " is attacked"); + System.out.println("-10 Damage"); + hero.setHp(hero.getHp() - 10); + } +} diff --git a/game/src/main/java/com/survivalcoding/SuperHero.java b/game/src/main/java/com/survivalcoding/SuperHero.java new file mode 100644 index 0000000..345ad68 --- /dev/null +++ b/game/src/main/java/com/survivalcoding/SuperHero.java @@ -0,0 +1,19 @@ +package com.survivalcoding; + +public class SuperHero extends Hero { + private boolean isFlying; + + public static void main(String[] args) { + SuperHero superHero = new SuperHero(); + superHero.heroRun(); + + + } + + public void attack(int age) { + if (isFlying) { + System.out.println("한번더"); + } + super.attack(); + } +} diff --git a/game/src/test/java/com/survivalcoding/HeroTest.java b/game/src/test/java/com/survivalcoding/HeroTest.java index 15612e4..35cf1cd 100644 --- a/game/src/test/java/com/survivalcoding/HeroTest.java +++ b/game/src/test/java/com/survivalcoding/HeroTest.java @@ -3,8 +3,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - class HeroTest { @Test @@ -15,16 +13,16 @@ void attack() { Hero hero = new Hero(); Hero hero1 = new Hero("홍길동"); //when 실행 - hero.hp = 10; + //hero.hp = 10; hero.attack(); //9 hero.attack(); //8 // then (검증) - assertEquals(9, hero.hp); // 9 + //assertEquals(9, hero.hp); // 9 hero.attack(); // 8 // then (검증) - assertEquals(8, hero.hp); // 8 + //assertEquals(8, hero.hp); // 8 } } \ No newline at end of file diff --git a/game/src/test/java/com/survivalcoding/PersonTest.java b/game/src/test/java/com/survivalcoding/PersonTest.java new file mode 100644 index 0000000..38616e1 --- /dev/null +++ b/game/src/test/java/com/survivalcoding/PersonTest.java @@ -0,0 +1,20 @@ +package com.survivalcoding; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class PersonTest { + @Test + void 이름_정상_설정() { + Person p = new Person("홍길동", 20); + assertEquals("홍길동", p.getName()); + } + + @Test + void 나이_정상_설정() { + Person p = new Person("홍길동", 20); + assertEquals(20, p.getAge()); + } + +} \ No newline at end of file diff --git a/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java b/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java new file mode 100644 index 0000000..6af6191 --- /dev/null +++ b/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java @@ -0,0 +1,31 @@ +package com.survivalcoding; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class PoisonSlimeTest { + //public static void main(String[] args) { + + //용사 생성 (ram 메모리에 용사 데이터 올리기) + @Test + //given + void given() { + Hero hero = new Hero(); + PoisonSlime slimeA = new PoisonSlime("A"); + } + + //when + @Test + @DisplayName("PoisonSlimeTest") + void when() { + + for (int i = 0; i < 10; i++) { + slimeA.poisonSlimeAttack(hero); + } + } + + //then + void then() { + assert (slimeA.poisonSlimeAttack(hero)); + } +} \ No newline at end of file diff --git a/game/src/test/java/com/survivalcoding/WandTest.java b/game/src/test/java/com/survivalcoding/WandTest.java index 0e3cab2..a01ecdc 100644 --- a/game/src/test/java/com/survivalcoding/WandTest.java +++ b/game/src/test/java/com/survivalcoding/WandTest.java @@ -1,5 +1,10 @@ package com.survivalcoding; class WandTest { +// private final double power; +// private static final String name = ""; +// @Test +// @DisplayName("지팡이 이름 null 및 3글자 미만 처리") + } \ No newline at end of file From 23730646bd610c186e9d179a0fd0d76dc940cec0 Mon Sep 17 00:00:00 2001 From: SuHyun Date: Tue, 16 Jun 2026 16:03:44 +0900 Subject: [PATCH 2/4] beforewizardtest.260616 --- .../java/com/survivalcoding/GreatWizard.java | 4 ++++ .../main/java/com/survivalcoding/Hero.java | 4 ++-- .../main/java/com/survivalcoding/Main.java | 15 ++++--------- .../java/com/survivalcoding/PoisonSlime.java | 4 ++-- .../main/java/com/survivalcoding/Slime.java | 4 ++-- .../main/java/com/survivalcoding/Wizard.java | 11 +++++++++- .../com/survivalcoding/PoisonSlimeTest.java | 22 +++++++------------ .../java/com/survivalcoding/WandTest.java | 13 ++++++----- 8 files changed, 40 insertions(+), 37 deletions(-) create mode 100644 game/src/main/java/com/survivalcoding/GreatWizard.java diff --git a/game/src/main/java/com/survivalcoding/GreatWizard.java b/game/src/main/java/com/survivalcoding/GreatWizard.java new file mode 100644 index 0000000..a1fba5e --- /dev/null +++ b/game/src/main/java/com/survivalcoding/GreatWizard.java @@ -0,0 +1,4 @@ +package com.survivalcoding; + +public class GreatWizard { +} diff --git a/game/src/main/java/com/survivalcoding/Hero.java b/game/src/main/java/com/survivalcoding/Hero.java index b2dd122..5d478e2 100644 --- a/game/src/main/java/com/survivalcoding/Hero.java +++ b/game/src/main/java/com/survivalcoding/Hero.java @@ -4,7 +4,7 @@ public class Hero { private String name; - private int hp; + private int hp = 10; //Sword sword; static int money = 100; @@ -36,7 +36,7 @@ void setName(String name) { } this.name = name; } - + Hero() { this.name = "홍길동"; diff --git a/game/src/main/java/com/survivalcoding/Main.java b/game/src/main/java/com/survivalcoding/Main.java index eb77b0d..a53fb85 100644 --- a/game/src/main/java/com/survivalcoding/Main.java +++ b/game/src/main/java/com/survivalcoding/Main.java @@ -7,18 +7,11 @@ public static void main(String[] args) { //용사 생성 (ram 메모리에 용사 데이터 올리기) Hero hero = new Hero(); + Wizard wizard = new Wizard(); - //Hero.hp = 10; - - PoisonSlime slimeA = new PoisonSlime("A"); - slimeA.poisonSlimeAttack(hero); - slimeA.poisonSlimeAttack(hero); - slimeA.poisonSlimeAttack(hero); - slimeA.poisonSlimeAttack(hero); - slimeA.poisonSlimeAttack(hero); - slimeA.poisonSlimeAttack(hero); - slimeA.poisonSlimeAttack(hero); - + for (int i = 0; i < 20; i++) { + wizard.heal(hero); + } } } \ No newline at end of file diff --git a/game/src/main/java/com/survivalcoding/PoisonSlime.java b/game/src/main/java/com/survivalcoding/PoisonSlime.java index 3583c65..645d860 100644 --- a/game/src/main/java/com/survivalcoding/PoisonSlime.java +++ b/game/src/main/java/com/survivalcoding/PoisonSlime.java @@ -12,10 +12,10 @@ public void poisonSlimeAttack(Hero hero) { super.attack(hero); if (poisonCount <= 0) { - System.out.println("poisoned!"); + System.out.println("독포자를 살포 했다!"); int poisonDamage = hero.getHp() / 5; hero.setHp(hero.getHp() - poisonDamage); - System.out.println(poisonDamage + " point damage"); + System.out.println(poisonDamage + " 포인트 데미지"); } poisonCount--; diff --git a/game/src/main/java/com/survivalcoding/Slime.java b/game/src/main/java/com/survivalcoding/Slime.java index 202d225..f3c4c06 100644 --- a/game/src/main/java/com/survivalcoding/Slime.java +++ b/game/src/main/java/com/survivalcoding/Slime.java @@ -9,8 +9,8 @@ public Slime(String suffix) { } public void attack(Hero hero) { - System.out.println("slime " + suffix + " is attacked"); - System.out.println("-10 Damage"); + System.out.println("슬라임 " + suffix + " 이/가 공격했다."); + System.out.println("-10의 데미지"); hero.setHp(hero.getHp() - 10); } } diff --git a/game/src/main/java/com/survivalcoding/Wizard.java b/game/src/main/java/com/survivalcoding/Wizard.java index 6433b47..a969942 100644 --- a/game/src/main/java/com/survivalcoding/Wizard.java +++ b/game/src/main/java/com/survivalcoding/Wizard.java @@ -2,10 +2,19 @@ public class Wizard { private int hp; - private int mp; + private int mp = 100; private String name; private Wand wand; + void heal(Hero hero) { + if (this.mp <= 0) { + System.out.println("마나가 부족합니다."); + } + this.mp -= 10; + hero.setHp(getHp() + 20); + System.out.println("힐을 시전 하였습니다." + "대상 HP: " + hero.getHp()); + } + //getter public int getHp() { return hp; diff --git a/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java b/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java index 6af6191..bfbabf1 100644 --- a/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java +++ b/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java @@ -3,29 +3,23 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; + class PoisonSlimeTest { //public static void main(String[] args) { //용사 생성 (ram 메모리에 용사 데이터 올리기) @Test - //given - void given() { + @DisplayName("독슬라임 독 공격 테스트") + void test() { + //given Hero hero = new Hero(); PoisonSlime slimeA = new PoisonSlime("A"); - } - - //when - @Test - @DisplayName("PoisonSlimeTest") - void when() { - + //when for (int i = 0; i < 10; i++) { slimeA.poisonSlimeAttack(hero); } - } - - //then - void then() { - assert (slimeA.poisonSlimeAttack(hero)); + //then + assertTrue(hero.getHp() < 1000 - (10 * 10)); } } \ No newline at end of file diff --git a/game/src/test/java/com/survivalcoding/WandTest.java b/game/src/test/java/com/survivalcoding/WandTest.java index a01ecdc..a9abe26 100644 --- a/game/src/test/java/com/survivalcoding/WandTest.java +++ b/game/src/test/java/com/survivalcoding/WandTest.java @@ -1,10 +1,13 @@ package com.survivalcoding; -class WandTest { -// private final double power; -// private static final String name = ""; -// @Test -// @DisplayName("지팡이 이름 null 및 3글자 미만 처리") +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +class WandTest { + @Test + @DisplayName("마법사 테스트") + void test() { + int a; + } } \ No newline at end of file From 9284c6e49bb542b4aa8c1f277fc6feb44f0cfbbe Mon Sep 17 00:00:00 2001 From: SuHyun Date: Tue, 16 Jun 2026 17:13:52 +0900 Subject: [PATCH 3/4] =?UTF-8?q?260616=5F18=5F=EC=84=9C=EC=88=98=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-06-16-\354\203\201\354\206\215.md" | 76 ++++++++++++- .../java/com/survivalcoding/GreatWizard.java | 20 +++- .../main/java/com/survivalcoding/Hero.java | 6 +- .../main/java/com/survivalcoding/Main.java | 14 +-- .../main/java/com/survivalcoding/Wizard.java | 100 ++++++++++-------- .../java/com/survivalcoding/WandTest.java | 16 ++- 6 files changed, 173 insertions(+), 59 deletions(-) diff --git "a/TIL/sample/2026-06-16-\354\203\201\354\206\215.md" "b/TIL/sample/2026-06-16-\354\203\201\354\206\215.md" index 15242f8..9e9098b 100644 --- "a/TIL/sample/2026-06-16-\354\203\201\354\206\215.md" +++ "b/TIL/sample/2026-06-16-\354\203\201\354\206\215.md" @@ -53,23 +53,93 @@ public static void main(String[] args) { ## 실습 코드 ```java +public class Wizard { + private int hp; + private int mp; + //private int mp = 100; + private String name; + private Wand wand; + + public void wizard(int mp) { + //if (this.mp < mp) { + this.mp = mp; + //} + } + + public void heal(Hero hero) { + if (this.mp <= 0) { + System.out.println("마나가 부족합니다."); + } + this.mp -= 10; + hero.setHp(hero.getHp() + 20); + System.out.println("힐을 시전 하였습니다. 대상 HP: " + hero.getHp()); + } + + public void setMp(int mp) { + this.mp = mp; + } + public int getMp() { + return mp; + } + +} +public class GreatWizard extends Wizard { + int mp = 150; + + public GreatWizard(int mp) { + super.wizard(mp); + } + public void heal(Hero hero) { + super.heal(hero); + super.setMp(getMp() + 5); + hero.setHp(hero.getHp() + 5); + } + + public void superHeal(Hero hero) { + super.setMp(getMp() - 40); + hero.maxHp(); + System.out.println("슈퍼 힐을 시전 했습니다. 대상 HP: " + hero.getHp()); + } +} + +class WandTest { + @Test + @DisplayName("마법사 테스트") + void test() { + //given + Hero hero = new Hero(); + GreatWizard greatWizard = new GreatWizard(150); + //when 1 + for (int i = 0; i < 5; i++) { + greatWizard.heal(hero); + } + //then 1 + assertEquals(225, hero.getHp()); + //when 2 + greatWizard.superHeal(hero); + //then 2 + assertEquals(100, hero.getHp()); + } + +} + ``` ## 어려웠던 점 - is a 원칙대로 클래스 이름을 정의 하려고 하니 단어가 잘 생각이 안난다. -- +- 사실상 상속 개념을 처음으로 실습해서 부모 클래스에서 만든 메서드를 지속해서 망각 했다. ## 해결 방법 - AI를 통해 단어들을 찾거나 인터넷에 검색을 하여 클래스 이름을 검색 하였다. -- +- 교보재 보면서 천천히 코드를 작성 했다. ## 내일 더 공부할 것 -- 클래스 상속 활용 +- 클래스 상속 활용 방법 \ No newline at end of file diff --git a/game/src/main/java/com/survivalcoding/GreatWizard.java b/game/src/main/java/com/survivalcoding/GreatWizard.java index a1fba5e..5558075 100644 --- a/game/src/main/java/com/survivalcoding/GreatWizard.java +++ b/game/src/main/java/com/survivalcoding/GreatWizard.java @@ -1,4 +1,22 @@ package com.survivalcoding; -public class GreatWizard { +public class GreatWizard extends Wizard { + int mp = 150; + + public GreatWizard(int mp) { + super.wizard(mp); + } + + + public void heal(Hero hero) { + super.heal(hero); + super.setMp(getMp() + 5); + hero.setHp(hero.getHp() + 5); + } + + public void superHeal(Hero hero) { + super.setMp(getMp() - 40); + hero.maxHp(); + System.out.println("슈퍼 힐을 시전 했습니다. 대상 HP: " + hero.getHp()); + } } diff --git a/game/src/main/java/com/survivalcoding/Hero.java b/game/src/main/java/com/survivalcoding/Hero.java index 5d478e2..6c763d3 100644 --- a/game/src/main/java/com/survivalcoding/Hero.java +++ b/game/src/main/java/com/survivalcoding/Hero.java @@ -4,7 +4,8 @@ public class Hero { private String name; - private int hp = 10; + private int hp = 0; + private int maxHP = 100; //Sword sword; static int money = 100; @@ -15,6 +16,9 @@ static void setRandomMoney() { hero.name = "홍길동"; } + public void maxHp() { + this.hp = maxHP; + } //setter 값을 입력 public void setHp(int hp) { diff --git a/game/src/main/java/com/survivalcoding/Main.java b/game/src/main/java/com/survivalcoding/Main.java index a53fb85..01e6bff 100644 --- a/game/src/main/java/com/survivalcoding/Main.java +++ b/game/src/main/java/com/survivalcoding/Main.java @@ -6,12 +6,12 @@ public class Main { public static void main(String[] args) { //용사 생성 (ram 메모리에 용사 데이터 올리기) - Hero hero = new Hero(); - Wizard wizard = new Wizard(); - - - for (int i = 0; i < 20; i++) { - wizard.heal(hero); - } +// Hero hero = new Hero(); +// Wizard wizard = new GreatWizard(100); +// +// +// for (int i = 0; i < 20; i++) { +// wizard.heal(hero); +// } } } \ No newline at end of file diff --git a/game/src/main/java/com/survivalcoding/Wizard.java b/game/src/main/java/com/survivalcoding/Wizard.java index a969942..6d39415 100644 --- a/game/src/main/java/com/survivalcoding/Wizard.java +++ b/game/src/main/java/com/survivalcoding/Wizard.java @@ -2,76 +2,84 @@ public class Wizard { private int hp; - private int mp = 100; + private int mp; + //private int mp = 100; private String name; private Wand wand; - void heal(Hero hero) { + public void wizard(int mp) { + //if (this.mp < mp) { + this.mp = mp; + //} + } + + public void heal(Hero hero) { if (this.mp <= 0) { System.out.println("마나가 부족합니다."); } this.mp -= 10; - hero.setHp(getHp() + 20); - System.out.println("힐을 시전 하였습니다." + "대상 HP: " + hero.getHp()); + hero.setHp(hero.getHp() + 20); + System.out.println("힐을 시전 하였습니다. 대상 HP: " + hero.getHp()); } - //getter - public int getHp() { - return hp; + public void setMp(int mp) { + this.mp = mp; } public int getMp() { return mp; } - public String getName() { - return name; - } - - public Wand getWand() { - return wand; - } - - //setter - public void setHp(int hp) { - if (hp < 0) hp = 0; // HP가 음수면 0으로 - if (hp > 999) hp = 999; - this.hp = hp; - } - - public void setMp(int mp) { - if (mp < 0) mp = 0; // HP가 음수면 0으로 - if (mp > 999) mp = 999; - this.mp = mp; - } - - public void setName(String name) { - if (name == null) { - throw new IllegalArgumentException("이름이 null 일 수는 없습니다."); - } - if (name.length() < 3) { - throw new IllegalArgumentException("이름은 3글자 이상이여야 합니다."); - } +} - this.name = name; - } +// public String getName() { +// return name; +// } +// +// public Wand getWand() { +// return wand; +// } - public void setWand(Wand wand) { - if (wand == null) { - throw new IllegalArgumentException("지팡이가 null일 수는 없습니다."); - } - this.wand = wand; - } - //setter +//setter +// public void setHp(int hp) { +// if (hp < 0) hp = 0; // HP가 음수면 0으로 +// if (hp > 999) hp = 999; +// this.hp = hp; +// } +// +// public void setMp(int mp) { +// if (mp < 0) mp = 0; // HP가 음수면 0으로 +// if (mp > 999) mp = 999; +// this.mp = mp; +// } +// +// public void setName(String name) { +// if (name == null) { +// throw new IllegalArgumentException("이름이 null 일 수는 없습니다."); +// } +// if (name.length() < 3) { +// throw new IllegalArgumentException("이름은 3글자 이상이여야 합니다."); +// } +// +// this.name = name; +// } +// +// public void setWand(Wand wand) { +// if (wand == null) { +// throw new IllegalArgumentException("지팡이가 null일 수는 없습니다."); +// } +// this.wand = wand; +// } +//setter // public void heal(Hero hero) { // int basePoint = 10; // int recovPoint = (int) (basePoint * this.wand.getPower()); // hero.setHp(hero.getHp() + recovPoint); // } - //getter +//getter // public int power() { // // } -} + diff --git a/game/src/test/java/com/survivalcoding/WandTest.java b/game/src/test/java/com/survivalcoding/WandTest.java index a9abe26..e7400ad 100644 --- a/game/src/test/java/com/survivalcoding/WandTest.java +++ b/game/src/test/java/com/survivalcoding/WandTest.java @@ -3,11 +3,25 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + class WandTest { @Test @DisplayName("마법사 테스트") void test() { - int a; + //given + Hero hero = new Hero(); + GreatWizard greatWizard = new GreatWizard(150); + //when 1 + for (int i = 0; i < 5; i++) { + greatWizard.heal(hero); + } + //then 1 + assertEquals(225, hero.getHp()); + //when 2 + greatWizard.superHeal(hero); + //then 2 + assertEquals(100, hero.getHp()); } } \ No newline at end of file From b2849b5a8937cd52b810f2e6377618d456a0f669 Mon Sep 17 00:00:00 2001 From: SuHyun Date: Tue, 16 Jun 2026 17:28:00 +0900 Subject: [PATCH 4/4] =?UTF-8?q?260616=5F18=5F=EC=84=9C=EC=88=98=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/src/game.puml | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/game/src/game.puml b/game/src/game.puml index 0ea7d6e..93d2285 100644 --- a/game/src/game.puml +++ b/game/src/game.puml @@ -1,18 +1,39 @@ @startuml -scale 4 -class SuperHero extends Hero{ - +void setFlying(bool flying) - +boolean isFlying() -} class Hero { - - int hp - - String name - + void attack + - name: String + - hp: int + - maxHP: int + -- + + maxHp() + + setHp(hp: int) + + getHp(): int + + setRandomMoney() {static} +} + +class Wizard { + - hp: int + - mp: int + - name: String + - wand: Wand + -- + + wizard(mp: int) + + heal(hero: Hero) + + setMp(mp: int) + + getMp(): int + + getHp(): int + + setHp(hp: int) } -class Wizard{ - - int a +class GreatWizard extends Wizard { + - mp: int + -- + + GreatWizard(mp: int) + + heal(hero: Hero) + + superHeal(hero: Hero) } +Wizard ..> Hero : heal(hero) +GreatWizard ..> Hero : heal(hero) + @enduml \ No newline at end of file