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 @@
+# 저는 구태한입니다.
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..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"
@@ -0,0 +1,144 @@
+
+# 인스턴스의 기본 조작 (25.07.07)
+### equals() & hashCode()
+* equals(): 객체의 내용 비교를 위한 메서드
+* hashCode(): 객체를 해서 기반 컬렉션(Set,Map 등)에 넣기 위한 해시값 생성기
+
+### toString() & clone()
+* toString(): 객체의 내용을 문자열로 확인할 때 유용
+* clone(): 객체 복사 지원(Cloneable 인터페이스와 함께 사용)
+
+### 얕은 복사 & 깊은 복사
+* 얕은 복사: 참조 변수 주소만 복사 / 내부 객체는 같은 인스턴스 공유
+* 깊은 복사: 내부 객체까지 새로 복사 / 내부 객체도 새로운 인스턴스
+
+
+# 제네릭, 열거형, 중첩 클래스 (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로 정의된 경우를 말함.
+* **인터페이스**는 모든 메소드가 추상 메소드인 경우
+
+### 추상클래스와 인터페이스의 차이점
+추상클래스는 일부 구현된 설계도, 인터페이스는 기능 약속을 위한 설계도
+
+*추상클래스* -> "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 {
+
+ }
+위와 같이 부모 클래스를 extends 뒤에 기술함.
+프로그램에서는 자식이 부모를 선택함.
+
+▶ 자바에서는 다중 상속을 허용하지 않음!! 여러 개 부모 클래스를 상속할 수 없음. 따라서 extends 뒤에는 단 하나의 부모 클래스만이 와야 함.
+
+* super = 부모 클래스에 접근하는 키워드
+상속구조에서, 자식 클래스는 부모 클래스의 속성과 매서드를 상속받아 사용할 수 있는데, super를 쓰면 부모의 기능을 호출하거나 접근가능.
+
+▶ this. 나 자신
+▶ super. 부모
+
+* 오버라이딩 : 부모 클래스에서 정의한 매서드를 자식 클래스에서 재정의
+부모의 것을 그대로 쓰는 게 아니라 입맛대로 바꿔서 쓰겠다? 그런 의미
+
+@Override
+public void attack(Hero hero) {
+super.attack(hero);
+~
+}
+
+@Override는 부모에 정의된 매서드를 재정의하고 있다는 표시
+
+---
+# 캡슐화 용어 정리 (25.06.17)
+
+* 캡슐화란,
+캡슐화는 클래스 내부의 데이터에 외부에서 직접 접근하지 못하도록 막고, 대신 메서드를 통해서만 접근하게 하여
+데이터를 안전하게 보호하는 개념. 특히 현실 세계에서는 들어갈 수 없는 잘못된 값이 필드에 저장되지 않도록 제어하는 데 매우 중요
+
+* 접근 제한자에 따른 멤버 접근 규칙
+private으로 선언된 필드는 해당 클래스 내부에서만 접근 가능
+public으로 선언된 필드나 메서드는 어떤 클래스에서도 자유롭게 접근 가능
+
+* 캡슐화를 올바르게 적용하려면, 클래스는 public으로 선언하고, 필드는 반드시 private로 선언.
+필드에 접근하고 수정하기 위해서는 public 매서드(getter,setter)를 따로 만들어 제공함.
+
+
+##클래스 생성자 용어 정리 (25.06.16)
+
+* 클래스 변수는 값이 아니라 객체의 주소(참조)를 저장함.
+그래서 하나의 객체를 여러 변수가 가리킬 수 있으며, 한 쪽에서 바꾸면 다른 쪽도 바뀜.
+
+
+* 생성자는 객체를 만들 때 자동으로 실행되는 메서드. 여러 개 만들 수 있음(오버로딩), 그리고 this로 다른 생성자를 내부에서 부를 수도 있음.
+
+
+* 정적 멤버(static)이 붙은 변수나 메서드는 클래스명, 변수명으로 바로 쓸 수 있고, 모든 인스턴스가 같은 값을 공유함.
+
+---
+# 객체지향언어 용어 정리 (25.06.10)
+
+오브젝트(object) : 현실 세계 모든 객체(사물이 아닌 경우가 많음)
+
+클래스(class) : 객체를 만들어내기 위한 설계도 / 변수와 매서드의 집합
+
+인스턴스(instance) : 설계도를 바탕으로 가상 세계에 구현된 구체적인 실체(실체화된 인스턴스는 메모리에 할당)
+
+*직무에선 오브젝트를 인스턴스와 같은 개념으로 혼용하며 사용된다함.
+
+클래스를 만드는 이유는 재사용성 때문에 만듦.
+
+
+
+final : 변경불가 키워드(const 같은 거) _ 한번 초기화되면 이후로 값이 바뀔 수 없음.
+this : 현재 객체를 참조하는 키워드 _ 현재 객체 자기 자신을 가리킴.
+
+
+## 메모
+객체마다 고유의 속성이 있는데, class로 표현하면 이해하기가 수월함.
+객체지향을 함으로써 성능면에서는 메리트가 없음(메모리 사용 or 실행 속도 등)
+
+비록 느리고 메모리 사용도 많은 객체지향 방식을 굳이 쓰는 이유가 개발자가 헷갈리지 않게 하려고, 결국 버그를 줄이기 위함.
+
+
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/TangibleAsset.puml b/src/main/java/com/survivalcoding/TangibleAsset.puml
new file mode 100644
index 00000000..9743ab3b
--- /dev/null
+++ b/src/main/java/com/survivalcoding/TangibleAsset.puml
@@ -0,0 +1,31 @@
+@startuml
+'https://plantuml.com/class-diagram
+
+interface Thing {
++double weight()
+}
+
+abstract class Asset {
+-String name;
+-int price;
+}
+
+class TangibleAsset extends Asset implements Thing {
+-String color;
+}
+
+class IntangibleAsset extends Asset {
+}
+
+class Book extends TangibleAsset {
+-String isbn;
+}
+
+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/Book.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book.java
new file mode 100644
index 00000000..08accf29
--- /dev/null
+++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Book.java
@@ -0,0 +1,19 @@
+package com.survivalcoding.assignments_01_instance.exam01;
+
+public class Book extends TangibleAsset {
+ private String isbn;
+ private double weight;
+
+ 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/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/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/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
new file mode 100644
index 00000000..6eef476c
--- /dev/null
+++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Hero.java
@@ -0,0 +1,31 @@
+package com.survivalcoding.assignments_01_instance.exam01;
+
+public class Hero {
+ private String name;
+ 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;
+ }
+
+ 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/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/Person.java b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java
index 039b0123..13ae515f 100644
--- a/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java
+++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Person.java
@@ -1,27 +1,28 @@
package com.survivalcoding.assignments_01_instance.exam01;
+import java.util.Date;
+
public class Person {
- private String name;
- private int age;
+ private final String name;
+ private final int birthYear;
- public Person(String name, int age) {
+ public Person(String name, int birthYear){
this.name = name;
- this.age = age;
+ this.birthYear = birthYear;
}
- public String getName() {
+ public String getName(){
return name;
}
- public int getAge() {
- return age;
+ public int getBirthYear(){
+ return birthYear;
}
- public void setAge(int age) {
- this.age = age;
+ public int getAge(){
+ Date date = new Date();
+ int currentYear = date.getYear() + 1900;
+ return currentYear - birthYear;
}
- public static void main(String[] args) {
- Person person = new Person("John", 30);
- }
}
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/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..52de5683
--- /dev/null
+++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/StrongBox.java
@@ -0,0 +1,39 @@
+package com.survivalcoding.assignments_01_instance.exam01;
+
+public class StrongBox {
+ private E data;
+ private KeyType keyType;
+ private int count;
+
+ public void put(E data) {
+ 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/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..a233e20f
--- /dev/null
+++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/TangibleAsset.java
@@ -0,0 +1,30 @@
+package com.survivalcoding.assignments_01_instance.exam01;
+//연습3에서 4 모두 작성
+public class TangibleAsset extends Asset implements Thing {
+
+ private String color;
+ private double weight;
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ 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/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..0767b76e
--- /dev/null
+++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wand.java
@@ -0,0 +1,29 @@
+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){
+
+ 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
new file mode 100644
index 00000000..a748f216
--- /dev/null
+++ b/src/main/java/com/survivalcoding/assignments_01_instance/exam01/Wizard.java
@@ -0,0 +1,66 @@
+package com.survivalcoding.assignments_01_instance.exam01;
+
+public class Wizard {
+
+ private String name;
+ private Wand wand;
+ private int hp;
+ private int mp = 100;
+
+
+ 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){
+ 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;
+ }
+
+void heal (Hero hero){
+ //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/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/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
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..46c8f991
--- /dev/null
+++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/BookTest.java
@@ -0,0 +1,31 @@
+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());
+ }
+
+ @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
new file mode 100644
index 00000000..fb92cdf9
--- /dev/null
+++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/ComputerTest.java
@@ -0,0 +1,30 @@
+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());
+ }
+
+ @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
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
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/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
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..cfa6c57a
--- /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..9cebe29e
--- /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
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
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
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..73b75f2b
--- /dev/null
+++ b/src/test/java/com/survivalcoding/assignments_01_instance/exam01/WizardTest.java
@@ -0,0 +1,80 @@
+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;
+
+public class WizardTest {
+
+ @Test
+ public void testHeal() {
+ 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());
+
+ }
+
+
+ @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());
+
+ }
+
+ @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());
+
+ }
+
+}
+
+
+
+