From 6b2f847f8737f44be73a16b373bdb350d9c167b9 Mon Sep 17 00:00:00 2001 From: TaeHan Date: Mon, 9 Jun 2025 10:41:27 +0900 Subject: [PATCH 01/28] docs: README --- TIL/topics/java_basic/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 TIL/topics/java_basic/README.md diff --git a/TIL/topics/java_basic/README.md b/TIL/topics/java_basic/README.md new file mode 100644 index 00000000..e97f767f --- /dev/null +++ b/TIL/topics/java_basic/README.md @@ -0,0 +1 @@ +# 저는 구태한입니다. From 066e6ab7cc536504b76ae133c686317cdabad4a5 Mon Sep 17 00:00:00 2001 From: TaeHan Date: Tue, 10 Jun 2025 14:29:52 +0900 Subject: [PATCH 02/28] =?UTF-8?q?feat:=20Cleric=20class=20/=20test=20code?= =?UTF-8?q?=20for=20=ED=80=B4=EC=A6=881?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/survivalcoding/Main.java | 2 ++ .../exam01/Cleric.java | 18 +++++++++++++ .../exam01/Person.java | 27 ------------------- .../java/com/survivalcoding/Q250610Test.java | 15 +++++++++++ 4 files changed, 35 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java delete mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java create mode 100644 src/test/java/com/survivalcoding/Q250610Test.java diff --git a/src/main/java/com/survivalcoding/Main.java b/src/main/java/com/survivalcoding/Main.java index 0f5013a7..8e6fbb75 100644 --- a/src/main/java/com/survivalcoding/Main.java +++ b/src/main/java/com/survivalcoding/Main.java @@ -4,6 +4,8 @@ // click the icon in the gutter. public class Main { public static void main(String[] args) { + + System.out.print("Hello and welcome!"); for (int i = 1; i <= 5; i++) { diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java new file mode 100644 index 00000000..c59c4c70 --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java @@ -0,0 +1,18 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class Cleric { + + static final int MAX_HP = 50; + static final int MAX_MP = 10; + + public String name; + public int HP = MAX_HP; + public int MP = MAX_MP; + + public Cleric(String name) { + this.name = name; + } + + } + + diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java deleted file mode 100644 index 039b0123..00000000 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.survivalcoding.assignments_01_instance.exam01; - -public class Person { - private String name; - private int age; - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - - public String getName() { - return name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public static void main(String[] args) { - Person person = new Person("John", 30); - } -} diff --git a/src/test/java/com/survivalcoding/Q250610Test.java b/src/test/java/com/survivalcoding/Q250610Test.java new file mode 100644 index 00000000..e15c127d --- /dev/null +++ b/src/test/java/com/survivalcoding/Q250610Test.java @@ -0,0 +1,15 @@ +package com.survivalcoding; + +import com.survivalcoding.assignments_01_instance.exam01.Cleric; + +public class Q250610Test { + public static void main(String[] args) { + // Cleric 객체 생성 + Cleric cleric = new Cleric("Cleric"); + + // 값 출력 + System.out.println("Name: " + cleric.name); + System.out.println("HP: " + cleric.HP); + System.out.println("MP: " + cleric.MP); + } +} \ No newline at end of file From b980911ecdc7ae9fcc40a92729411a1433a2aacf Mon Sep 17 00:00:00 2001 From: TaeHan Date: Tue, 10 Jun 2025 15:15:52 +0900 Subject: [PATCH 03/28] =?UTF-8?q?feat:=20Cleric=20class=20/=20test=20code?= =?UTF-8?q?=20for=20=ED=80=B4=EC=A6=881(=EB=8B=A4=EC=8B=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/survivalcoding/Q250610Test.java | 3 +++ .../exam01/ClericTest.java | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java diff --git a/src/test/java/com/survivalcoding/Q250610Test.java b/src/test/java/com/survivalcoding/Q250610Test.java index e15c127d..600d8629 100644 --- a/src/test/java/com/survivalcoding/Q250610Test.java +++ b/src/test/java/com/survivalcoding/Q250610Test.java @@ -11,5 +11,8 @@ public static void main(String[] args) { System.out.println("Name: " + cleric.name); System.out.println("HP: " + cleric.HP); System.out.println("MP: " + cleric.MP); + + } + } \ No newline at end of file diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java new file mode 100644 index 00000000..246dc9ff --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java @@ -0,0 +1,23 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; + +import static org.junit.jupiter.api.Assertions.*; + +class ClericTest { +@Test +@DisplayName("Cleric 생성자 테스트, 이름과 HP/MP 초기화") + +void testClericConstructor() { +// given(준비) + final String Name = "Cleric"; +//when(실행) + final Cleric cleric = new Cleric(Name); + + //then(검증) + assertEquals(Name, cleric.name); + assertEquals(Cleric.MAX_HP, cleric.HP); + assertEquals(Cleric.MAX_MP, cleric.MP); +} +} \ No newline at end of file From 2337037eb598bc067275e79f03ffe8f5cb3ef325 Mon Sep 17 00:00:00 2001 From: TaeHan Date: Tue, 10 Jun 2025 15:51:35 +0900 Subject: [PATCH 04/28] =?UTF-8?q?feat:=20Cleric=20class=20/=20test=20code?= =?UTF-8?q?=20for=20=ED=80=B4=EC=A6=882=20self.Aid()=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=8B=9C=20MP=20=EC=B6=A9=EB=B6=84=ED=95=A0=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20self.Aid()=EC=82=AC=EC=9A=A9=EC=8B=9C=20MP=20?= =?UTF-8?q?=EB=B6=80=EC=A1=B1=ED=95=9C=20=EA=B2=BD=EC=9A=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/Cleric.java | 15 ++++++++ .../exam01/ClericTest.java | 35 ++++++++++++++----- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java index c59c4c70..e2192f5d 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java @@ -13,6 +13,21 @@ public Cleric(String name) { this.name = name; } + public void selfAid(){ + if(MP>=5) + { + if(HP < MAX_HP) + { + HP = MAX_HP; + MP -= 5; + } + else { + MP -= 5; + } + } + } + + } diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java index 246dc9ff..fa0d9c55 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java @@ -7,17 +7,36 @@ class ClericTest { @Test -@DisplayName("Cleric 생성자 테스트, 이름과 HP/MP 초기화") +@DisplayName("selfAid() 사용 시 MP가 부족하면 HP 회복되지 않고 MP도 감소하지 않아야 한다.") -void testClericConstructor() { +void testSelfAidLow() { // given(준비) - final String Name = "Cleric"; + Cleric cleric = new Cleric("test"); + + cleric.MP = 3; + cleric.HP = 10; //when(실행) - final Cleric cleric = new Cleric(Name); + cleric.selfAid(); //then(검증) - assertEquals(Name, cleric.name); - assertEquals(Cleric.MAX_HP, cleric.HP); - assertEquals(Cleric.MAX_MP, cleric.MP); + assertEquals(3, cleric.MP); + assertEquals(10, cleric.HP); +} + + @Test + @DisplayName("selfAid() 사용 시 HP가 이미 최대치라면 HP는 변하지 않고 MP만 소비되어야 한다.") + void testSelfAidMax() { + // given(준비) + Cleric cleric = new Cleric("test"); + cleric.MP = 10; + cleric.HP = Cleric.MAX_HP; + + // when(실행) + cleric.selfAid(); + + // then(검증) + assertEquals(5, cleric.MP); // MP만 감소 + assertEquals(Cleric.MAX_HP, cleric.HP); // HP는 그대로 + } } -} \ No newline at end of file + From 91aa9b86c98271be46e92d5311d112cf67d7add3 Mon Sep 17 00:00:00 2001 From: TaeHan Date: Tue, 10 Jun 2025 17:54:20 +0900 Subject: [PATCH 05/28] =?UTF-8?q?feat:=20pray()=20=EC=B6=94=EA=B0=80=5F?= =?UTF-8?q?=ED=80=B4=EC=A6=883?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/Cleric.java | 14 +++++ .../exam01/ClericTest.java | 55 +++++++++---------- 2 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java index e2192f5d..6458c764 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java @@ -1,4 +1,5 @@ package com.survivalcoding.assignments_01_instance.exam01; +import java.util.Random; public class Cleric { @@ -27,6 +28,19 @@ public void selfAid(){ } } + public int pray(int sec){ + int extra = (int)(Math.random()*3); + + int recover = sec + extra; + + if(MP + recover > MAX_MP){ + recover = MAX_MP - MP; + } + MP += recover; + + return recover; + } + } diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java index fa0d9c55..f3fd4b1d 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java @@ -6,37 +6,36 @@ import static org.junit.jupiter.api.Assertions.*; class ClericTest { -@Test -@DisplayName("selfAid() 사용 시 MP가 부족하면 HP 회복되지 않고 MP도 감소하지 않아야 한다.") -void testSelfAidLow() { -// given(준비) - Cleric cleric = new Cleric("test"); - - cleric.MP = 3; - cleric.HP = 10; -//when(실행) - cleric.selfAid(); - - //then(검증) - assertEquals(3, cleric.MP); - assertEquals(10, cleric.HP); -} + @Test + @DisplayName("MP가 최대일 경우 pray()는 0 반환하고 MP는 변하지 않아야 한다") + void testPrayMPMax(){ + //given + Cleric cleric = new Cleric("Test"); + cleric.MP = Cleric.MAX_MP; + + //when + int result = cleric.pray(2); + + //then + assertEquals(0, result); + assertEquals(Cleric.MAX_MP, cleric.MP); + } @Test - @DisplayName("selfAid() 사용 시 HP가 이미 최대치라면 HP는 변하지 않고 MP만 소비되어야 한다.") - void testSelfAidMax() { - // given(준비) - Cleric cleric = new Cleric("test"); - cleric.MP = 10; - cleric.HP = Cleric.MAX_HP; - - // when(실행) - cleric.selfAid(); - - // then(검증) - assertEquals(5, cleric.MP); // MP만 감소 - assertEquals(Cleric.MAX_HP, cleric.HP); // HP는 그대로 + @DisplayName("기도 시간이 0이하일 경우 MP는 변하지 않고 0이 반환되어야 한다") + void testPrayTimeZero(){ + //given + Cleric cleric = new Cleric("Test"); + cleric.MP = 5; + + //when + int result = cleric.pray(0); + + //then + assertEquals(0, result); + assertEquals(5, cleric.MP); } + } From c4d0b5bc1c0014ed16145685ffb4fd83da60b20d Mon Sep 17 00:00:00 2001 From: TaeHan Date: Tue, 10 Jun 2025 18:02:31 +0900 Subject: [PATCH 06/28] =?UTF-8?q?feat:=20selfAid()=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assignments_01_instance/exam01/Cleric.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java index 6458c764..ae301922 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java @@ -1,5 +1,4 @@ package com.survivalcoding.assignments_01_instance.exam01; -import java.util.Random; public class Cleric { @@ -20,11 +19,10 @@ public void selfAid(){ if(HP < MAX_HP) { HP = MAX_HP; - MP -= 5; + } - else { MP -= 5; - } + } } From 1d6d57d05c95ed2c7ab693813ae5008e42e3cfb0 Mon Sep 17 00:00:00 2001 From: TaeHan Date: Tue, 10 Jun 2025 18:29:52 +0900 Subject: [PATCH 07/28] =?UTF-8?q?feat:=2025.06.10=20=EC=88=98=EC=97=85?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...51\354\226\264\354\240\225\353\246\254.md" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" index e69de29b..06635524 100644 --- "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" +++ "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" @@ -0,0 +1,24 @@ +## 객체지향언어 용어 정리 (25.06.10) + +오브젝트(object) : 현실 세계 모든 객체(사물이 아닌 경우가 많음) + +클래스(class) : 객체를 만들어내기 위한 설계도 / 변수와 매서드의 집합 + +인스턴스(instance) : 설계도를 바탕으로 가상 세계에 구현된 구체적인 실체(실체화된 인스턴스는 메모리에 할당) + +*직무에선 오브젝트를 인스턴스와 같은 개념으로 혼용하며 사용된다함. + +클래스를 만드는 이유는 재사용성 때문에 만듦. + + +final : 변경불가 키워드(const 같은 거) _ 한번 초기화되면 이후로 값이 바뀔 수 없음. +this : 현재 객체를 참조하는 키워드 _ 현재 객체 자기 자신을 가리킴. + + +## 메모 +객체마다 고유의 속성이 있는데, class로 표현하면 이해하기가 수월함. +객체지향을 함으로써 성능면에서는 메리트가 없음(메모리 사용 or 실행 속도 등) + +비록 느리고 메모리 사용도 많은 객체지향 방식을 굳이 쓰는 이유가 개발자가 헷갈리지 않게 하려고, 결국 버그를 줄이기 위함. + +------------- From d7f6f9f8fc4fe2118440190522e783f4682a92eb Mon Sep 17 00:00:00 2001 From: TaeHan Date: Tue, 10 Jun 2025 18:46:24 +0900 Subject: [PATCH 08/28] feat: --- .../\354\232\251\354\226\264\354\240\225\353\246\254.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" index 06635524..c5f23296 100644 --- "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" +++ "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" @@ -21,4 +21,4 @@ this : 현재 객체를 참조하는 키워드 _ 현재 객체 자기 자신을 비록 느리고 메모리 사용도 많은 객체지향 방식을 굳이 쓰는 이유가 개발자가 헷갈리지 않게 하려고, 결국 버그를 줄이기 위함. -------------- +-------------- From c290b7948ad8a179376c56c3d29619b5f43a12d0 Mon Sep 17 00:00:00 2001 From: TaeHan Date: Fri, 13 Jun 2025 20:44:40 +0900 Subject: [PATCH 09/28] =?UTF-8?q?feat:=EB=8B=A4=EC=8B=9C=EC=97=B0=EC=8A=B5?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/Cleric.java | 34 +--------------- .../exam01/ClericTest.java | 40 ++++++------------- 2 files changed, 15 insertions(+), 59 deletions(-) diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java index ae301922..2526beba 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java @@ -2,44 +2,14 @@ public class Cleric { + public String name = "Cleric"; + static final int MAX_HP = 50; static final int MAX_MP = 10; - public String name; public int HP = MAX_HP; public int MP = MAX_MP; - public Cleric(String name) { - this.name = name; - } - - public void selfAid(){ - if(MP>=5) - { - if(HP < MAX_HP) - { - HP = MAX_HP; - - } - MP -= 5; - - } - } - - public int pray(int sec){ - int extra = (int)(Math.random()*3); - - int recover = sec + extra; - - if(MP + recover > MAX_MP){ - recover = MAX_MP - MP; - } - MP += recover; - - return recover; - } - - } diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java index f3fd4b1d..40b7eba4 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java @@ -1,41 +1,27 @@ package com.survivalcoding.assignments_01_instance.exam01; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.DisplayName; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; class ClericTest { - @Test - @DisplayName("MP가 최대일 경우 pray()는 0 반환하고 MP는 변하지 않아야 한다") - void testPrayMPMax(){ - //given - Cleric cleric = new Cleric("Test"); - cleric.MP = Cleric.MAX_MP; + public String name = "Cleric"; - //when - int result = cleric.pray(2); + static final int MAX_HP = 50; + static final int MAX_MP = 10; - //then - assertEquals(0, result); - assertEquals(Cleric.MAX_MP, cleric.MP); - } + public int HP = MAX_HP; + public int MP = MAX_MP; - @Test - @DisplayName("기도 시간이 0이하일 경우 MP는 변하지 않고 0이 반환되어야 한다") - void testPrayTimeZero(){ - //given - Cleric cleric = new Cleric("Test"); - cleric.MP = 5; - //when - int result = cleric.pray(0); + @Test + public void test() { + System.out.println("name" + name); + System.out.println("HP" + HP); + System.out.println("MP" + MP); + } - //then - assertEquals(0, result); - assertEquals(5, cleric.MP); } -} + From bf2fbdef797562ed1082d8c43391078866728a51 Mon Sep 17 00:00:00 2001 From: TaeHan Date: Fri, 13 Jun 2025 21:26:51 +0900 Subject: [PATCH 10/28] =?UTF-8?q?feat:=EB=8B=A4=EC=8B=9C=EC=97=B0=EC=8A=B5?= =?UTF-8?q?2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/Cleric.java | 6 +++ .../exam01/ClericTest.java | 42 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java index 2526beba..e11117fc 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java @@ -10,6 +10,12 @@ public class Cleric { public int HP = MAX_HP; public int MP = MAX_MP; + public void selfAid() + { + MP -=5; + HP = MAX_HP; + } + } diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java index 40b7eba4..b678e786 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java @@ -19,8 +19,50 @@ public void test() { System.out.println("name" + name); System.out.println("HP" + HP); System.out.println("MP" + MP); + + } + + //selfAid() 사용 시 MP가 충분하다면, MP 5가 소비되고 HP는 최대 HP로 회복되어야 한다. + //selfAid() 사용 시 MP가 부족하다면, HP가 회복되지 않고 MP도 감소하지 않아야 한다. + //selfAid() 사용 시 HP가 이미 최대치라면, HP는 변하지 않고 MP만 소비되어야 한다. + + @Test + public void selfAid() + { + MP -=5; + HP = MAX_HP; + + if(MP>=5) + { + MP=-5; + if(HP==MAX_HP) + { + System.out.println("HP는 변하지 않습니다"); + } + + else { + HP=MAX_HP; + } + + if(HP==MAX_HP) + { + MP=-5; + System.out.println("HP는 변하지 않습니다"); + } } + else + { + System.out.println("HP가 회복되지 않습니다"); + System.out.println("MP가 감소하지 않습니다"); + //감소하지 않아야 한다. + + } + + + } + + } From f8b2a7cc19554c37f7d7d86fcae9df3fe7af15e3 Mon Sep 17 00:00:00 2001 From: TaeHan Date: Sun, 15 Jun 2025 17:33:50 +0900 Subject: [PATCH 11/28] =?UTF-8?q?feat:=EB=8B=A4=EC=8B=9C=EC=97=B0=EC=8A=B5?= =?UTF-8?q?3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/Cleric.java | 34 +++++++++++++++++-- .../exam01/ClericTest.java | 29 ++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java index e11117fc..0b01091e 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java @@ -10,12 +10,40 @@ public class Cleric { public int HP = MAX_HP; public int MP = MAX_MP; - public void selfAid() - { - MP -=5; + public void selfAid() { + MP -= 5; HP = MAX_HP; } + // 회복량은 기도한 시간에 랜덤하게 0~2포인트의 보정을 한 양 (3초 기도하면 회복량은 3-5포인트) + //단 최대MP보다 더 회복하는 것은 불가능 + public int pray(int sec) { + if (MP == MAX_MP) { + return 0; + } + + int bonus = 0; + int beforeMP = MP; + int recover = 0; + + if (sec > 0 && sec < 3) { + bonus = (int)Math.random() * 3; + recover = sec + bonus; + } else if (sec == 3) { + bonus = (int)Math.random() * 3; + recover = 3 + bonus; + } + + MP += recover; + + if(MP>MAX_MP) + { + MP = MAX_MP; + } + + return MP - beforeMP; + } +} diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java index b678e786..28a0dcc0 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; class ClericTest { @@ -22,6 +23,8 @@ public void test() { } + + //selfAid() 사용 시 MP가 충분하다면, MP 5가 소비되고 HP는 최대 HP로 회복되어야 한다. //selfAid() 사용 시 MP가 부족하다면, HP가 회복되지 않고 MP도 감소하지 않아야 한다. //selfAid() 사용 시 HP가 이미 최대치라면, HP는 변하지 않고 MP만 소비되어야 한다. @@ -58,12 +61,38 @@ public void selfAid() //감소하지 않아야 한다. } +//pray() 사용 시 MP가 회복되어야 하며, 반환 값은 실제로 회복된 MP 양과 일치해야 한다. (MP가 최대치가 아닐 때) +//pray()를 일정 시간 기도했을 때, 회복되는 MP 양이 '기도 시간'에서 '기도 시간 + 2' 사이의 랜덤 범위 내에 있어야 한다. +//pray() 사용 시 MP는 MAX_MP를 초과하여 회복될 수 없으며, MAX_MP까지만 회복되어야 한다. + } + @Test + void RecoveryMP(){ + Cleric c = new Cleric(); + c.MP = 5; + int before = c.MP; + int recoverd = c.pray(2); + assertEquals(c.MP-before,recoverd); } + @Test + void RangeTest() { + Cleric c = new Cleric(); + c.MP = 3; + int recovered = c.pray(3); + assertTrue(recovered >= 3 && recovered <= 5); + } + + @Test + void LimitTest() { + Cleric c = new Cleric(); + c.MP = 9; + assertTrue(c.MP <= Cleric.MAX_MP); } +} + From 663118dd4bd7d2b52350c7abe3cc6c7bd12cc1ec Mon Sep 17 00:00:00 2001 From: Omary Date: Mon, 16 Jun 2025 11:09:08 +0900 Subject: [PATCH 12/28] feat: test --- .../\354\232\251\354\226\264\354\240\225\353\246\254.md" | 1 + 1 file changed, 1 insertion(+) diff --git "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" index c5f23296..0eeb3539 100644 --- "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" +++ "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" @@ -11,6 +11,7 @@ 클래스를 만드는 이유는 재사용성 때문에 만듦. + final : 변경불가 키워드(const 같은 거) _ 한번 초기화되면 이후로 값이 바뀔 수 없음. this : 현재 객체를 참조하는 키워드 _ 현재 객체 자기 자신을 가리킴. From cc30da9037ab8ddc3e49a562dbc76b092426c8db Mon Sep 17 00:00:00 2001 From: Omary Date: Mon, 16 Jun 2025 14:43:14 +0900 Subject: [PATCH 13/28] =?UTF-8?q?feat:=20Q1.=20Cleric=20static=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/Cleric.java | 42 +-------- .../java/com/survivalcoding/Q250610Test.java | 18 ---- .../exam01/ClericTest.java | 89 ++----------------- 3 files changed, 9 insertions(+), 140 deletions(-) delete mode 100644 src/test/java/com/survivalcoding/Q250610Test.java diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java index 0b01091e..ae8d49c2 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java @@ -4,46 +4,12 @@ public class Cleric { public String name = "Cleric"; - static final int MAX_HP = 50; - static final int MAX_MP = 10; + public static final int MAX_HP = 50; + public static final int MAX_MP = 10; - public int HP = MAX_HP; - public int MP = MAX_MP; + public int HP=50; + public int MP=10; - public void selfAid() { - MP -= 5; - HP = MAX_HP; - } - - // 회복량은 기도한 시간에 랜덤하게 0~2포인트의 보정을 한 양 (3초 기도하면 회복량은 3-5포인트) - //단 최대MP보다 더 회복하는 것은 불가능 - public int pray(int sec) { - if (MP == MAX_MP) { - return 0; - } - - int bonus = 0; - int beforeMP = MP; - int recover = 0; - - if (sec > 0 && sec < 3) { - bonus = (int)Math.random() * 3; - recover = sec + bonus; - } else if (sec == 3) { - bonus = (int)Math.random() * 3; - recover = 3 + bonus; - } - - MP += recover; - - if(MP>MAX_MP) - { - MP = MAX_MP; - } - - return MP - beforeMP; - - } } diff --git a/src/test/java/com/survivalcoding/Q250610Test.java b/src/test/java/com/survivalcoding/Q250610Test.java deleted file mode 100644 index 600d8629..00000000 --- a/src/test/java/com/survivalcoding/Q250610Test.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.survivalcoding; - -import com.survivalcoding.assignments_01_instance.exam01.Cleric; - -public class Q250610Test { - public static void main(String[] args) { - // Cleric 객체 생성 - Cleric cleric = new Cleric("Cleric"); - - // 값 출력 - System.out.println("Name: " + cleric.name); - System.out.println("HP: " + cleric.HP); - System.out.println("MP: " + cleric.MP); - - - } - -} \ No newline at end of file diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java index 28a0dcc0..46953646 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java @@ -1,95 +1,16 @@ package com.survivalcoding.assignments_01_instance.exam01; - -import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; -class ClericTest { - - public String name = "Cleric"; - - static final int MAX_HP = 50; - static final int MAX_MP = 10; - - public int HP = MAX_HP; - public int MP = MAX_MP; - - - @Test - public void test() { - System.out.println("name" + name); - System.out.println("HP" + HP); - System.out.println("MP" + MP); - - } - - - - //selfAid() 사용 시 MP가 충분하다면, MP 5가 소비되고 HP는 최대 HP로 회복되어야 한다. - //selfAid() 사용 시 MP가 부족하다면, HP가 회복되지 않고 MP도 감소하지 않아야 한다. - //selfAid() 사용 시 HP가 이미 최대치라면, HP는 변하지 않고 MP만 소비되어야 한다. - - @Test - public void selfAid() - { - MP -=5; - HP = MAX_HP; - - if(MP>=5) - { - MP=-5; - if(HP==MAX_HP) - { - System.out.println("HP는 변하지 않습니다"); - } - - else { - HP=MAX_HP; - } - - if(HP==MAX_HP) - { - MP=-5; - System.out.println("HP는 변하지 않습니다"); - } - } - - else - { - System.out.println("HP가 회복되지 않습니다"); - System.out.println("MP가 감소하지 않습니다"); - //감소하지 않아야 한다. - - } -//pray() 사용 시 MP가 회복되어야 하며, 반환 값은 실제로 회복된 MP 양과 일치해야 한다. (MP가 최대치가 아닐 때) -//pray()를 일정 시간 기도했을 때, 회복되는 MP 양이 '기도 시간'에서 '기도 시간 + 2' 사이의 랜덤 범위 내에 있어야 한다. -//pray() 사용 시 MP는 MAX_MP를 초과하여 회복될 수 없으며, MAX_MP까지만 회복되어야 한다. - - } - - @Test - void RecoveryMP(){ - Cleric c = new Cleric(); - c.MP = 5; - int before = c.MP; - int recoverd = c.pray(2); - assertEquals(c.MP-before,recoverd); - } - - @Test - void RangeTest() { - Cleric c = new Cleric(); - c.MP = 3; - int recovered = c.pray(3); - assertTrue(recovered >= 3 && recovered <= 5); - } +public class ClericTest { @Test - void LimitTest() { + public void testInitialValues() { Cleric c = new Cleric(); - c.MP = 9; - assertTrue(c.MP <= Cleric.MAX_MP); + assertEquals(Cleric.MAX_HP, c.HP); + assertEquals(Cleric.MAX_MP, c.MP); } } From bf44c0edc0dac3befc9d5d4edc125b1250aa3036 Mon Sep 17 00:00:00 2001 From: Omary Date: Mon, 16 Jun 2025 19:09:04 +0900 Subject: [PATCH 14/28] =?UTF-8?q?feat:=20Q2.=20Cleric=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/Cleric.java | 30 ++++++++++++++-- .../exam01/ClericTest.java | 34 +++++++++++++++++-- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java index ae8d49c2..ab77c874 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java @@ -1,15 +1,41 @@ package com.survivalcoding.assignments_01_instance.exam01; +import java.sql.SQLOutput; + public class Cleric { public String name = "Cleric"; + public int hp; + public int mp; public static final int MAX_HP = 50; public static final int MAX_MP = 10; - public int HP=50; - public int MP=10; + public Cleric(String name, int hp, int mp) { + this.name = name; + this.hp = hp; + this.mp = mp; + } + + public Cleric(String name, int hp) { + this(name, hp, MAX_MP); + } + + public Cleric(String name) { + this(name, MAX_HP, MAX_MP); + } + + public static void main(String[] args) { + Cleric a = new Cleric("아서스", 40, 5); + Cleric b = new Cleric("아서스", 35); + Cleric c = new Cleric("아서스"); // 골라쓰기 + + } } + + + + diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java index 46953646..75cca9f7 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java @@ -7,11 +7,39 @@ public class ClericTest { @Test public void testInitialValues() { - Cleric c = new Cleric(); + Cleric c = new Cleric("test"); - assertEquals(Cleric.MAX_HP, c.HP); - assertEquals(Cleric.MAX_MP, c.MP); + assertEquals(Cleric.MAX_HP, c.hp); + assertEquals(Cleric.MAX_MP, c.mp); } + + @Test + public void testA() { + Cleric c = new Cleric("아서스", 40, 5); + assertEquals("아서스", c.name); + assertEquals(40, c.hp); + assertEquals(5, c.mp); + } + + @Test + public void testB() { + Cleric c = new Cleric("아서스", 35); + assertEquals("아서스", c.name); + assertEquals(35, c.hp); + assertEquals(Cleric.MAX_MP, c.mp); + } + + @Test + public void testC() { + Cleric c = new Cleric("아서스"); + assertEquals("아서스", c.name); + assertEquals(Cleric.MAX_HP, c.hp); + assertEquals(Cleric.MAX_MP, c.mp); + } + + + + } From f9fdaa38d103a7f7a4f367689bee7dcce0299050 Mon Sep 17 00:00:00 2001 From: Omary Date: Mon, 16 Jun 2025 19:23:04 +0900 Subject: [PATCH 15/28] =?UTF-8?q?feat:=20=EC=9A=A9=EC=96=B4=EC=A0=95?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\232\251\354\226\264\354\240\225\353\246\254.md" | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" index 0eeb3539..404c41cb 100644 --- "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" +++ "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" @@ -1,3 +1,14 @@ +## 클래스 생성자 용어 정리 (25.06.16) + +* 클래스 변수는 값이 아니라 객체의 주소(참조)를 저장함. +그래서 하나의 객체를 여러 변수가 가리킬 수 있으며, 한 쪽에서 바꾸면 다른 쪽도 바뀜. + + +* 생성자는 객체를 만들 때 자동으로 실행되는 메서드. 여러 개 만들 수 있음(오버로딩), 그리고 this로 다른 생성자를 내부에서 부를 수도 있음. + + +* 정적 멤버(static)이 붙은 변수나 메서드는 클래스명, 변수명으로 바로 쓸 수 있고, 모든 인스턴스가 같은 값을 공유함. +--- ## 객체지향언어 용어 정리 (25.06.10) 오브젝트(object) : 현실 세계 모든 객체(사물이 아닌 경우가 많음) @@ -22,4 +33,4 @@ this : 현재 객체를 참조하는 키워드 _ 현재 객체 자기 자신을 비록 느리고 메모리 사용도 많은 객체지향 방식을 굳이 쓰는 이유가 개발자가 헷갈리지 않게 하려고, 결국 버그를 줄이기 위함. --------------- + From 3bb76c84b22708ab74e0195b106ddcd342882a53 Mon Sep 17 00:00:00 2001 From: Omary Date: Tue, 17 Jun 2025 15:03:12 +0900 Subject: [PATCH 16/28] =?UTF-8?q?feat:=20=EB=AA=A8=EB=93=A0=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=EC=99=80=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=A0=91?= =?UTF-8?q?=EA=B7=BC=EC=A7=80=EC=A0=95=EC=9E=90=20private=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20getter/setter=20=EC=9E=91=EC=84=B1=20(?= =?UTF-8?q?=EC=97=B0=EC=8A=B5=EB=AC=B8=EC=A0=9C1-1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/Cleric.java | 41 --------------- .../assignments_01_instance/exam01/Hero.java | 22 ++++++++ .../assignments_01_instance/exam01/Wand.java | 24 +++++++++ .../exam01/Wizard.java | 51 +++++++++++++++++++ .../exam01/ClericTest.java | 47 ----------------- .../exam01/WizardTest.java | 32 ++++++++++++ 6 files changed, 129 insertions(+), 88 deletions(-) delete mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Hero.java create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wand.java create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java delete mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java deleted file mode 100644 index ab77c874..00000000 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Cleric.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.survivalcoding.assignments_01_instance.exam01; - -import java.sql.SQLOutput; - -public class Cleric { - - public String name = "Cleric"; - public int hp; - public int mp; - - public static final int MAX_HP = 50; - public static final int MAX_MP = 10; - - - public Cleric(String name, int hp, int mp) { - this.name = name; - this.hp = hp; - this.mp = mp; - } - - public Cleric(String name, int hp) { - this(name, hp, MAX_MP); - } - - public Cleric(String name) { - this(name, MAX_HP, MAX_MP); - } - - public static void main(String[] args) { - Cleric a = new Cleric("아서스", 40, 5); - Cleric b = new Cleric("아서스", 35); - Cleric c = new Cleric("아서스"); // 골라쓰기 - - } -} - - - - - - diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Hero.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Hero.java new file mode 100644 index 00000000..f086af41 --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Hero.java @@ -0,0 +1,22 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class Hero { + private String name; + private int hp; + + public String getName() { + return name; + } + + public void setName(String name){ + this.name = name; + } + + public int getHp(){ + return hp; + } + + public void setHp(int hp){ + this.hp = hp; + } +} diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wand.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wand.java new file mode 100644 index 00000000..e3493a69 --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wand.java @@ -0,0 +1,24 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class Wand { + private String name; + private double power; + + public String getName(){ + return name; + } + + public void setName(String name){ + this.name = name; + } + + public double getPower(){ + return power; + } + + public void setPower(double power){ + this.power = power; + } + + +} diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java new file mode 100644 index 00000000..26e391db --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java @@ -0,0 +1,51 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class Wizard { + + private String name; + private Wand wand; + private int hp; + private int mp; + + + public String getName(){ + return name; + } + public void setName(String name){ + this.name = name; + } + public Wand getWand(){ + return wand; + } + public void setWand(Wand wand){ + this.wand = wand; + } + public int getHp(){ + return hp; + } + public void setHp(int hp){ + this.hp = hp; + } + public int getMp(){ + return mp; + } + public void setMp(int mp){ + this.mp = mp; + } + +void heal (Hero hero){ + int basePoint = 10; + int recovPoint = (int) (basePoint * this.wand.getPower()); + hero.setHp(hero.getHp() + recovPoint); +} + + +} + + + + + + + + diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java deleted file mode 100644 index 75cca9f7..00000000 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ClericTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.survivalcoding.assignments_01_instance.exam01; - -import static org.junit.jupiter.api.Assertions.*; -import org.junit.jupiter.api.Test; - -public class ClericTest { - - @Test - public void testInitialValues() { - Cleric c = new Cleric("test"); - - assertEquals(Cleric.MAX_HP, c.hp); - assertEquals(Cleric.MAX_MP, c.mp); - } - - @Test - public void testA() { - Cleric c = new Cleric("아서스", 40, 5); - assertEquals("아서스", c.name); - assertEquals(40, c.hp); - assertEquals(5, c.mp); - } - - @Test - public void testB() { - Cleric c = new Cleric("아서스", 35); - assertEquals("아서스", c.name); - assertEquals(35, c.hp); - assertEquals(Cleric.MAX_MP, c.mp); - } - - @Test - public void testC() { - Cleric c = new Cleric("아서스"); - assertEquals("아서스", c.name); - assertEquals(Cleric.MAX_HP, c.hp); - assertEquals(Cleric.MAX_MP, c.mp); - } - - - - -} - - - - diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java new file mode 100644 index 00000000..9dac0044 --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java @@ -0,0 +1,32 @@ +package com.survivalcoding.assignments_01_instance.exam01; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class WizardTest { + + @Test + public void testHeal() { + // 준비 (Arrange) + Hero hero = new Hero(); + hero.setHp(30); + + Wand wand = new Wand(); + wand.setName("wand"); + wand.setPower(1.5); + + Wizard wizard = new Wizard(); + wizard.setName("wizard"); + wizard.setHp(50); + wizard.setMp(100); + wizard.setWand(wand); + + wizard.heal(hero); + + assertEquals(45, hero.getHp()); + } + +} + + + + From d555d4f8946f884922889dcd69f136e9bebb4bde Mon Sep 17 00:00:00 2001 From: Omary Date: Tue, 17 Jun 2025 16:04:17 +0900 Subject: [PATCH 17/28] =?UTF-8?q?feat:=20=EC=9D=B8=EC=88=98=EC=9D=98=20?= =?UTF-8?q?=ED=83=80=EB=8B=B9=EC=84=B1=20=EA=B2=80=EC=82=AC=20throw=20new?= =?UTF-8?q?=20IllegalArgumentException()=20(=EC=97=B0=EC=8A=B5=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C1-2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assignments_01_instance/exam01/Wand.java | 5 +++ .../exam01/Wizard.java | 14 +++++++- src/main/java/com/survivalcoding/game.puml | 26 ++++++++++++++ .../exam01/WizardTest.java | 34 ++++++++++++++++++- 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/survivalcoding/game.puml diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wand.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wand.java index e3493a69..0767b76e 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wand.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wand.java @@ -17,6 +17,11 @@ public double getPower(){ } public void setPower(double power){ + + if(this.power <0.5 || power>100){ + throw new IllegalArgumentException("메세지"); + } + this.power = power; } diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java index 26e391db..49dc85d7 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java @@ -12,24 +12,37 @@ public String getName(){ return name; } public void setName(String name){ + if(this.name == null || name.length()<3) + { + throw new IllegalArgumentException("메세지"); + } this.name = name; } public Wand getWand(){ return wand; } public void setWand(Wand wand){ + if(this.wand == null){ + throw new IllegalArgumentException("메세지"); + } this.wand = wand; } public int getHp(){ return hp; } public void setHp(int hp){ + if(this.hp<0){ + hp = 0; + } this.hp = hp; } public int getMp(){ return mp; } public void setMp(int mp){ + if(this.mp<0){ + throw new IllegalArgumentException("메세지"); + } this.mp = mp; } @@ -39,7 +52,6 @@ void heal (Hero hero){ hero.setHp(hero.getHp() + recovPoint); } - } diff --git a/src/main/java/com/survivalcoding/game.puml b/src/main/java/com/survivalcoding/game.puml new file mode 100644 index 00000000..bbc7019c --- /dev/null +++ b/src/main/java/com/survivalcoding/game.puml @@ -0,0 +1,26 @@ +@startuml +'https://plantuml.com/class-diagram + +scale 2 + +class Hero { ++ String name +- int hp + ++ void attack(Kinoko enemy) ++ void bye() +- void die() +} + +class Cleric{ ++ String name +- int hp ++ int mp + ++ void attack(Kinoko enemy) ++ void pray(int sec) ++ void selfAid() + +} + +@enduml \ No newline at end of file diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java index 9dac0044..60ac9f41 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java @@ -6,7 +6,6 @@ public class WizardTest { @Test public void testHeal() { - // 준비 (Arrange) Hero hero = new Hero(); hero.setHp(30); @@ -23,6 +22,39 @@ public void testHeal() { wizard.heal(hero); assertEquals(45, hero.getHp()); + + } + + + @Test + public void ver3texttest(){ + Wand wand = new Wand(); + wand.setName("abc"); + assertEquals("abc",wand.getName()); + } + + @Test + public void powertest(){ + Wand wand = new Wand(); + wand.setPower(0.5); + assertEquals(0.5,wand.getPower()); + } + + @Test + public void mpoverzerotest(){ + Wizard wizard = new Wizard(); + wizard.setMp(0); + + assertEquals(0,wizard.getMp()); + } + + @Test + public void turnintominustozerotest(){ + Wizard wizard = new Wizard(); + + wizard.setHp(-10); + assertEquals(0,wizard.getHp()); + } } From bfce20cc3ca230239d785c1188d37291a8b0cc22 Mon Sep 17 00:00:00 2001 From: Omary Date: Tue, 17 Jun 2025 17:44:28 +0900 Subject: [PATCH 18/28] =?UTF-8?q?feat:=20Date=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20(=EC=97=B0=EC=8A=B5=EB=AC=B8=EC=A0=9C2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...51\354\226\264\354\240\225\353\246\254.md" | 16 ++++++++++- .../exam01/Person.java | 28 +++++++++++++++++++ .../exam01/PersonTest.java | 15 ++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/PersonTest.java diff --git "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" index 404c41cb..de350ec6 100644 --- "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" +++ "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" @@ -1,4 +1,18 @@ -## 클래스 생성자 용어 정리 (25.06.16) +##캡슐화 용어 정리 (25.06.17) + +* 캡슐화란, +캡슐화는 클래스 내부의 데이터에 외부에서 직접 접근하지 못하도록 막고, 대신 메서드를 통해서만 접근하게 하여 +데이터를 안전하게 보호하는 개념. 특히 현실 세계에서는 들어갈 수 없는 잘못된 값이 필드에 저장되지 않도록 제어하는 데 매우 중요 + +* 접근 제한자에 따른 멤버 접근 규칙 +private으로 선언된 필드는 해당 클래스 내부에서만 접근 가능 +public으로 선언된 필드나 메서드는 어떤 클래스에서도 자유롭게 접근 가능 + +* 캡슐화를 올바르게 적용하려면, 클래스는 public으로 선언하고, 필드는 반드시 private로 선언. +필드에 접근하고 수정하기 위해서는 public 매서드(getter,setter)를 따로 만들어 제공함. + + +##클래스 생성자 용어 정리 (25.06.16) * 클래스 변수는 값이 아니라 객체의 주소(참조)를 저장함. 그래서 하나의 객체를 여러 변수가 가리킬 수 있으며, 한 쪽에서 바꾸면 다른 쪽도 바뀜. diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java new file mode 100644 index 00000000..13ae515f --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java @@ -0,0 +1,28 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import java.util.Date; + +public class Person { + private final String name; + private final int birthYear; + + public Person(String name, int birthYear){ + this.name = name; + this.birthYear = birthYear; + } + + public String getName(){ + return name; + } + + public int getBirthYear(){ + return birthYear; + } + + public int getAge(){ + Date date = new Date(); + int currentYear = date.getYear() + 1900; + return currentYear - birthYear; + } + +} diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/PersonTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/PersonTest.java new file mode 100644 index 00000000..83c143b8 --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/PersonTest.java @@ -0,0 +1,15 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PersonTest { +// + @Test + public void persontest(){ + Person person = new Person("name",1999); + assertEquals("name",person.getName()); + assertEquals(1999,person.getBirthYear()); + } +} \ No newline at end of file From d887d2a4ad42a7cb4dc4a0c2d9633b17c2f406d5 Mon Sep 17 00:00:00 2001 From: KOO TAEHAN <137146632+OmaryKoo@users.noreply.github.com> Date: Mon, 23 Jun 2025 16:12:26 +0900 Subject: [PATCH 19/28] =?UTF-8?q?feat:=20Slime=20=EC=83=81=EC=86=8D=20?= =?UTF-8?q?=EB=B0=8F=20=EC=86=8D=EC=84=B1=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/PoisonSlime.java | 30 ++++++++++++++ .../assignments_01_instance/exam01/Slime.java | 28 +++++++++++++ .../exam01/PoisonSlimeTest.java | 39 +++++++++++++++++++ .../exam01/SlimeTest.java | 24 ++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlime.java create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Slime.java create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlimeTest.java create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/SlimeTest.java diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlime.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlime.java new file mode 100644 index 00000000..dab63f6a --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlime.java @@ -0,0 +1,30 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class PoisonSlime extends Slime{ + + int poisonCount = 5; + + public PoisonSlime (String suffix) { + super(suffix); + } + + public int getPoisonCount() { + return poisonCount; + } + + @Override + public void attack(Hero hero) { + super.attack(hero); + + if(poisonCount > 0) { //if(poisonCount != 0) + System.out.println("추가로, 독 포자를 살포했다!"); + + int poisonDamage = hero.getHp() / 5; + + hero.setHp(hero.getHp() - poisonDamage); + System.out.println(poisonDamage + " 포인트의 데미지"); + + poisonCount--; + } + } +} diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Slime.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Slime.java new file mode 100644 index 00000000..df3300c3 --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Slime.java @@ -0,0 +1,28 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class Slime { + private final String suffix; + private int hp; + + public Slime(String suffix) { + this.suffix = suffix; + } + + public String getSuffix() { + return suffix; + } + public int getHp() { + return hp; + } + public void setHp(int hp) { + this.hp = hp; + } + + public void attack(Hero hero) { + System.out.println("슬라임 " + suffix + "이/가 공격했다"); + System.out.println("10의 데미지"); + + hero.setHp(hero.getHp() - 10); + } +} + diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlimeTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlimeTest.java new file mode 100644 index 00000000..08e83269 --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlimeTest.java @@ -0,0 +1,39 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PoisonSlimeTest { + + int poisonCount = 5; + + @Test + @DisplayName("PoisonCount가 0이면 독공격 실행하지 않음") + void NoPoisonAttackCountZero() { + Hero hero = new Hero(); + hero.setHp(50); + + PoisonSlime poisonSlime = new PoisonSlime("A"); + poisonSlime.poisonCount = 0; + + poisonSlime.attack(hero); + assertEquals(40, hero.getHp()); + } + + @Test + @DisplayName("PoisonCount는 0보다 작아지지 않음") + void MinusCountNeverExistence() { + Hero hero = new Hero(); + hero.setHp(100); + PoisonSlime poisonSlime = new PoisonSlime("B"); + + for (int i =0; i<6; i++) { + poisonSlime.attack(hero); + } + + assertTrue(poisonSlime.getPoisonCount() >=0); + + } +} \ No newline at end of file diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/SlimeTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/SlimeTest.java new file mode 100644 index 00000000..ea47f68e --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/SlimeTest.java @@ -0,0 +1,24 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SlimeTest { + + @Test + @DisplayName("일반 슬라임은 공격시 Hero의 Hp를 10 감소시킴") + void NormalSlimeAttack() { + Hero hero = new Hero(); + hero.setHp(50); + + Slime slime = new Slime("A"); + slime.attack(hero); + + assertEquals(40, hero.getHp()); + } + + + + } \ No newline at end of file From ff949eaac7a7e32e5c00b9ef9d68458d4c36b7f7 Mon Sep 17 00:00:00 2001 From: KOO TAEHAN <137146632+OmaryKoo@users.noreply.github.com> Date: Mon, 23 Jun 2025 17:00:37 +0900 Subject: [PATCH 20/28] =?UTF-8?q?feat:=20wizard=20=EC=86=8D=EC=84=B1=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(=EC=97=B0=EC=8A=B5=EB=AC=B8=EC=A0=9C4)=20?= =?UTF-8?q?chore:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/Wizard.java | 25 +++++++++++-------- .../exam01/PoisonSlimeTest.java | 4 +-- .../exam01/SlimeTest.java | 2 +- .../exam01/WizardTest.java | 16 ++++++++++++ 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java index 49dc85d7..a748f216 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java @@ -5,26 +5,19 @@ public class Wizard { private String name; private Wand wand; private int hp; - private int mp; + private int mp = 100; public String getName(){ return name; } public void setName(String name){ - if(this.name == null || name.length()<3) - { - throw new IllegalArgumentException("메세지"); - } this.name = name; } public Wand getWand(){ return wand; } public void setWand(Wand wand){ - if(this.wand == null){ - throw new IllegalArgumentException("메세지"); - } this.wand = wand; } public int getHp(){ @@ -47,9 +40,19 @@ public void setMp(int mp){ } void heal (Hero hero){ - int basePoint = 10; - int recovPoint = (int) (basePoint * this.wand.getPower()); - hero.setHp(hero.getHp() + recovPoint); + //int basePoint = 10; + // int recovPoint = (int) (basePoint * this.wand.getPower()); + // hero.setHp(hero.getHp() + recovPoint); + + if (mp >= 10) { + mp -= 10; + hero.setHp(hero.getHp() + 20); + + System.out.println("HP: "+ hero.getHp()); + } + else { + System.out.println("마나가 부족합니다."); + } } } diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlimeTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlimeTest.java index 08e83269..cfa6c57a 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlimeTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/PoisonSlimeTest.java @@ -11,7 +11,7 @@ class PoisonSlimeTest { @Test @DisplayName("PoisonCount가 0이면 독공격 실행하지 않음") - void NoPoisonAttackCountZero() { + void noPoisonAttackCountZero() { Hero hero = new Hero(); hero.setHp(50); @@ -24,7 +24,7 @@ void NoPoisonAttackCountZero() { @Test @DisplayName("PoisonCount는 0보다 작아지지 않음") - void MinusCountNeverExistence() { + void minusCountNeverExistence() { Hero hero = new Hero(); hero.setHp(100); PoisonSlime poisonSlime = new PoisonSlime("B"); diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/SlimeTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/SlimeTest.java index ea47f68e..9cebe29e 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/SlimeTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/SlimeTest.java @@ -9,7 +9,7 @@ class SlimeTest { @Test @DisplayName("일반 슬라임은 공격시 Hero의 Hp를 10 감소시킴") - void NormalSlimeAttack() { + void normalSlimeAttack() { Hero hero = new Hero(); hero.setHp(50); diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java index 60ac9f41..73b75f2b 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java @@ -1,4 +1,5 @@ package com.survivalcoding.assignments_01_instance.exam01; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -57,6 +58,21 @@ public void turnintominustozerotest(){ } + @Test + @DisplayName("mp가 10보다 작으면 hero 회복 안 됨") + public void belowMp10NoRecoverHeroHp() { + Wizard wizard = new Wizard(); + Hero hero = new Hero(); + + hero.setHp(50); + wizard.setMp(5); + + wizard.heal(hero); + + assertEquals(50,hero.getHp()); + + } + } From 655a3361a85d9687cf5e64bb463bb5c2d9d5028f Mon Sep 17 00:00:00 2001 From: KOO TAEHAN <137146632+OmaryKoo@users.noreply.github.com> Date: Mon, 23 Jun 2025 18:52:36 +0900 Subject: [PATCH 21/28] =?UTF-8?q?feat:=20greatWizard=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20+=20?= =?UTF-8?q?=EC=83=81=EC=86=8D(=EC=97=B0=EC=8A=B5=EB=AC=B8=EC=A0=9C5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...51\354\226\264\354\240\225\353\246\254.md" | 32 +++++++++++++++ .../exam01/GreatWizard.java | 39 +++++++++++++++++++ .../assignments_01_instance/exam01/Hero.java | 11 +++++- .../exam01/GreatWizardTest.java | 24 ++++++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/GreatWizard.java create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/GreatWizardTest.java diff --git "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" index de350ec6..a34ba180 100644 --- "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" +++ "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" @@ -1,3 +1,35 @@ +##상속 용어 정리 (25.06.23) + +* 상속(Inheritance)은 부모가 자식에게 물려주는 행위를 말한다. OOP에서도 부모 클래스의 필드&메서드를 자식 클래스에게 물려줄 수 있음. +* public class PoisonSlime extends Slime { + + } +위와 같이 부모 클래스를 extends 뒤에 기술함. +프로그램에서는 자식이 부모를 선택함. + +▶ 자바에서는 다중 상속을 허용하지 않음!! 여러 개 부모 클래스를 상속할 수 없음. 따라서 extends 뒤에는 단 하나의 부모 클래스만이 와야 함. + +* super = 부모 클래스에 접근하는 키워드 +상속구조에서, 자식 클래스는 부모 클래스의 속성과 매서드를 상속받아 사용할 수 있는데, super를 쓰면 부모의 기능을 호출하거나 접근가능. + +▶ this. 나 자신 +▶ super. 부모 + +* 오버라이딩 : 부모 클래스에서 정의한 매서드를 자식 클래스에서 재정의 +부모의 것을 그대로 쓰는 게 아니라 입맛대로 바꿔서 쓰겠다? 그런 의미 + +@Override +public void attack(Hero hero) { +super.attack(hero); +~ +} + +@Override는 부모에 정의된 매서드를 재정의하고 있다는 표시 + + + + + ##캡슐화 용어 정리 (25.06.17) * 캡슐화란, diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/GreatWizard.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/GreatWizard.java new file mode 100644 index 00000000..0f384fc9 --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/GreatWizard.java @@ -0,0 +1,39 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class GreatWizard { + private int mp = 150; + + public int getMp() { + return mp; + } + public void setMp(int mp) { + this.mp = mp; + } + + void heal (Hero hero) { + if (mp >= 5) { + mp -= 5; + hero.setHp(hero.getHp() + 25); + + System.out.println("HP: "+ hero.getHp()); + } + + else { + System.out.println("마나가 부족합니다."); + } + } + + void superHeal (Hero hero) { + if (mp >= 50) { + mp -= 50; + hero.setHp(hero.getMaxHp()); + + System.out.println("HP: "+ hero.getHp()); + } + + else { + System.out.println("마나가 부족합니다."); + } + } + +} diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Hero.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Hero.java index f086af41..6eef476c 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Hero.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Hero.java @@ -2,7 +2,16 @@ public class Hero { private String name; - private int hp; + private int hp=50; + private int maxHp=100; + + public int getMaxHp() { + return maxHp; + } + + public void setMaxHp(int maxHp) { + this.maxHp = maxHp; + } public String getName() { return name; diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/GreatWizardTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/GreatWizardTest.java new file mode 100644 index 00000000..280b9bfc --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/GreatWizardTest.java @@ -0,0 +1,24 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class GreatWizardTest { + + @Test + @DisplayName("superHeal에서 mp가 50보다 작으면 hp != maxhp로 회복 못함.") + + public void belowMp50NoRecoverHeroHp() { + GreatWizard greatWizard = new GreatWizard(); + Hero hero = new Hero(); + + hero.setHp(50); + greatWizard.setMp(49); + + greatWizard.superHeal(hero); + + assertEquals(50,hero.getHp()); + } +} \ No newline at end of file From 09b0f4164b8c91309cfadabe5fde68d80d5696b3 Mon Sep 17 00:00:00 2001 From: KOO TAEHAN <137146632+OmaryKoo@users.noreply.github.com> Date: Tue, 24 Jun 2025 15:09:32 +0900 Subject: [PATCH 22/28] =?UTF-8?q?feat:=20TangibleAsset=20=EC=B6=94?= =?UTF-8?q?=EC=83=81=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=A0=95=EC=9D=98=20?= =?UTF-8?q?=EB=B0=8F=20Book/Computer=20=EC=83=81=EC=86=8D=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EA=B5=AC=ED=98=84=20(=EC=97=B0=EC=8A=B5=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/survivalcoding/TangibleAsset.puml | 18 +++++++++ .../assignments_01_instance/exam01/Book.java | 18 +++++++++ .../exam01/Computer.java | 18 +++++++++ .../exam01/TangibleAsset.java | 37 +++++++++++++++++++ .../exam01/BookTest.java | 22 +++++++++++ .../exam01/ComputerTest.java | 21 +++++++++++ 6 files changed, 134 insertions(+) create mode 100644 src/main/java/com/survivalcoding/TangibleAsset.puml create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book.java create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Computer.java create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java diff --git a/src/main/java/com/survivalcoding/TangibleAsset.puml b/src/main/java/com/survivalcoding/TangibleAsset.puml new file mode 100644 index 00000000..9157082d --- /dev/null +++ b/src/main/java/com/survivalcoding/TangibleAsset.puml @@ -0,0 +1,18 @@ +@startuml +'https://plantuml.com/class-diagram + +abstract class TangibleAsset { +-String name; +-int price; +-int String color; +} + +class Book extends TangibleAsset { +-String isbn; +} + +class Computer extends TangibleAsset { +-String makerName; +} + +@enduml \ No newline at end of file diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book.java new file mode 100644 index 00000000..03198ef8 --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book.java @@ -0,0 +1,18 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class Book extends TangibleAsset { + private String isbn; + + public String getIsbn() { + return isbn; + } + + public void setIsbn(String isbn) { + this.isbn = isbn; + } + + public Book(String name, int price, String color, String isbn) { + super(name, price, color); + this.isbn = isbn; + } +} diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Computer.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Computer.java new file mode 100644 index 00000000..0cf4978e --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Computer.java @@ -0,0 +1,18 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class Computer extends TangibleAsset { + private String makerName; + + public String getMakerName() { + return makerName; + } + + public void setMakerName(String makerName) { + this.makerName = makerName; + } + + public Computer(String name, int price, String color, String makerName) { + super(name, price, color); + this.makerName = makerName; + } +} diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java new file mode 100644 index 00000000..05b9cc89 --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java @@ -0,0 +1,37 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class TangibleAsset { + private String name; + private int price; + private String color; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + public TangibleAsset(String name, int price, String color) { + this.name = name; + this.price = price; + this.color = color; + } +} diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java new file mode 100644 index 00000000..2e95b436 --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java @@ -0,0 +1,22 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class BookTest { + + @Test + @DisplayName("생성자를 통해 name, price, color, isbn이 잘 설정됐는지 테스트") + void bookAllFieldCorrectly() { + + Book book = new Book("name", 10000, "color", "isbn"); + + assertEquals("name",book.getName()); + assertEquals(10000, book.getPrice()); + assertEquals("color", book.getColor()); + assertEquals("isbn", book.getIsbn()); + } + +} \ No newline at end of file diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java new file mode 100644 index 00000000..449f66d8 --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java @@ -0,0 +1,21 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ComputerTest { + + @Test + @DisplayName("생성자를 통해 name, price, color, makerName이 잘 설정됐는지 테스트") + void computerAllFieldCorrectly() { + Computer computer = new Computer("name", 500000, "color","makerName"); + + assertEquals("name",computer.getName()); + assertEquals(500000, computer.getPrice()); + assertEquals("color",computer.getColor()); + assertEquals("makerName",computer.getMakerName()); + } + +} \ No newline at end of file From 141fd5f6f8aee2506f6b3edad5fca6438bc357a8 Mon Sep 17 00:00:00 2001 From: KOO TAEHAN <137146632+OmaryKoo@users.noreply.github.com> Date: Tue, 24 Jun 2025 16:20:22 +0900 Subject: [PATCH 23/28] =?UTF-8?q?feat:=20Asset=20=EC=B6=94=EC=83=81?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=A0=95=EC=9D=98=20=EB=B0=8F=20?= =?UTF-8?q?=ED=95=98=EC=9C=84=20=EC=83=81=EC=86=8D=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=88=98=EC=A0=95=20(=EC=97=B0=EC=8A=B5?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C2)=20chore:=20=EC=BD=94=EB=93=9C=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/survivalcoding/TangibleAsset.puml | 13 +++++++-- .../assignments_01_instance/exam01/Asset.java | 28 +++++++++++++++++++ .../exam01/IntangibleAsset.java | 9 ++++++ .../exam01/TangibleAsset.java | 24 ++-------------- .../exam01/BookTest.java | 2 +- .../exam01/ComputerTest.java | 8 +++--- .../exam01/IntangibleAssetTest.java | 19 +++++++++++++ .../exam01/TangibleAssetTest.java | 19 +++++++++++++ 8 files changed, 94 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Asset.java create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/IntangibleAsset.java create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/IntangibleAssetTest.java create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAssetTest.java diff --git a/src/main/java/com/survivalcoding/TangibleAsset.puml b/src/main/java/com/survivalcoding/TangibleAsset.puml index 9157082d..1fbd7068 100644 --- a/src/main/java/com/survivalcoding/TangibleAsset.puml +++ b/src/main/java/com/survivalcoding/TangibleAsset.puml @@ -1,10 +1,16 @@ @startuml 'https://plantuml.com/class-diagram -abstract class TangibleAsset { +abstract class Asset { -String name; -int price; --int String color; +} + +class TangibleAsset extends Asset { +-String color; +} + +class IntangibleAsset extends Asset { } class Book extends TangibleAsset { @@ -15,4 +21,7 @@ class Computer extends TangibleAsset { -String makerName; } +class Patent extends IntangibleAsset { +} + @enduml \ No newline at end of file diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Asset.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Asset.java new file mode 100644 index 00000000..97a33e65 --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Asset.java @@ -0,0 +1,28 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +//(가): Asset +public class Asset { + private String name; + private int price; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + + public Asset(String name, int price) { + this.name = name; + this.price = price; + } +} diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/IntangibleAsset.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/IntangibleAsset.java new file mode 100644 index 00000000..370fb68b --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/IntangibleAsset.java @@ -0,0 +1,9 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +//(나): IntangibleAsset +public class IntangibleAsset extends Asset { + + public IntangibleAsset(String name, int price) { + super(name, price); + } +} diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java index 05b9cc89..8ebf1633 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java @@ -1,25 +1,8 @@ package com.survivalcoding.assignments_01_instance.exam01; -public class TangibleAsset { - private String name; - private int price; - private String color; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } +public class TangibleAsset extends Asset { - public int getPrice() { - return price; - } - - public void setPrice(int price) { - this.price = price; - } + private String color; public String getColor() { return color; @@ -30,8 +13,7 @@ public void setColor(String color) { } public TangibleAsset(String name, int price, String color) { - this.name = name; - this.price = price; + super(name, price); this.color = color; } } diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java index 2e95b436..3768b7e8 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java @@ -13,7 +13,7 @@ void bookAllFieldCorrectly() { Book book = new Book("name", 10000, "color", "isbn"); - assertEquals("name",book.getName()); + assertEquals("name", book.getName()); assertEquals(10000, book.getPrice()); assertEquals("color", book.getColor()); assertEquals("isbn", book.getIsbn()); diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java index 449f66d8..8e6e2ed5 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java @@ -10,12 +10,12 @@ class ComputerTest { @Test @DisplayName("생성자를 통해 name, price, color, makerName이 잘 설정됐는지 테스트") void computerAllFieldCorrectly() { - Computer computer = new Computer("name", 500000, "color","makerName"); + Computer computer = new Computer("name", 500000, "color", "makerName"); - assertEquals("name",computer.getName()); + assertEquals("name", computer.getName()); assertEquals(500000, computer.getPrice()); - assertEquals("color",computer.getColor()); - assertEquals("makerName",computer.getMakerName()); + assertEquals("color", computer.getColor()); + assertEquals("makerName", computer.getMakerName()); } } \ No newline at end of file diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/IntangibleAssetTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/IntangibleAssetTest.java new file mode 100644 index 00000000..bdbc149a --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/IntangibleAssetTest.java @@ -0,0 +1,19 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class IntangibleAssetTest { + + @Test + @DisplayName("생성자를 통해 name, price이 잘 설정됐는지 테스트") + void intangibleAssetAllFieldCorrectly() { + IntangibleAsset intangibleAsset = new IntangibleAsset("name", 14000); + + assertEquals("name", intangibleAsset.getName()); + assertEquals(14000, intangibleAsset.getPrice()); + } + +} \ No newline at end of file diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAssetTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAssetTest.java new file mode 100644 index 00000000..8246bffc --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAssetTest.java @@ -0,0 +1,19 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class TangibleAssetTest { + + @Test + @DisplayName("생성자를 통해 name, price, color이 잘 설정됐는지 테스트") + void tangibleAssetAllFieldCorrectly() { + TangibleAsset tangibleAsset = new TangibleAsset("name", 20000, "color"); + + assertEquals("name", tangibleAsset.getName()); + assertEquals(20000, tangibleAsset.getPrice()); + assertEquals("color", tangibleAsset.getColor()); + } +} \ No newline at end of file From 2419a07d6c5c4cffe35e4ce722ecdf12047322a6 Mon Sep 17 00:00:00 2001 From: KOO TAEHAN <137146632+OmaryKoo@users.noreply.github.com> Date: Wed, 25 Jun 2025 08:06:27 +0900 Subject: [PATCH 24/28] =?UTF-8?q?feat:=20interface=20Thing=EC=A0=95?= =?UTF-8?q?=EC=9D=98=EC=99=80=20=EC=83=81=EC=9C=84=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=97=90=EC=84=9C=20implements=20(=EC=97=B0=EC=8A=B5?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/survivalcoding/TangibleAsset.puml | 6 +++++- .../assignments_01_instance/exam01/Book.java | 1 + .../exam01/TangibleAsset.java | 14 +++++++++++++- .../assignments_01_instance/exam01/Thing.java | 7 +++++++ .../assignments_01_instance/exam01/BookTest.java | 9 +++++++++ .../exam01/ComputerTest.java | 9 +++++++++ 6 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Thing.java diff --git a/src/main/java/com/survivalcoding/TangibleAsset.puml b/src/main/java/com/survivalcoding/TangibleAsset.puml index 1fbd7068..9743ab3b 100644 --- a/src/main/java/com/survivalcoding/TangibleAsset.puml +++ b/src/main/java/com/survivalcoding/TangibleAsset.puml @@ -1,12 +1,16 @@ @startuml 'https://plantuml.com/class-diagram +interface Thing { ++double weight() +} + abstract class Asset { -String name; -int price; } -class TangibleAsset extends Asset { +class TangibleAsset extends Asset implements Thing { -String color; } diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book.java index 03198ef8..08accf29 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book.java @@ -2,6 +2,7 @@ public class Book extends TangibleAsset { private String isbn; + private double weight; public String getIsbn() { return isbn; diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java index 8ebf1633..a702e32d 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java @@ -1,8 +1,10 @@ package com.survivalcoding.assignments_01_instance.exam01; -public class TangibleAsset extends Asset { + +public class TangibleAsset extends Asset implements Thing { private String color; + private double weight; public String getColor() { return color; @@ -16,4 +18,14 @@ public TangibleAsset(String name, int price, String color) { super(name, price); this.color = color; } + + @Override + public double getWeight() { + return weight; + } + + @Override + public void setWeight(double weight) { + this.weight = weight; + } } diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Thing.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Thing.java new file mode 100644 index 00000000..1b0e1827 --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Thing.java @@ -0,0 +1,7 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public interface Thing { + double getWeight(); + + void setWeight(double weight); +} diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java index 3768b7e8..46c8f991 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java @@ -19,4 +19,13 @@ void bookAllFieldCorrectly() { assertEquals("isbn", book.getIsbn()); } + @Test + @DisplayName("Book클래스에서 weight 메서드가 잘 작동하는지 테스트") + void bookWeightTest() { + Book book = new Book("name", 10000, "color", "iabn"); + book.setWeight(1.2); + + assertEquals(1.2, book.getWeight()); + } + } \ No newline at end of file diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java index 8e6e2ed5..fb92cdf9 100644 --- a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java @@ -18,4 +18,13 @@ void computerAllFieldCorrectly() { assertEquals("makerName", computer.getMakerName()); } + @Test + @DisplayName("Computer클래스에서 weight 메서드가 잘 작동하는지 테스트") + void computerWeightTest() { + Computer computer = new Computer("name", 500000, "color", "makerName"); + computer.setWeight(5.2); + + assertEquals(5.2, computer.getWeight()); + } + } \ No newline at end of file From c0280d99d35269e55e8ed01a1256cd43283be4b3 Mon Sep 17 00:00:00 2001 From: KOO TAEHAN <137146632+OmaryKoo@users.noreply.github.com> Date: Wed, 25 Jun 2025 08:47:39 +0900 Subject: [PATCH 25/28] =?UTF-8?q?feat:=20=EC=9A=A9=EC=96=B4=EC=A0=95?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...51\354\226\264\354\240\225\353\246\254.md" | 38 +++++++++++++++---- .../exam01/TangibleAsset.java | 3 +- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" index a34ba180..f2ddb058 100644 --- "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" +++ "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" @@ -1,4 +1,30 @@ -##상속 용어 정리 (25.06.23) +# 추상클래스와 인터페이스 (25.06.24) +* 클래스는 크게 **일반 클래스**와 **추상 클래스**로 나뉨. **추상 클래스**는 클래스 내 '추상 클래스'가 하나이상 포함하거나 +abstract로 정의된 경우를 말함. +* **인터페이스**는 모든 메소드가 추상 메소드인 경우 + +### 추상클래스와 인터페이스의 차이점 +추상클래스는 일부 구현된 설계도, 인터페이스는 기능 약속을 위한 설계도 + +*추상클래스* -> "is-a"관계 (Dog is an Animal -> Dog extends Animal) + +*인터페이스* -> "can-do"관계 (Bird can Fly -> Bird implements Flyable) + +### 메모 +* protected는 자식 클래스에서는 접근이 쉽지만, +외부(예: 테스트 코드)에서는 직접 접근이 불가능하다. +따라서 외부 접근을 고려한다면, private으로 필드를 감추고 +public getter/setter를 제공하는 방식이 더 명확하고 덜 혼란스럽다. + + + +### 참고 +[자바추상클래스](https://m.blog.naver.com/minsuuuus/222228495226) + +[오버라이딩(Overriding)과 오버로딩(Overloading)](https://yeoonjae.tistory.com/entry/JAVA-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9Overriding%EA%B3%BC-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9Overloading%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90) + +--- +# 상속 용어 정리 (25.06.23) * 상속(Inheritance)은 부모가 자식에게 물려주는 행위를 말한다. OOP에서도 부모 클래스의 필드&메서드를 자식 클래스에게 물려줄 수 있음. * public class PoisonSlime extends Slime { @@ -26,11 +52,8 @@ super.attack(hero); @Override는 부모에 정의된 매서드를 재정의하고 있다는 표시 - - - - -##캡슐화 용어 정리 (25.06.17) +--- +# 캡슐화 용어 정리 (25.06.17) * 캡슐화란, 캡슐화는 클래스 내부의 데이터에 외부에서 직접 접근하지 못하도록 막고, 대신 메서드를 통해서만 접근하게 하여 @@ -54,8 +77,9 @@ public으로 선언된 필드나 메서드는 어떤 클래스에서도 자유 * 정적 멤버(static)이 붙은 변수나 메서드는 클래스명, 변수명으로 바로 쓸 수 있고, 모든 인스턴스가 같은 값을 공유함. + --- -## 객체지향언어 용어 정리 (25.06.10) +# 객체지향언어 용어 정리 (25.06.10) 오브젝트(object) : 현실 세계 모든 객체(사물이 아닌 경우가 많음) diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java index a702e32d..a233e20f 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java @@ -1,6 +1,5 @@ package com.survivalcoding.assignments_01_instance.exam01; - - +//연습3에서 4 모두 작성 public class TangibleAsset extends Asset implements Thing { private String color; From acaa5f3e694ceb290df2a86f7c850e41a9b6a58a Mon Sep 17 00:00:00 2001 From: KOO TAEHAN <137146632+OmaryKoo@users.noreply.github.com> Date: Tue, 1 Jul 2025 14:00:02 +0900 Subject: [PATCH 26/28] =?UTF-8?q?feat:=20=EC=A0=9C=EB=84=A4=EB=A6=AD?= =?UTF-8?q?=EC=9D=84=20=EC=82=AC=EC=9A=A9=ED=95=9C=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20(=EC=97=B0=EC=8A=B5=EB=AC=B8=EC=A0=9C4-1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam01/StrongBox.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/StrongBox.java diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/StrongBox.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/StrongBox.java new file mode 100644 index 00000000..2133c0cb --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/StrongBox.java @@ -0,0 +1,16 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +public class StrongBox { + private E data; + + public void put(E data) { + if (this.data != null) { + return; + } + this.data = data; + } + + public E get() { + return this.data; + } +} From 92edd51c2d4d82f60d7c05898b087b4f45a0e51e Mon Sep 17 00:00:00 2001 From: KOO TAEHAN <137146632+OmaryKoo@users.noreply.github.com> Date: Tue, 1 Jul 2025 17:12:50 +0900 Subject: [PATCH 27/28] =?UTF-8?q?feat:=20Enum=20=EC=97=B4=EA=B1=B0?= =?UTF-8?q?=ED=98=95=20=ED=83=80=EC=9E=85=EC=9D=84=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=20limit=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20(=EC=97=B0=EC=8A=B5=EB=AC=B8=EC=A0=9C4-2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...51\354\226\264\354\240\225\353\246\254.md" | 23 +++++++++++++++ .../exam01/StrongBox.java | 29 +++++++++++++++++-- .../exam01/StrongBoxTest.java | 24 +++++++++++++++ 3 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/StrongBoxTest.java diff --git "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" index f2ddb058..0b726eab 100644 --- "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" +++ "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" @@ -1,3 +1,26 @@ + +# 제네릭, 열거형, 중첩 클래스 (25.07.01) +### 제네릭(Generic) +* 타입을 일반화해서 작성 -> 나중에 구체적인 타입 지정 +* T, E, K, V 일반적으로 표현하나 자유롭게~ + +### 열거형(Enum) +* 상수들을 하나의 타입으로 묶음 +* 내부에 필드와 생성자도 가질 수 있음(사실상 객체) + +```java +enum KeyType { + PADLOCK(1024), BUTTON(10000); + private final int limit; + KeyType(int limit) { + this.limit = limit; + } + public int getLimit() { + return limit; + } +} +``` + # 추상클래스와 인터페이스 (25.06.24) * 클래스는 크게 **일반 클래스**와 **추상 클래스**로 나뉨. **추상 클래스**는 클래스 내 '추상 클래스'가 하나이상 포함하거나 abstract로 정의된 경우를 말함. diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/StrongBox.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/StrongBox.java index 2133c0cb..52de5683 100644 --- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/StrongBox.java +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/StrongBox.java @@ -2,15 +2,38 @@ public class StrongBox { private E data; + private KeyType keyType; + private int count; public void put(E data) { - if (this.data != null) { - return; - } this.data = data; } + public StrongBox(KeyType keyType) { + this.keyType = keyType; + } + public E get() { + count++; + + if(count<=keyType.getLimit()) { + return null; + } + return this.data; } + + public enum KeyType { + PADLOCK(1024), BUTTON(10000), DIAL(30000), FINGER(1000000); + + private final int limit; + + KeyType(int limit) { + this.limit = limit; + } + + public int getLimit() { + return limit; + } + } } diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/StrongBoxTest.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/StrongBoxTest.java new file mode 100644 index 00000000..df1405c5 --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/StrongBoxTest.java @@ -0,0 +1,24 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class StrongBoxTest { + + @Test + @DisplayName("제한 횟수 초과되면 열림") + + void testUnlock() { + StrongBox box = new StrongBox(StrongBox.KeyType.PADLOCK); + box.put("data"); + + for(int i = 0; i<1024; i++) { + assertNull(box.get()); + } + + assertEquals("data",box.get()); + } + +} \ No newline at end of file From f53e54bbcfa704129640b8b87e53bf5211fe51c5 Mon Sep 17 00:00:00 2001 From: KOO TAEHAN <137146632+OmaryKoo@users.noreply.github.com> Date: Mon, 7 Jul 2025 19:51:06 +0900 Subject: [PATCH 28/28] =?UTF-8?q?feat:=20Book2=20=ED=95=A8=EC=88=98=20/=20?= =?UTF-8?q?Book2Test=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...51\354\226\264\354\240\225\353\246\254.md" | 15 ++++ .../assignments_01_instance/exam01/Book2.java | 68 +++++++++++++++++++ .../exam01/Book2Test.java | 20 ++++++ 3 files changed, 103 insertions(+) create mode 100644 src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book2.java create mode 100644 src/test/java/com/survivalcoding/assignments_01_instance/exam01/Book2Test.java diff --git "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" index 0b726eab..187a2c85 100644 --- "a/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" +++ "b/TIL/topics/java_basic/\354\232\251\354\226\264\354\240\225\353\246\254.md" @@ -1,4 +1,18 @@ +# 인스턴스의 기본 조작 (25.07.07) +### equals() & hashCode() +* equals(): 객체의 내용 비교를 위한 메서드 +* hashCode(): 객체를 해서 기반 컬렉션(Set,Map 등)에 넣기 위한 해시값 생성기 + +### toString() & clone() +* toString(): 객체의 내용을 문자열로 확인할 때 유용 +* clone(): 객체 복사 지원(Cloneable 인터페이스와 함께 사용) + +### 얕은 복사 & 깊은 복사 +* 얕은 복사: 참조 변수 주소만 복사 / 내부 객체는 같은 인스턴스 공유 +* 깊은 복사: 내부 객체까지 새로 복사 / 내부 객체도 새로운 인스턴스 + + # 제네릭, 열거형, 중첩 클래스 (25.07.01) ### 제네릭(Generic) * 타입을 일반화해서 작성 -> 나중에 구체적인 타입 지정 @@ -21,6 +35,7 @@ enum KeyType { } ``` + # 추상클래스와 인터페이스 (25.06.24) * 클래스는 크게 **일반 클래스**와 **추상 클래스**로 나뉨. **추상 클래스**는 클래스 내 '추상 클래스'가 하나이상 포함하거나 abstract로 정의된 경우를 말함. diff --git a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book2.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book2.java new file mode 100644 index 00000000..cd7a9eba --- /dev/null +++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book2.java @@ -0,0 +1,68 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import java.util.Date; + +public class Book2 implements Comparable { + private String title; + private Date publishDate; + private String comment; + + public Book2(String title, Date publishDate, String comment) { + this.title = title; + this.publishDate = publishDate; + this.comment = comment; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Date getPublishDate() { + return publishDate; + } + + public void setPublishDate(Date publishDate) { + this.publishDate = publishDate; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + Book2 other = (Book2) obj; + return this.title.equals(other.title) && this.publishDate.equals(other.publishDate); + } + + @Override + public int hashCode() { + return title.hashCode() + publishDate.hashCode(); + } + + @Override + public int compareTo(Book2 other) { + return this.publishDate.compareTo(other.publishDate); + } + + public Book2 clone() { + return new Book2( + this.title, (Date) this.publishDate.clone(), this.comment + ); + + } +} + + + diff --git a/src/test/java/com/survivalcoding/assignments_01_instance/exam01/Book2Test.java b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/Book2Test.java new file mode 100644 index 00000000..036e096e --- /dev/null +++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/Book2Test.java @@ -0,0 +1,20 @@ +package com.survivalcoding.assignments_01_instance.exam01; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import static org.junit.jupiter.api.Assertions.*; +import java.util.Date; + +class Book2Test { + + @Test + @DisplayName("같은 제목, 출간일이면 equals은 true") + void equalsTest() { + Date date = new Date(); + Book2 book1 = new Book2("name", date, "가"); + Book2 book2 = new Book2("name", date, "나"); + + assertTrue(book1.equals(book2)); + } + +} \ No newline at end of file