์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- go
- ๋กฌ๋ณต
- Vue.js
- golang
- Git
- Postman
- MySQL
- ํด๋ฆฐ์ฝ๋
- Spring
- ์๊ณ ๋ฆฌ์ฆ
- ์คํ๋ง
- H2 ์ค์น
- mariadb
- Gradle
- ์ฝ๋์
- Codeup
- JPA
- spring security
- ์ค๋ธ์
- ํด๋ฆฐ ์ฝ๋
- ํ์ด์ฌ
- springboot
- GitHub
- ๊ฐ์ฌ์ค
- Spring Boot
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- java
- thymeleaf
- Python
- ๊ธฐ์ด100์
- Today
- Total
nyximos.log
[Java] ์ ์ด๋ฌธ ๋ณธ๋ฌธ
๐ฉ๐ ๋ชฉํ
์๋ฐ๊ฐ ์ ๊ณตํ๋ ์ ์ด๋ฌธ์ ํ์ตํ์ธ์.
๐ฉ๐ป ํ์ตํ ๊ฒ
- ์ ํ๋ฌธ
- ๋ฐ๋ณต๋ฌธ
๐ฉ๐ฌ ๊ณผ์
๊ณผ์ 0. JUnit 5 ํ์ตํ์ธ์.
์ธํ ๋ฆฌJ, ์ดํด๋ฆฝ์ค, VS Code์์ JUnit 5๋ก ํ ์คํธ ์ฝ๋ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ต์ํด ์ง ๊ฒ.
์ด๋ฏธ JUnit ์๊ณ ๊ณ์ ๋ถ๋ค์ ๋ค๋ฅธ ๊ฒ ์๋ฌด๊ฑฐ๋!
๋ ์๋ฐ, ํ ์คํธ ๊ฐ์๋ ์์ผ๋ ์ฐธ๊ณ ํ์ธ์~
๊ณผ์ 1. live-study ๋์ ๋ณด๋๋ฅผ ๋ง๋๋ ์ฝ๋๋ฅผ ์์ฑํ์ธ์.
๊นํ ์ด์ 1๋ฒ๋ถํฐ 18๋ฒ๊น์ง ๋๊ธ์ ์ํํ๋ฉฐ ๋๊ธ์ ๋จ๊ธด ์ฌ์ฉ์๋ฅผ ์ฒดํฌ ํ ๊ฒ.
์ฐธ์ฌ์จ์ ๊ณ์ฐํ์ธ์. ์ด 18ํ์ ์ค์ ๋ช %๋ฅผ ์ฐธ์ฌํ๋์ง ์์ซ์ ๋์๋ฆฌ๊ฐ์ง ๋ณด์ฌ์ค ๊ฒ.
Github ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํฉ๋๋ค.
๊นํ API๋ฅผ ์ต๋ช ์ผ๋ก ํธ์ถํ๋๋ฐ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ๋ณธ์ธ์ ๊นํ ํ๋ก์ ํธ์ ์ด์๋ฅผ ๋ง๋ค๊ณ ํ ์คํธ๋ฅผ ํ์๋ฉด ๋ ์์ฃผ ํ ์คํธํ ์ ์์ต๋๋ค.
๊ณผ์ 2. LinkedList๋ฅผ ๊ตฌํํ์ธ์.
LinkedList์ ๋ํด ๊ณต๋ถํ์ธ์.
์ ์๋ฅผ ์ ์ฅํ๋ ListNode ํด๋์ค๋ฅผ ๊ตฌํํ์ธ์.
ListNode add(ListNode head, ListNode nodeToAdd, int position)๋ฅผ ๊ตฌํํ์ธ์.
ListNode remove(ListNode head, int positionToRemove)๋ฅผ ๊ตฌํํ์ธ์.
boolean contains(ListNode head, ListNode nodeTocheck)๋ฅผ ๊ตฌํํ์ธ์.
๊ณผ์ 3. Stack์ ๊ตฌํํ์ธ์.
int ๋ฐฐ์ด์ ์ฌ์ฉํด์ ์ ์๋ฅผ ์ ์ฅํ๋ Stack์ ๊ตฌํํ์ธ์.
void push(int data)๋ฅผ ๊ตฌํํ์ธ์.
int pop()์ ๊ตฌํํ์ธ์.
๊ณผ์ 4. ์์ ๋ง๋ ListNode๋ฅผ ์ฌ์ฉํด์ Stack์ ๊ตฌํํ์ธ์.
ListNode head๋ฅผ ๊ฐ์ง๊ณ ์๋ ListNodeStack ํด๋์ค๋ฅผ ๊ตฌํํ์ธ์.
void push(int data)๋ฅผ ๊ตฌํํ์ธ์.
int pop()์ ๊ตฌํํ์ธ์.
๊ณผ์ 5. Queue๋ฅผ ๊ตฌํํ์ธ์.
๋ฐฐ์ด์ ์ฌ์ฉํด์ ํ๋ฒ
ListNode๋ฅผ ์ฌ์ฉํด์ ํ๋ฒ.
๐งโ๏ธ ์ ํ๋ฌธ (์กฐ๊ฑด๋ฌธ)
์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฌธ์ฅ์ด ์ํ๋๋๋ก ํ๋ค.
if ๋ฌธ
์กฐ๊ฑด์๊ณผ ๊ดํธ { } ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
'๋ง์ผ(if) ์กฐ๊ฑด์์ด ์ฐธ true ๋ผ๋ฉด ๊ดํธ { } ์์ ๋ฌธ์ฅ๋ค์ ์ํํ๋ผ' ๋ผ๋ ์๋ฏธ
if (์กฐ๊ฑด์) {
// ์กฐ๊ฑด์์ด ์ฐธ true ์ผ ๋ ์ํ๋ ๋ฌธ์ฅ๋ค
}
๋ธ๋ญ { }
๊ดํธ { } ๋ฅผ ์ด์ฉํด์ ์ฌ๋ฌ ๋ฌธ์ฅ์ ํ๋์ ๋จ์๋ก ๋ฌถ์ ์ ์๋ค.
๋ธ๋ญ ๋ด์ ๋ฌธ์ฅ๋ค์ tab์ผ๋ก ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ํด์ ๋ธ๋ญ ์์ ์ํ ๋ฌธ์ฅ์ด๋ผ๋ ๊ฒ์ ์๊ธฐ ์ฝ๊ฒ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
๋ธ๋ญ ๋ด์ ๋ฌธ์ฅ์ด ํ๋๋ฟ์ผ ๊ฒฝ์ฐ ๊ดํธ๋ฅผ ์๋ตํ ์ ์์ง๋ง ๊ฐ๋ฅํ๋ฉด ์๋ตํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
์๋ก์ด ๋ฌธ์ฅ์ ์ถ๊ฐํ ๊ฒฝ์ฐ ๊ดํธ๋ฅผ ์๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
if - else ๋ฌธ
if ๋ฌธ์ else ๋ธ๋ญ์ด ์ถ๊ฐ ๋๋ค.
์กฐ๊ฑด์์ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ด ์๋ ๋ else ๋ธ๋ญ์ ๋ฌธ์ฅ์ ์ํํ๋ผ๋ ๋ป
if (์กฐ๊ฑด์) {
// ์กฐ๊ฑด์์ด ์ฐธ true ์ผ ๋ ์ํํ ๋ฌธ์ฅ๋ค
} else {
// ์กฐ๊ฑด์์ด ๊ฑฐ์ง false ์ผ ๋ ์ํ๋ ๋ฌธ์ฅ๋ค
}
if - else if ๋ฌธ
์ฒ๋ฆฌํด์ผ ํ ๊ฒฝ์ฐ์ ์๊ฐ ์ ์ด์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
if (์กฐ๊ฑด์1) {
// ์กฐ๊ฑด์1์ ์ฐ์ฐ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ผ ๋ ์ํ๋ ๋ฌธ์ฅ๋ค
} else if (์กฐ๊ฑด์2) {
// ์กฐ๊ฑด์2์ ์ฐ์ฐ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ผ ๋ ์ํ๋ ๋ฌธ์ฅ๋ค
} else if (์กฐ๊ฑด์3) {
// ์กฐ๊ฑด์3์ ์ฐ์ฐ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ผ ๋ ์ํ๋ ๋ฌธ์ฅ๋ค
} else {
// ๋ง์ง๋ง์ ๋ณดํต else๋ธ๋ญ์ผ๋ก ๋๋๋ฉฐ ์๋ต ๊ฐ๋ฅํ๋ค.
// ์์ ์ด๋ค ์กฐ๊ฑด์๋ ๋ง์กฑํ์ง ์์ ๋ ์ํ๋ ๋ฌธ์ฅ๋ค
}
์ค์ฒฉ if ๋ฌธ
if ๋ฌธ ๋ธ๋ญ ๋ด์ ๋ ๋ค๋ฅธ if ๋ฌธ์ ํฌํจ์ํจ ๋ฌธ์ฅ
๊ดํธ์ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ if ๋ฌธ์ ๋ฒ์๊ฐ ๋ช ํํ ๊ตฌ๋ถ๋ ์ ์๋๋ก ์์ฑํ๋ค.
if (์กฐ๊ฑด์1) {
// ์กฐ๊ฑด์1์ ์ฐ์ฐ๊ฒฐ๊ณผ๊ฐ true์ผ ๋ ์ํ๋ ๋ฌธ์ฅ๋ค
if (์กฐ๊ฑด์2) {
// ์กฐ๊ฑด์1๊ณผ ์กฐ๊ฑด์2๊ฐ ๋ชจ๋ true์ผ ๋ ์ํ๋ ๋ฌธ์ฅ๋ค
} else {
// ์กฐ๊ฑด์1์ด true์ด๊ณ , ์กฐ๊ฑด์2๊ฐ false์ผ ๋ ์ํ๋๋ ๋ฌธ์ฅ๋ค
}
} else {
// ์กฐ๊ฑด์1์ด false์ผ ๋ ์ํ๋๋ ๋ฌธ์ฅ๋ค
}
switch ๋ฌธ
ํ๋์ ์กฐ๊ฑด์์ผ๋ก ๋ง์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ณ ํํ์ด ๊ฐ๊ฒฐํ๋ค.
1. ์กฐ๊ฑด์์ ๊ณ์ฐํ๋ค.
2. ์กฐ๊ฑด์์ ๊ฒฐ๊ณผ์ ์ผ์นํ๋ case๋ฌธ์ผ๋ก ์ด๋ํ๋ค.
3. ์ดํ์ ๋ฌธ์ฅ๋ค์ ์ํํ๋ค.
4. break๋ฌธ์ด๋ switch๋ฌธ์ ๋์ ๋ง๋๋ฉด switch๋ฌธ ์ ์ฒด๋ฅผ ๋น ์ ธ๋๊ฐ๋ค.
switch (์กฐ๊ฑด์) {
case ๊ฐ1 :
// ์กฐ๊ฑด์์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ1๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ํ๋ ๋ฌธ์ฅ๋ค
break;
case ๊ฐ2 :
// ์กฐ๊ฑด์์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ2๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ํ๋ ๋ฌธ์ฅ๋ค
break;
default :
// ์กฐ๊ฑด์์ ๊ฒฐ๊ณผ์ ์ผ์นํ๋ case๋ฌธ์ด ์์ ๋ ์ํ๋ ๋ฌธ์ฅ๋ค
}
switch์ ์ ์ฝ์กฐ๊ฑด
- switch๋ฌธ๊ณผ case๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ์ด ์ ์ ๋๋ ๋ฌธ์์ด์ด์ฌ ํ๋ค.
- case๋ฌธ ๊ฐ์ ๋ฐ๋์ ์ ์ ์์, ๋ฌธ์์ด๋ง ๊ฐ๋ฅ, ์ค๋ณต๋๋ฉด ์๋๋ค.
- ๋ณ์๋ ์ค์ ๋ฆฌํฐ๋ด์ case๋ฌธ์ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
public static void main(String[] args) {
int num, result;
final int ONE = 1;
sitch(result) {
case '1': // ๋ฌธ์ ๋ฆฌํฐ๋ด ๊ฐ๋ฅ (๋ฌธ์ '1' == ์ ์ 49)
case ONE: // ์ ์ ์์ ๊ฐ๋ฅ
case "YES": // ๋ฌธ์์ด ๋ฆฌํฐ๋ ๊ฐ๋ฅ
case num: // ๋ณ์ ๋ถ๊ฐ๋ฅ
case 1.0: // ์ค์ ๋ถ๊ฐ๋ฅ
}
๐คนโ๏ธ ๋ฐ๋ณต๋ฌธ
์ด๋ค ์์ ์ด ๋ฐ๋ณต์ ์ผ๋ก ์ํ๋๋๋ก ํ ๋ ์ฌ์ฉ๋๋ค.
for ๋ฌธ
์ด๊ธฐํ, ์กฐ๊ฑด์, ์ฆ๊ฐ์, ๋ธ๋ญ { } ์ผ๋ก ๊ตฌ์ฑ
์กฐ๊ฑด์์ด ์ฐธ์ธ ๋์ ๋ธ๋ญ { } ๋ด์ ๋ฌธ์ฅ๋ค์ ๋ฐ๋ณตํ๋ค ๊ฑฐ์ง์ด ๋๋ฉด ๋ฐ๋ณต๋ฌธ์ ๋ฒ์ด๋๋ค.
์ด๊ธฐํ, ์กฐ๊ฑด์, ์ฆ๊ฐ์ ๋ถ๋ถ์ ์๋ตํ ์ ์๋ค.
์กฐ๊ฑด์์ด ์๋ต๋ ๊ฒฝ์ฐ ์ฐธ true๋ก ๊ฐ์ฃผ๋์ด ๋ฌดํ ๋ฐ๋ณต๋ฌธ์ด ๋๋ค.
๋ฌดํ ๋ฐ๋ณต์ ํ ์ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด for๋ฌธ์ ๋น ์ ธ ๋์ค๊ฒ ํด์ผ ํ๋ค.
์์
1. ์ด๊ธฐํ
2. ์กฐ๊ฑด์
3. ์ํ๋ ๋ฌธ์ฅ๋ค
4. ์ฆ๊ฐ์
for (์ด๊ธฐํ; ์กฐ๊ฑด์; ์ฆ๊ฐ์) {
// ์กฐ๊ฑด์์ด ์ฐธ true ์ธ ๋์ ์ํ๋ ๋ฌธ์ฅ๋ค
}
์ค์ฒฉ for ๋ฌธ
for ๋ฌธ ์์ ๋ ๋ค๋ฅธ for ๋ฌธ์ ํฌํจ์ํจ ๋ฌธ์ฅ
ํฅ์๋ for ๋ฌธ
JDK 1.5 ๋ถํฐ ๋ฐฐ์ด๊ณผ ์ปฌ๋ ์ ์ ์ ์ฅ๋ ์์์ ์ ๊ทผํ ๋ ํธ๋ฆฌํ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ์๋ก์ด ๋ฌธ๋ฒ์ด ์ถ๊ฐ๋์๋ค.
for(ํ์
๋ณ์๋ช
: ๋ฐฐ์ด์ด๋ ์ปฌ๋ ์
) {
๋ฐ๋ณตํ ๋ฌธ์ฅ
}
String[] fruits = new String[]{"apple", "banana", "orange", "grapes", "kiwi", "melon"}
for (String fruit : fruits) {
System.out.println(fruit);
}
while ๋ฌธ
for ๋ฌธ์ ๋นํด while ๋ฌธ์ ๊ตฌ์กฐ๊ฐ ๊ฐ๋จํ๋ค.
if ๋ฌธ์ฒ๋ผ ์กฐ๊ฑด์๊ณผ ๋ธ๋ญ { } ๋ง์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๋ค๋ง if ๋ฌธ๊ณผ ๋ฌ๋ฆฌ while ๋ฌธ์ ์กฐ๊ฑด์์ด ์ฐธ true ์ธ ๋์ ๋ฐ๋ณตํ๋ฉฐ ์กฐ๊ฑด์์ด ๊ฑฐ์ง์ด ๋๋ฉด ๋ฐ๋ณต์ ๋ฉ์ถ๋ค.
์์
1. ์กฐ๊ฑด์์ด ์ฐธ true ์ด๋ฉด ๋ธ๋ญ { } ์์ผ๋ก ๋ค์ด๊ฐ๊ณ , ๊ฑฐ์ง false ์ด๋ฉด while ๋ฌธ์ ๋ฒ์ด๋๋ค.
2. ๋ธ๋ญ { } ์ ๋ฌธ์ฅ์ ์ํํ๊ณ ๋ค์ ์กฐ๊ฑด์์ผ๋ก ๋์๊ฐ๋ค.
while (์กฐ๊ฑด์) {
// ์กฐ๊ฑด์์ ์ฐ์ฐ ๊ฒฐ๊ณผ ์ฐธ true์ธ ๋์ ๋ฐ๋ณต๋ ๋ฌธ์ฅ๋ค
}
do - while ๋ฌธ
while ๋ฌธ๊ณผ ๋ฐ๋๋ก ๋ธ๋ญ { }์ ๋จผ์ ์ํํ ํ์ ์กฐ๊ฑด์์ ํ๊ฐํ๋ค.
๋ฐ๋ผ์ ์ต์ํ ํ๋ฒ์ ์ํ๋ ๊ฒ์ ๋ณด์ฅํ๋ค.
๋์ ์๋ฐ์ ; ์ ์์ง ์๋๋ก ์ฃผ์ํ์.
do {
// ์กฐ๊ฑด์์ ์ฐ์ฐ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ผ ๋ ์ํ๋ ๋ฌธ์ฅ๋ค์ ์ ๋๋ค. (์ฒ์ ๋ฌด์กฐ๊ฑด ํ ๋ฒ์ ์คํ)
} while (์กฐ๊ฑด์);
break ๋ฌธ
์์ ์ด ํฌํจ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ๋ณต๋ฌธ์ ๋ฒ์ด๋๋ค.
์ฃผ๋ก if ๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ ๋ ๋ฐ๋ณต๋ฌธ์ ๋ฒ์ด๋๊ฒ ๋๋ค.
continue ๋ฌธ
๋ฐ๋ณต๋ฌธ ๋ด์์๋ง ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก if ๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ค.
๋ฐ๋ณต๋ฌธ์ด ์งํ๋๋ ๋์ค์ continue๋ฌธ์ ๋ง๋๋ฉด ๋ฐ๋ณต๋ฌธ์ ๋์ผ๋ก ์ด๋ํ์ฌ ๋ค์ ๋ฐ๋ณต์ผ๋ก ๋์ด๊ฐ๋ค.
for๋ฌธ์ ๊ฒฝ์ฐ ์ฆ๊ฐ์์ผ๋ก ์ด๋ํ๋ฉฐ, while๋ฌธ๊ณผ do-while๋ฌธ์ ๊ฒฝ์ฐ ์กฐ๊ฑด์์ผ๋ก ์ด๋ํ๋ค.
break๋ฌธ๊ณผ ๋ค๋ฅด๊ฒ ๋ฐ๋ณต๋ฌธ ์ ์ฒด๋ฅผ ๋ฒ์ด๋์ง ์๊ณ ๋ค์ ๋ฐ๋ณต์ ๊ณ์ ์ํํ๋ค.
๊ณผ์ 0. JUnit 5 ํ์ตํ์ธ์.
์ธํ ๋ฆฌJ, ์ดํด๋ฆฝ์ค, VS Code์์ JUnit 5๋ก ํ ์คํธ ์ฝ๋ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ต์ํด ์ง ๊ฒ.
์ด๋ฏธ JUnit ์๊ณ ๊ณ์ ๋ถ๋ค์ ๋ค๋ฅธ ๊ฒ ์๋ฌด๊ฑฐ๋!
๋ ์๋ฐ, ํ ์คํธ ๊ฐ์๋ ์์ผ๋ ์ฐธ๊ณ ํ์ธ์~
https://junit.org/junit5/docs/current/user-guide/
JUnit
์๋ฐ ๊ฐ๋ฐ์ 93%๊ฐ ์ฌ์ฉํ๋ ๋จ์ ํ ์คํธ ํ๋ ์ ์ํฌ
JUnit 5๋ Java 8(๋๋ ๊ทธ ์ด์)์ด ํ์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ์ JDK๋ก ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ๊ณ์ ํ ์คํธํ ์ ์์ต๋๋ค.
์ด์ ๋ฒ์ ๊ณผ ๋ฌ๋ฆฌ ์ธ๊ฐ์ง ํ์ ํ๋ก์ ํธ์ ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Platform
JVM์์ ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์์ํ๊ธฐ ์ํ ๊ธฐ๋ฐ ์ญํ
TestEngine Platform์์ ์คํ๋๋ ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ API ์ ๊ณต
JUnit Jupiter
JUnit5๋ฅผ ์ ๊ณตํ๋ค.
Jupiter ๊ธฐ๋ฐ ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ํ ํ ์คํธ ์์ง ์ ๊ณต
JUnit Vintage
JUnit 3, JUnit 4 ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ํ ํ ์คํธ ์์ง ์ ๊ณต
์ธํ ๋ฆฌ์ ์ด๋ก JUnit์ ์ฌ์ฉํ๊ธฐ ์ํด ํ๋ก์ ํธ๋ฅผ ์์ฑํด๋ณด์.
Gradle ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ JUnit5 ์์กด์ฑ์ด ์ถ๊ฐ๋์๋ค.
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์.
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class Tests {
@Test
void addition() {
assertEquals(2, 1+1);
}
}
@Test
ํ ์คํธ ๋ฉ์๋์์ ์๋ ค์ฃผ๋ ํ ์คํธ
JUnit 4์ @Test์ ๋ฌ๋ฆฌ ์์ฑ์ ์ ์ธํ์ง ์๋๋ค.
JUnit Jupiter ์ ํ ์คํธ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์์ฒด ์ ์ฉ ์ฃผ์์ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ค.
@BeforeEach
ํด๋์ค์ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ ์ ๊ฐ ํ ์คํธ๋ง๋ค ์คํ๋์ด์ผ ํ๋ค.
@AfterEach
ํด๋์ค์ ๋ฉ์๋๊ฐ ์คํ๋ ํ์ ๊ฐ ํ ์ฆํธ๋ง๋ค ์คํ๋์ด์ผ ํ๋ค.
@BeforeAll
ํ ์คํธ ํด๋์ค๊ฐ ์คํ๋๊ธฐ ์ ์ ์ ๋ถ ์คํ๋์ด์ผ ํ๋ค.
@AfterAll
ํ ์คํธ๊ฐ ๋ชจ๋ ์คํ๋ ํ์ ์คํ๋์ด์ผ ํ๋ค.
@Disabled
ํ ์คํธ ํด๋์ค ๋๋ ํ ์คํธ ๋ฉ์๋๋ฅผ ๋นํ์ฑํ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์คํ ์์
import org.junit.jupiter.api.*;
class Tests {
@Test
void test() {
System.out.println("test");
}
@BeforeEach
void beforeEach() {
System.out.println("beforeEach");
}
@BeforeAll
static void beforeSetup() {
System.out.println("beforeAll");
}
@AfterAll
static void afterAll() {
System.out.println("afterAll");
}
@AfterEach
void afterEach() {
System.out.println("afterEach");
}
}
beforeAll
beforeEach
test
afterEach
afterAll
@DisplayName
ํ ์คํธ ํด๋์ค ๋๋ ํ ์คํธ ๋ฉ์๋์ ๋ํ ์ฌ์ฉ์ ์ง์ ํ์ ์ด๋ฆ ์ ์ ์ธํฉ๋๋ค.
@DisplayNameGeneration
ํ ์คํธ ํด๋์ค ๋๋ ํ ์คํธ ๋ฉ์๋์ ๋ํ ์ฌ์ฉ์ ์ง์ ํ์ ์ด๋ฆ ์์ฑ๊ธฐ ๋ฅผ ์ ์ธํฉ๋๋ค.
strategy๋ง๋ค ์ถ๋ ฅ ๊ฒฐ๊ณผ ์ด๋ฆ์ด ๋ฌ๋ผ์ง๋ค.
JUnit 5 Assertions
JUnit 4๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋์ Java 8์ ๋๋ค์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์ถ๊ฐ๋์๋ค.
assertEquals(expected, actual)
๊ธฐ๋ํ ๊ฐ์ด ์ค์ ๊ฐ๊ณผ ๊ฐ์์ง ํ์ธํ๋ ๋ฉ์๋
assertNotNull(Object actual)
๊ฒฐ๊ณผ ๊ฐ์ด null ์ธ์ง ํ์ธํ๋ ๋ฉ์๋
assertTrue(boolean condition)
์กฐ๊ฑด์ด ์ฐธ์ธ์ง ํ์ธํ๋ ๋ฉ์๋
assertThrows(Class<T> expectedType, Executable executable)
์์ธ ๋ฐ์ ํ์ธํ๋ ๋ฉ์๋
assertTimeout(Duration timeout, Executable executable)
ํน์ ์๊ฐ ์์ ์คํ์ด ์๋ฃ๋๋์ง ํ์ธ
๊ณผ์ 1. live-study ๋์ ๋ณด๋๋ฅผ ๋ง๋๋ ์ฝ๋๋ฅผ ์์ฑํ์ธ์.
- ๊นํ ์ด์ 1๋ฒ๋ถํฐ 18๋ฒ๊น์ง ๋๊ธ์ ์ํํ๋ฉฐ ๋๊ธ์ ๋จ๊ธด ์ฌ์ฉ์๋ฅผ ์ฒดํฌ ํ ๊ฒ.
- ์ฐธ์ฌ์จ์ ๊ณ์ฐํ์ธ์. ์ด 18ํ์ ์ค์ ๋ช %๋ฅผ ์ฐธ์ฌํ๋์ง ์์ซ์ ๋์๋ฆฌ๊ฐ์ง ๋ณด์ฌ์ค ๊ฒ.
- Github ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํฉ๋๋ค.
- ๊นํ API๋ฅผ ์ต๋ช ์ผ๋ก ํธ์ถํ๋๋ฐ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ๋ณธ์ธ์ ๊นํ ํ๋ก์ ํธ์ ์ด์๋ฅผ ๋ง๋ค๊ณ ํ ์คํธ๋ฅผ ํ์๋ฉด ๋ ์์ฃผ ํ ์คํธํ ์ ์์ต๋๋ค.
Access Token ์์ฑ
GitHub - ์ฐ์ธก ์๋จ ํ๋กํ ํด๋ฆญ - Setting
Developer Setting - Personal access tokens -Generate
repo ๊ถํ ์ ํ - Generate token
๋ณต์ฌํด์ ์ฌ์ฉํ๊ณ ๊นํ๋ธ ์ ๊ทผ์ ํจ์ค์๋์ ๊ฐ์ผ๋ฏ๋ก ์ ์ ์ฅํด๋์.
Postman์ผ๋ก ํ ํฐ์ด ์ ์์ ์ผ๋ก ๋ฐ๊ธ๋์๋์ง ํ์ธ
GET ๋ฐฉ์์ผ๋ก https://api.github.com/user ๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด
Headers์ ์๋ ๋ด์ฉ๋ ์ถ๊ฐํด์ค๋ค.
key : Authorization
value : token [๋ฐฉ๊ธ ๋ฐ๊ธ๋ฐ์ ํ ํฐ]
์๋ต์ผ๋ก 200 OK, ๋ณธ์ธ GitHub ์ ๋ณด๊ฐ ๋จ๋ฉด ์ฑ๊ณต!
GitHub API for Java - Download
๋๋ Gradle ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ gradle ์ ๋๋ฌ ๋ณต์ฌํด์
build.gradle์ ๋ถ์ฌ๋ฃ๊ณ refresh ํด์ฃผ์๋ค.
์ฝ๋ ์์ฑ ํ RUN !!!
์ฐธ๊ณ
๊นํ๋ธ 2FA Personal Access Token ์ฌ์ฉํ๊ธฐ
๊ณผ์ 2. LinkedList๋ฅผ ๊ตฌํํ์ธ์.
- LinkedList์ ๋ํด ๊ณต๋ถํ์ธ์.
- ์ ์๋ฅผ ์ ์ฅํ๋ ListNode ํด๋์ค๋ฅผ ๊ตฌํํ์ธ์.
- ListNode add(ListNode head, ListNode nodeToAdd, int position)๋ฅผ ๊ตฌํํ์ธ์.
- ListNode remove(ListNode head, int positionToRemove)๋ฅผ ๊ตฌํํ์ธ์.
- boolean contains(ListNode head, ListNode nodeTocheck)๋ฅผ ๊ตฌํํ์ธ์.
package week4.linkedList;
public class ListNode {
private int data;
public ListNode link;
public ListNode() {
this.data = 0;
this.link = null;
}
public ListNode(int data){
this.data = data;
this.link = null;
}
public ListNode(int data, ListNode link) {
this.data = data;
this.link = link;
}
public int getData(){
return this.data;
}
public ListNode add(ListNode head, ListNode nodeToAdd, int position) {
ListNode node = head;
for (int i=0; i < position-1; i++) {
node = node.link;
}
nodeToAdd.link = node.link;
node.link = nodeToAdd;
return nodeToAdd;
}
public ListNode remove(ListNode head, int positionToRemove) {
ListNode node = head;
for (int i=0; i < positionToRemove-1; i++) {
node = node.link;
}
ListNode temp = node.link;
node.link = temp.link;
temp.link = null;
return temp;
}
public boolean contains(ListNode head, ListNode nodeTocheck) {
ListNode node = head;
while (node.link != null) {
if (node == nodeTocheck){
return true;
}
node = node.link;
}
return false;
}
public void printList(ListNode head) {
ListNode temp = head;
System.out.print(" ์์ : ");
while (temp.link != null) {
System.out.print(temp.data + ", ");
temp = temp.link;
}
System.out.println(temp.data);
}
}
import org.junit.jupiter.api.*;
import week4.linkedList.ListNode;
import static org.junit.jupiter.api.Assertions.*;
public class LinkedListTest {
ListNode listNode = new ListNode();
ListNode five = new ListNode(5);
ListNode four = new ListNode(4, five);
ListNode three = new ListNode(3, four);
ListNode two = new ListNode(2, three);
ListNode one = new ListNode(1, two);
ListNode zero = new ListNode(0, one);
@AfterEach
void printAll(){
listNode.printList(zero);
}
@Test()
public void addTest() throws Exception {
ListNode six = new ListNode(6);
zero.add(zero, six, 3);
}
@Test
public void removeTest() throws Exception {
listNode.remove(listNode, 3);
}
@Test
public void containTest() throws Exception {
boolean containStatus = zero.contains(zero, three);
assertTrue(containStatus);
}
@Test
public void excludeTest() throws Exception {
ListNode seven = new ListNode(7);
boolean containStatus = zero.contains(zero, seven);
assertEquals(false, containStatus);
}
}
๊ณผ์ 3. Stack์ ๊ตฌํํ์ธ์.
- int ๋ฐฐ์ด์ ์ฌ์ฉํด์ ์ ์๋ฅผ ์ ์ฅํ๋ Stack์ ๊ตฌํํ์ธ์.
- void push(int data)๋ฅผ ๊ตฌํํ์ธ์.
- int pop()์ ๊ตฌํํ์ธ์.
public class ArrayStack {
public int[] arr;
public int top = -1;
public ArrayStack(int length){
arr = new int[length];
}
public void push(int data) {
if (top < arr.length-1) {
arr[++top] = data;
} else {
throw new StackOverflowError();
}
}
public int pop() {
if (top>0) {
int temp = arr[top--];
return temp;
} else {
throw new NullPointerException();
}
}
}
public class ArrayStackTest {
@Test @DisplayName("push O")
public void pushTest() throws Exception {
ArrayStack stack = new ArrayStack(5);
stack.push(0);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(45);
Assertions.assertEquals(stack.arr[stack.top], stack.arr[4]);
}
@Test @DisplayName("ArrayIndexOutOfBoundsException")
public void ArrayIndexOutOfBoundsExceptionTest() throws Exception {
ArrayStack stack = new ArrayStack(5);
stack.push(0);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(45);
stack.push(6);
}
@Test @DisplayName("pop O")
public void popTest() throws Exception {
ArrayStack stack = new ArrayStack(5);
stack.push(0);
stack.push(1);
stack.push(2);
stack.pop();
stack.pop();
}
@Test @DisplayName("NullPointerException")
public void popTestFail() throws Exception {
ArrayStack stack = new ArrayStack(5);
stack.push(0);
stack.push(1);
stack.push(2);
stack.pop();
stack.pop();
stack.pop();
}
}
๊ณผ์ 4. ์์ ๋ง๋ ListNode๋ฅผ ์ฌ์ฉํด์ Stack์ ๊ตฌํํ์ธ์.
- ListNode head๋ฅผ ๊ฐ์ง๊ณ ์๋ ListNodeStack ํด๋์ค๋ฅผ ๊ตฌํํ์ธ์.
- void push(int data)๋ฅผ ๊ตฌํํ์ธ์.
- int pop()์ ๊ตฌํํ์ธ์.
public class ListNodeStack {
public ListNode head;
public boolean isEmpty(){
return (head == null);
}
public void push(int data) {
if (isEmpty()) {
ListNode newNode = new ListNode(data);
head = newNode;
} else {
ListNode newNode = new ListNode(data, head);
head = newNode;
}
}
public int pop() {
if (isEmpty()) {
throw new NullPointerException();
} else {
int temp = head.getData();
head = head.link;
return temp;
}
}
}
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import week4.ArrayStack;
import static org.junit.jupiter.api.Assertions.*;
public class ArrayStackTest {
@Test @DisplayName("push O")
public void pushTest() throws Exception {
ArrayStack stack = new ArrayStack(5);
stack.push(0);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(45);
assertEquals(stack.arr[stack.top], stack.arr[4]);
}
@Test @DisplayName("ArrayIndexOutOfBoundsException")
public void ArrayIndexOutOfBoundsExceptionTest() throws Exception {
ArrayStack stack = new ArrayStack(5);
stack.push(0);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(45);
stack.push(6);
}
@Test @DisplayName("pop O")
public void popTest() throws Exception {
ArrayStack stack = new ArrayStack(5);
stack.push(0);
stack.push(1);
stack.push(2);
int pop = stack.pop();
assertEquals(2, pop);
}
@Test @DisplayName("NullPointerException")
public void popTestFail() throws Exception {
ArrayStack stack = new ArrayStack(5);
stack.push(0);
stack.push(1);
stack.push(2);
stack.pop();
stack.pop();
stack.pop();
}
}
๊ณผ์ 5. Queue๋ฅผ ๊ตฌํํ์ธ์.
- ๋ฐฐ์ด์ ์ฌ์ฉํด์ ํ๋ฒ
- ListNode๋ฅผ ์ฌ์ฉํด์ ํ๋ฒ.
- ๋ฐฐ์ด
public class ArrayQueue {
public int head;
public int tail;
public int queueSize;
public int[] arr;
public ArrayQueue(int queueSize){
head = -1;
tail = -1;
this.queueSize = queueSize;
arr = new int[queueSize];
}
public boolean isEmpty() {
return (head == tail);
}
public boolean isFull() {
return (tail == queueSize - 1);
}
public void enQueue(int data) {
if(isFull()){
throw new IndexOutOfBoundsException();
} else {
arr[++tail] = data;
}
}
public void deQueue() {
if(isEmpty()){
throw new NullPointerException();
} else {
++head;
}
}
}
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class ArrayQueueTest {
ArrayQueue queue = new ArrayQueue(3);
@Test
public void enQueueTest() {
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
assertEquals(3, queue.arr[queue.tail]);
}
@Test
public void IndexOutOfBoundsExceptionTest() {
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
queue.enQueue(4);
}
@Test
public void deQueue() {
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
queue.deQueue();
assertEquals(2, queue.tail);
}
@Test
public void NullPointerExceptionTest() {
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
}
}
- ListNode
public class ListNodeQueue {
public ListNode head;
public ListNode tail;
public boolean isEmpty() {
return (head == null);
}
public void enQueue(int data) {
ListNode newNode = new ListNode(data);
if(isEmpty()){
head = newNode;
tail = newNode;
} else {
tail.link = newNode;
tail = newNode;
}
}
public void deQueue() {
if (isEmpty()) {
throw new NullPointerException();
} else {
head = head.link;
}
}
}
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class ListNodeQueueTest {
ListNodeQueue queue = new ListNodeQueue();
@Test
public void enQueueTest() {
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
assertEquals(1, queue.head.getData());
assertEquals(3, queue.tail.getData());
}
@Test
public void deQueueTest() {
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
queue.deQueue();
assertEquals(2, queue.head.getData());
}
@Test
public void NullPointerExceptionTest() {
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
}
}
'Programming > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์์ (0) | 2022.08.12 |
---|---|
[Java] ํด๋์ค (0) | 2022.08.05 |
[Java] ์ฐ์ฐ์ (0) | 2022.02.02 |
[Java] ์๋ฐ ๋ฐ์ดํฐ ํ์ , ๋ณ์ ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด (0) | 2022.01.14 |
[JAVA] JVM์ ๋ฌด์์ด๋ฉฐ ์๋ฐ ์ฝ๋๋ ์ด๋ป๊ฒ ์คํํ๋ ๊ฒ์ธ๊ฐ (0) | 2022.01.08 |