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()); + + } + +} + + + +