From 1507106786903c34386edac469936be1e75fc631 Mon Sep 17 00:00:00 2001 From: mj Date: Tue, 16 Jun 2026 17:12:52 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EC=83=81=EC=86=8D=20(Inheritance)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-06-15-\354\240\225\353\246\254.md" | 8 +- .../2026-06-16-\354\240\225\353\246\254.md" | 75 +++++++++++++++++++ game/game.puml | 18 +++++ .../main/java/com/survivalcoding/Hero.java | 18 +++++ .../java/com/survivalcoding/PersonPerson.java | 7 +- .../java/com/survivalcoding/PoisonSlime.java | 24 ++++++ .../main/java/com/survivalcoding/Slime.java | 18 +++++ .../src/main/java/com/survivalcoding/all.java | 21 ------ .../com/survivalcoding/PoisonSlimeTest.java | 16 ++++ 9 files changed, 176 insertions(+), 29 deletions(-) create mode 100644 "TIL/sample/2026-06-16-\354\240\225\353\246\254.md" create mode 100644 game/game.puml create mode 100644 game/src/main/java/com/survivalcoding/Hero.java create mode 100644 game/src/main/java/com/survivalcoding/PoisonSlime.java create mode 100644 game/src/main/java/com/survivalcoding/Slime.java delete mode 100644 game/src/main/java/com/survivalcoding/all.java create mode 100644 game/src/test/java/com/survivalcoding/PoisonSlimeTest.java diff --git "a/TIL/sample/2026-06-15-\354\240\225\353\246\254.md" "b/TIL/sample/2026-06-15-\354\240\225\353\246\254.md" index 34f7850..d21738f 100644 --- "a/TIL/sample/2026-06-15-\354\240\225\353\246\254.md" +++ "b/TIL/sample/2026-06-15-\354\240\225\353\246\254.md" @@ -16,7 +16,6 @@ ▷ ArrayList로 <>안에 넣어 타입을 참조할 수 있도록 한다. ▷ add()로 데이터 추가 ▷ 🥲 get(index)로 꺼냄 || class에서 final 변수 일때에도 get+변수(){}이런 형식으로 작성 - - setter 내부에서 타당성 검사 throw new IllegalArgumentException(“메세지");” 를 작성하여 프로그램을 중단 @@ -41,7 +40,12 @@ { void 변수 } -- [단축키] + [생성자 오버로드] :: 하나의 생성자 + 타입이 다른 여러 방법의 정의 형태 + Hero() {} + Hero(String name) {} + Hero(String name, int hp) {} + [단축키] + - Ctrl+Alt :: 함수가 작성된 실제 위치로 이동 - shift + F6 :: 이미 정해진 클래스 함수의 이름을 전체 변경하려 할때 diff --git "a/TIL/sample/2026-06-16-\354\240\225\353\246\254.md" "b/TIL/sample/2026-06-16-\354\240\225\353\246\254.md" new file mode 100644 index 0000000..f37e4e0 --- /dev/null +++ "b/TIL/sample/2026-06-16-\354\240\225\353\246\254.md" @@ -0,0 +1,75 @@ +# 2026-06-16 + +## 오늘 배운 내용 + +- exdends 상속선언 :: public class SuperHero extends Hero { } +- super() :: 부모 생성자 호출(반드시 첫 줄에) :: public SuperHero(String name, int hp) { super(name, hp); } +- super.메소드() :: 부모 메소드(함수)도 함께 실행하고 싶을때 :: @Override public void attack(Slime slime) { super.attack(slime); } +- @Override :: 부모 메소드(함수)를 자식이 재사용 시 :: @Override public void run() { System.out.println("멋지게 퇴각했다"); } +- final :: 상속/오버라이드 금지가 되는 상수 선언 + public final class String { } // 이 클래스는 상속 불가 + public final void slip() { } // 이 메소드는 오버라이드 불가 + [ 상속 가능 is-a 원칙] :: 자식 is a 부모 와 같이 문장이 자연스러으면 되 + +[생성자 오버로드 Overload] :: 하나의 생성자 + 타입이 다른 여러 방법의 정의 형태 +Hero() {} +Hero(String name) {} +Hero(String name, int hp) {} + +️ 🔐📌 초기화 값이 존재하는 부모 클래스 생성자 ➡️ 자식 클래스를 생성 가능 +[부모에 덮어쓰기 오버라이드 Override] :: +class Animal { +void speak() { System.out.println("..."); } +} +@Override ◀ 오버라이드(재정의) 할 때 꼭 쓰기 + +⭐ 자식:: Dog | 부모:: extends Animal ⭐ +↓ ↓ +class Dog extends Animal { +void speak() { System.out.println("멍멍!"); } // 부모 걸 덮어씀 +} +@Override ◀ 오버라이드(재정의) 할 때 꼭 쓰기 +class Cat extends Animal { +void speak() { System.out.println("야옹~"); } +} +[⭐⭐ 인스턴트하기 위해서는 생성자가 필요 ⭐⭐] :: +public class Hero { // ← ①클래스 +private String name; +private int hp; +public Hero(String name, int hp) { // ← ②생성자 +this.name = name; +this.hp = hp; +} +Hero hero = new Hero("홍길동", 100); // ← ③인스턴스 +} +[ getter / setter 주로 쓰는 경우 ] :: + +- private 변수 접근할 때 +- 값 검증 시 +- final 상수는 getter만 사용 + + [단축키] :: +- Ctrl+Alt :: 함수가 작성된 실제 위치로 이동 +- Ctrl+B :: 함수 상속 위치 이동 +- shift + F6 :: 이미 정해진 클래스 함수의 이름을 전체 변경하려 할때 + +## 기억해야 할 내용 + +- TEST코드 파일은 항상 따로 만들어야 한다 + [테스트 파일 생성법] + 테스트 할 클래스 변수 클릭 ➡️ Generate ➡️ TEST 선택 ➡️ 해당 파일의 TEST 파일 생성 +- ex) WandTest (@Test) 항상 짝궁! 같이 있어야 한다 + [순서] + class 테스트이름Test { + ↓ + @Test + ↓ + void 테스트메소드() { } + +## 실습 코드 + +```java +public class Cleric { + + +} diff --git a/game/game.puml b/game/game.puml new file mode 100644 index 0000000..256b7ca --- /dev/null +++ b/game/game.puml @@ -0,0 +1,18 @@ +@startuml +scale 3 + +class SuperHero exdends Hero{ ++void setFlying(bool flying) ++bool isflying() +} + +class Hero{ +-int hp +-String name + ++void attack() +} + +class wizard{} + +@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 new file mode 100644 index 0000000..32d32d5 --- /dev/null +++ b/game/src/main/java/com/survivalcoding/Hero.java @@ -0,0 +1,18 @@ +package com.survivalcoding; + +public class Hero { + private int hp; + + public Hero(int hp) { + this.hp = hp; + } + + public int getHp() { + return hp; + } + + public void setHp(int hp) { + this.hp = hp; + } + +} diff --git a/game/src/main/java/com/survivalcoding/PersonPerson.java b/game/src/main/java/com/survivalcoding/PersonPerson.java index 9475c87..efd072c 100644 --- a/game/src/main/java/com/survivalcoding/PersonPerson.java +++ b/game/src/main/java/com/survivalcoding/PersonPerson.java @@ -34,12 +34,7 @@ public PersonPerson(String Name, int Age) { } -//컬렉션 - -//2장 연습문제 1 -//1),3)은 set으로 -//2)은 list로 - +//test 파일을 따로 만들지 않고 여기서 바로 작성한 것 class main { static void main() { List name = new ArrayList<>(); 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..97ad613 --- /dev/null +++ b/game/src/main/java/com/survivalcoding/PoisonSlime.java @@ -0,0 +1,24 @@ +package com.survivalcoding; +//Slime (부모) -> Extends Slime(자식) + +public class PoisonSlime extends Slime { + private int poisonCnt = 5; + + public PoisonSlime(String suffix) { + super(suffix); + } + + + @Override + public void attack(Hero hero) { + super.attack(hero); + if (poisonCnt > 0) { + System.out.println("슬라임 " + suffix + " 독 살포!"); + int damage = hero.getHp() / 5; + hero.setHp(hero.getHp() - damage); + System.out.println(damage + " 포인트 데미지"); + poisonCnt--; + } + + } +} 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..f479a9b --- /dev/null +++ b/game/src/main/java/com/survivalcoding/Slime.java @@ -0,0 +1,18 @@ +package com.survivalcoding; + +public class Slime { + final String suffix; //suffix은 슬라임 이름 + int hp; + + public Slime(String suffix) { + this.suffix = suffix; //값이 초기화 된 부모 생성자 ▶ 자식 클랙스에서 빨간 줄 없이 잘 굴러감 + } + + void attack(Hero hero) { + System.out.println("=========================="); + System.out.println("슬라임 " + suffix + " 이(가) 공격했다"); + System.out.println("10 의 데미지"); + hero.setHp(hero.getHp() - 10); + System.out.println("--------------------------"); + } +} diff --git a/game/src/main/java/com/survivalcoding/all.java b/game/src/main/java/com/survivalcoding/all.java deleted file mode 100644 index a55993b..0000000 --- a/game/src/main/java/com/survivalcoding/all.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.survivalcoding; - -//컬렉션 - -//2장 연습문제 1 -//1),3)은 set으로 -//2)은 list로 - - -import java.util.ArrayList; -import java.util.List; - -class all { - static void main() { - List name = new ArrayList<>(); - name.add(new PersonPerson("홍길동", 20)); - name.add(new PersonPerson("한석봉", 25)); - } - - -} 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..e8b69af --- /dev/null +++ b/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java @@ -0,0 +1,16 @@ +package com.survivalcoding; + +import org.junit.jupiter.api.Test; + +class PoisonSlimeTest { + + @Test + void attack() { + Hero h = new Hero(100); + PoisonSlime ps = new PoisonSlime("홍길홍길"); + ps.attack(h); + System.out.println("--------------------------"); + System.out.println("남은 HP : " + h.getHp()); + System.out.println("=========================="); + } +} \ No newline at end of file From 5092848b8a7e46186f47f9f9262b88611b8ea462 Mon Sep 17 00:00:00 2001 From: mj Date: Tue, 16 Jun 2026 17:45:25 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EC=83=81=EC=86=8D=20(Inheritance)=20[?= =?UTF-8?q?=EC=88=98=EC=A0=95=EB=82=B4=EC=9A=A9]=20PoisonSlimeTest=20?= =?UTF-8?q?=EC=9D=98=20println=EC=9D=84=20assertEquals72,=20h.getHp());?= =?UTF-8?q?=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/src/test/java/com/survivalcoding/PoisonSlimeTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java b/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java index e8b69af..c733198 100644 --- a/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java +++ b/game/src/test/java/com/survivalcoding/PoisonSlimeTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + class PoisonSlimeTest { @Test @@ -9,8 +11,7 @@ void attack() { Hero h = new Hero(100); PoisonSlime ps = new PoisonSlime("홍길홍길"); ps.attack(h); - System.out.println("--------------------------"); - System.out.println("남은 HP : " + h.getHp()); + assertEquals(72, h.getHp()); System.out.println("=========================="); } } \ No newline at end of file