[๐ ์ฌ์ดํด2 - ๋ฏธ์ (๊ธฐ๋ฌผ ํ์ฅ + DB ์ ์ฉ)] ๋ก์น ๋ฏธ์ ์ ์ถํฉ๋๋ค.#343
[๐ ์ฌ์ดํด2 - ๋ฏธ์
(๊ธฐ๋ฌผ ํ์ฅ + DB ์ ์ฉ)] ๋ก์น ๋ฏธ์
์ ์ถํฉ๋๋ค.#343bhoon716 wants to merge 40 commits intowoowacourse:bhoon716from
Conversation
- ์ํ ํจํด ๋์
Gomding
left a comment
There was a problem hiding this comment.
์๋
ํ์ธ์ ๋ก์น!
์ฌ์ดํด2 ๊ตฌํํ๋๋ผ ๊ณ ์ํ์
จ์ด์ ๐
์ ์ฒด์ ์ผ๋ก ์ ๊ตฌํํด์ฃผ์
จ๋ค์
์ฝ๋ฉํธ ๋จ๊ฒผ์ผ๋ ์๊ฒฌ ๋๋ ๋ณด๋ฉด ์ข๊ฒ ์ด์~
๊ถ๊ธํ์ ๋ถ๋ถ ์์ผ๋ฉด ์ธ์ ๋ DM์ด๋ ์ฝ๋ฉํธ ๋จ๊ฒจ์ฃผ์ธ์~
There was a problem hiding this comment.
DB์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋๋ฉ์ธ์ผ๋ก ์กฐ๋ฆฝ์ ์ด๋ป๊ฒ ํ๋๊ฒ ์ข์์ง๊ฐ ๊ถ๊ธํฉ๋๋ค.
์ง๊ธ ๊ตฌํํ ๋ฐฉ์์ ๋๋ฉ์ธ์ด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ชจ๋ฅด๊ฒ ํ๊ธฐ ์ํด์, ๋ ํฌ์งํ ๋ฆฌ ๋ด์์ ํ๋ํ๋ ์กฐ๋ฆฝํ๊ณ ์๋๋ฐ,
์ด๋ฐ ๋ฐฉ์์ ์ฒ์ ์ฌ์ฉํด๋ด์ ์ ๋๋ก ํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค์.. ํด๋น ๋ถ๋ถ ์ง์ค์ ์ผ๋ก ๋ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
๋จผ์ ๋ก์น๋ ์ด๋ค ์๋๋ก ๊ตฌํํ์ จ๋์ง ๊ถ๊ธํด์!
- ๋๋ฉ์ธ์ด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ชฐ๋ผ์ผํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น์? ์ด๋ค ์ฅ์ ์ด ์๋์?
- ๋๋ฉ์ธ์ด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์๋ฉด ์ด๋ค ๋จ์ ์ด ์์๊น์!
- ๋ ํฌ์งํ ๋ฆฌ ๋ด์์ ํ๋ํ๋ ์กฐ๋ฆฝํ๊ณ ์๋ ๋ฐฉ์๋ง๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ๊ณ ๋ฏผํด๋ณด์
จ์๊น์?
- ํด๋น ๋ฐฉ์์ ์ ํํ์ ์ด์ ๋ ๊ถ๊ธํด์!
There was a problem hiding this comment.
-
๋๋ฉ์ธ์ด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์๊ฒ ๋๋ฉด ๋๋ฉ์ธ ์ธ๋ถ์ ๋ณ๊ฒฝ์ด ๋๋ฉ์ธ๊น์ง ์ํฅ์ ๋ผ์น๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ง์ฝ ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋, Jdbc์์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋๋ ์ผ์ด ๋ฐ์ํ์ ๋, ๋๋ฉ์ธ์๋ ์ํฅ์ ๋ผ์น ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๋ง์ฝ ๋ชจ๋ฅธ๋ค๋ฉด ์์ ๊ฐ์ ๋ณ๊ฒฝ์๋ ๋๋ฉ์ธ์ด ์์ ๋์ง ์์์ ์ ์ฐํ ์ฝ๋๋ก ํ ์ ์์ต๋๋ค. -
๋ค๋ฅธ ๋ฐฉ์์ด ์ ๋ ์ค๋ฅด์ง ์์์ ์ผ๋จ Repository์์ ResultSet์ ๊บผ๋ด์ค๊ณ , ํ์ํ ํ์ ์ผ๋ก ๋งคํํ๊ณ , ๋ค์ ๊ฐ์ฒด๋ก ์กฐ๋ฆฝํ๋ ๋ฐฉ์์ผ๋ก ์งํํ์ต๋๋ค. ์ง๊ธ ๋ ์ค๋ฅด๋ ์๊ฐ์ผ๋ก๋ Mapper ํด๋์ค๋ฅผ ๋ฐ๋ก ๋๋ฉด ์ด๋์ ๋๋ ๋ถ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ฒ ๊ฐ๊ธด ํฉ๋๋ค.
|
|
||
| import java.util.List; | ||
|
|
||
| public record Direction(int column, int row) { |
There was a problem hiding this comment.
enum ์ผ๋ก ํํํ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ๋ค์! ๐
There was a problem hiding this comment.
enum์ผ๋ก ๋ฐ๊พธ๋ฉด Direction.of(col, row)๋ฅผ ์ฌ์ฉํ์ง ๋ชปํด์, ๋ง์ฝ์ ์ ์ํ์ง ์์ Direction์ด ํ์ํด์ง๋ฉด ์๋ก์ด enum ํ๋๋ฅผ ์ถ๊ฐํด์ผํด์ ์คํ๋ ค ๋ ๋ถํธํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค!
์ง๊ธ๋ '์'์ด๋ '๋ง'์์ (2, 3), (1, 2) ๋ฑ๋ฑ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ๋ชจ๋ enum์ผ๋ก ๊ด๋ฆฌํ๊ธฐ์ ์กฐ๊ธ ๋ฒ๊ฑฐ๋กญ๋ค๊ณ ์๊ฐํฉ๋๋ค.
There was a problem hiding this comment.
enum์ผ๋ก ๋ฐ๊พธ๋ฉด Direction.of(col, row)๋ฅผ ์ฌ์ฉํ์ง ๋ชปํด์, ๋ง์ฝ์ ์ ์ํ์ง ์์ Direction์ด ํ์ํด์ง๋ฉด ์๋ก์ด enum ํ๋๋ฅผ ์ถ๊ฐํด์ผํด์ ์คํ๋ ค ๋ ๋ถํธํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค!
Direction ์ enum ์์ ์ถ๊ฐํ๋๊ฒ VS ์๋ก์ด Piece ๊ฐ์ฒด ๋๋ ๊ธฐ์กด๊ฒ์ ์๋ก์ด ๋ฐฉํฅ ์ง์ ์ ์ธํ๊ธฐ
๋ ๋ค ๋น์ทํ ์ฝ๋๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ์๋ฐ enum ์ ์์ ์ถ๊ฐํ๋๊ฒ๋ง ๋ถํธํ ์ด์ ๊ฐ ์์๊น์?
๋ก์น๊ฐ ๋ถํธํจ์ ๋๋ผ๋ ์ด์ ๊ฐ ๋จ์ํ ํ๋๋ฅผ ์ถ๊ฐํด์๊ฐ ๋ง์๊น? ๋ผ๋ ์๋ฌธ์ด ๋ค์ด์์~
(enum ๋ณ๊ฒฝ์ ๋ฐ์ํ์ง ์์ผ์ ๋ ์ข์์! ์๊ฒฌ๋ง ๊ณต์ ํด์ฃผ์ธ์ ใ ใ )
There was a problem hiding this comment.
์ฅ๊ธฐ ๋ฏธ์
์์๋ ๊ทธ๋ด ์ผ์ด ์์ง๋ง, ๋ง์ฝ์ ํ๋ก๊ทธ๋จ์์ ๋์ ์ผ๋ก ๋ณํ๋ Direction์ด ํ์ํด์ง๋ฉด enum์ผ๋ก๋ ํด๋น Direction์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ, ํ์ํ Direction์ด ๋ ์ถ๊ฐ๊ฐ ๋๋ค๋ฉด, ์ ๊ฐ ์ฌ์ฉํ ๋ฐฉ์์์๋ ํ์ํ ๋ถ๋ถ์ Direction.of(col, row)๋ง ์์ฑ๋ง ํด์ฃผ๋ฉด ๋๋๋ฐ, enum ๋ฐฉ์์ ํด๋น Direction์ ์๋ฏธํ๋ enum ์์๋ฅผ ์ถ๊ฐํ๊ณ , ํ์ํ ๋ถ๋ถ์ ์ ํด๋น ์์๋ฅผ ๊ฐ์ ธ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ ๋ถํธํ๋ค๊ณ ์๊ฐํ์ต๋๋ค!
๊ธฐ์กด ๋ฐฉ์
// ํธ์ถ์
Positon next = now.move(Direction.of(2, 2));enum ๋ฐฉ์
// enum
public enum Direction {
// ์๋ต..
RIGHT_TWO_DOWN_TWO(2, 2);
}// ํธ์ถ์
Position next = now.move(Direction.RIGHT_TWO_DOWN_TWO);| import domain.piece.Team; | ||
| import java.util.List; | ||
|
|
||
| public interface GameState { |
There was a problem hiding this comment.
์ํ ํจํด์ ์ฌ์ฉํ์ ๊ฒ ๊ฐ๋ค์!
์ํ ํจํด์ด ํ์ํ๋ค๊ณ ํ๋จํ์ ์ด์ ๊ฐ ๊ถ๊ธํด์~
์ํ ํจํด์ ์ฌ์ฉํ์ง์๊ณ ๊ตฌํํ๋๊ฒ๊ณผ ์ด๋ค ์ฐจ์ด๊ฐ ์์๋์?
There was a problem hiding this comment.
์ํํจํด์ ์ฌ์ฉํ ๊ฐ์ฅ ํฐ ์ด์ ๋ ์ฌ์ค ์ํํจํด์ ์ฌ์ฉํด๋ณด๊ณ ์ถ์ด์ ์์ต๋๋ค.
์ค์ ๋ก ์ฌ์ดํด 1์์๋ ์ํํจํด ์์ด ๊ตฌํํ๊ณ ์์๋๋ฐ, ์ฌ์ดํด 2์์ ์น๋ฆฌ ์กฐ๊ฑด์ ๊ตฌํํ๋ฉด์ ์ํํจํด์ ์ถ๊ฐํ์ต๋๋ค.
์ฌ์ค ์ํํจํด์ ์ด์ฉํด๋ ์์ง๊น์ง๋ ํฐ ์ฐจ์ด๋ ๋ชป ๋๊ผ์ต๋๋ค.
๋ฌผ๋ก ๋ค๋ฅธ ์ํ๊ฐ ์ถ๊ฐ๋๋ฉด ์์ฐ์ค๋ฝ๊ณ ์ฝ๊ฒ ์ถ๊ฐ๋ฅผ ํ ์ ์๊ฒ ์ง๋ง, ํ์ฌ๋ ๊ทธ๋ด ์ผ์ด ์์ด์ ๊ตณ์ด ์ ๋ฃ์ด๋ ๋ ๊ฒ ๊ฐ์ต๋๋ค!
There was a problem hiding this comment.
์ํํจํด์ ์ฌ์ฉํ ๊ฐ์ฅ ํฐ ์ด์ ๋ ์ฌ์ค ์ํํจํด์ ์ฌ์ฉํด๋ณด๊ณ ์ถ์ด์ ์์ต๋๋ค.
ํ์ต์ ์ํ ๋์ ๐ฏ ๐ฏ ๐ฏ
์ํํจํด ๋์
ํ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ๋ค๊ณ ๋๋์ ์ ์์์๊น์?
๊ธฐ์กด ์ฝ๋๊ฐ ๋ ๊ฐ๋
์ฑ์ด ์ข์๋ค๋์ง..
There was a problem hiding this comment.
์ฅ๊ธฐ์์๋ ๊ธฐ์กด ์ฝ๋๊ฐ ์คํ๋ ค ๋ ์ฝ๊ธฐ ์ฌ์ ๊ณ , ์ํ ํจํด์ ๋์
ํ์ ๋ ์ป์ ์ ์๋ ์ด์ ๋ ํฌ์ง ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์คํ๋ ค State๋ฅผ ๋ณ๋๋ก ๊ด๋ฆฌํด์ผ ํด์ ์ ์ฒด์ ์ธ ๋ณต์ก๋๋ง ์กฐ๊ธ ๋์์ง ๋๋์ด์์ต๋๋ค.
๊ทธ๋๋ง ๊ธ์ ์ ์ด์๋ ์ ์ Controller๊ฐ Team์ ์ง์ ๊ด๋ฆฌํ์ง ์๊ฒ ๋๋ฉด์, ๊ทธ ๋ถ๋ถ์ด ์ฝ๊ฐ ๋ ๊ฐ๊ฒฐํด์ก๋ค๋ ์ ๋์์ต๋๋ค.
๋ค์์ ์ํ ํจํด ๋์ ์ ๋ค์ ๊ณ ๋ คํ๊ฒ ๋๋ค๋ฉด, ์ํ์ ์๊ฐ ์ถฉ๋ถํ ๋ง์์ง, ์ถํ์ ์ํ์ ์ถ๊ฐ๋ ๋ณ๊ฒฝ์ด ์์ฃผ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋์ง ๋ฑ์ ๋จผ์ ๋ฐ์ ธ๋ณธ ๋ค ์ ์ฉํ ๊ฒ ๊ฐ์ต๋๋ค.
| import java.util.Optional; | ||
| import javax.sql.DataSource; | ||
|
|
||
| public class JdbcJanggiGameRepository implements JanggiGameRepository { |
There was a problem hiding this comment.
์ด๋ฆ์ด Repository ์ธ ์ด์ ๋ ๋ฌด์์ผ๊น์?
There was a problem hiding this comment.
๋ค์ด๋ฐ์ ํฌ๊ฒ ์๋ฏธ๋ฅผ ๋์ง ์์์ต๋๋ค..
DAO, Repository ์ค์์ Repository๊ฐ ๋ ์น์ํด์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
์ข ๋ ์ฐพ์๋ณด๋๊น, ๋ ๋ค ๋น์ทํ์ง๋ง DAO๋ ์ ์ฅ์์ ์ ๊ทผํ๋ ๊ธฐ์ ์ค์ ์ด๊ณ , Repository๋ ๋๋ฉ์ธ ๊ด์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ถ์ํ ๊ณ์ธต์ด๋ผ๊ณ ํฉ๋๋ค.
ํด๋น ๊ด์ ์ผ๋ก ๋ณด๋ฉด ์ ๊ฐ ๋ง๋ ๊ฑด Repository๋ณด๋จ DAO๊ฐ ์ข ๋ ๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค!
There was a problem hiding this comment.
์ค.. ์ ์ ํ๊ฒ ํ์ตํด์ฃผ์
จ๋ค์~
์ง๊ธ ๋จ๊ณ์์๋ ๊ตณ์ด DAO ์ Repository ๋ฅผ ๊ตฌ๋ถํ์ง ์์๋ ๋๋ค๊ณ ์๊ฐํ์ง๋ง
๋ง์ํด์ฃผ์ ๋๋ก ๋ถ๋ฆฌํด์ ๋ณผ ์๋ ์์ต๋๋ค :)
bhoon716
left a comment
There was a problem hiding this comment.
์๋ ํ์ธ์, ์ฐฐ๋ฆฌ!
์ฌ์ดํด 2๋ ๊ธ๋ฐฉ ๋๋ผ ์ ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋๋ฐ, ๋ง์ ์งํํด๋ณด๋ ์๊ฐ๋ณด๋ค ํจ์ฌ ์ด๋ ต๊ณ ๊น๊ฒ ๊ณ ๋ฏผํ ๋ถ๋ถ์ด ๋ง๋ค๋ ๊ฑธ ๋ง์ด ๋๋ผ๊ณ ์์ต๋๋ค. ํนํ Repository์ ๋ํด ๊ณ์ ๊ณ ๋ฏผ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํญ์ ์ ๊ฐ ์๊ฐํ์ง ๋ชปํ ์ง์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ง์ด์ฃผ์๊ณ , ๋จ์ํ ์ ๋ต์ ์ฃผ๊ธฐ๋ณด๋ค ์ค์ค๋ก ๋ ๊ณ ๋ฏผํด๋ณผ ์ ์๊ฒ ์ง๋ฌธ ํํ๋ก ์ด๋์ด์ฃผ์ ์ ์ ๋ง ๋ง์ด ๋ฐฐ์ฐ๊ณ ์์ต๋๋ค.
ํญ์ ๊ผผ๊ผผํ ํผ๋๋ฐฑ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!!! ๐โโ๏ธ
|
|
||
| import java.util.List; | ||
|
|
||
| public record Direction(int column, int row) { |
There was a problem hiding this comment.
enum์ผ๋ก ๋ฐ๊พธ๋ฉด Direction.of(col, row)๋ฅผ ์ฌ์ฉํ์ง ๋ชปํด์, ๋ง์ฝ์ ์ ์ํ์ง ์์ Direction์ด ํ์ํด์ง๋ฉด ์๋ก์ด enum ํ๋๋ฅผ ์ถ๊ฐํด์ผํด์ ์คํ๋ ค ๋ ๋ถํธํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค!
์ง๊ธ๋ '์'์ด๋ '๋ง'์์ (2, 3), (1, 2) ๋ฑ๋ฑ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ๋ชจ๋ enum์ผ๋ก ๊ด๋ฆฌํ๊ธฐ์ ์กฐ๊ธ ๋ฒ๊ฑฐ๋กญ๋ค๊ณ ์๊ฐํฉ๋๋ค.
There was a problem hiding this comment.
์ง๊ธ ์ฅ๊ธฐํ์ ์ต๋/์ต์ row, column๋ ์๊ณ ์์ด์ ๊ถ์ฑ ์ ๋ณด๋ ์๊ณ ์์ด์ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๋ค๋ฅธ ๋ฐฉ์์๋ ๋ญ๊ฐ ์์๊น ์๊ฐํด๋ณด๊ณ ๋ค๋ฅธ ํฌ๋ฃจ์ ์๊ธฐํด๋ดค์ต๋๋ค.
- Palace ํด๋์ค๋ฅผ ๋ง๋ ๋ค.
- PalaceMoveStrategy ์ถ์ ํด๋์ค๋ฅผ ๋ง๋ ๋ค.
- ๊ธฐ๋ฌผ๋ณ PalaceMoveStrategy๋ฅผ ์ถ๊ฐํ๋ค.
1๋ฒ ๊ฐ์ ๊ฒฝ์ฐ๋ Palace ํด๋์ค๊ฐ Positon์ ๋ํ ์ ํธ ํด๋์ค๊ฐ ๋๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ก๊ณ ,
2, 3๋ฒ ๊ฐ์ ๊ฒฝ์ฐ๋ TDA ์์น์ ์๋ฐฐ๋๋ค๊ณ ํ๋จํ์ต๋๋ค.
์ง๊ธ Position์ด ์ฑ ์์ด ์ ์ง ์์ง๋ง, ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ๋ ๋์ ๋ฐฉํฅ์ด ๋ ์ค๋ฅด์ง ์์์ ์ด๋๋ก๊ฐ ์ต์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค!
There was a problem hiding this comment.
-
๋๋ฉ์ธ์ด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์๊ฒ ๋๋ฉด ๋๋ฉ์ธ ์ธ๋ถ์ ๋ณ๊ฒฝ์ด ๋๋ฉ์ธ๊น์ง ์ํฅ์ ๋ผ์น๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ง์ฝ ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋, Jdbc์์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋๋ ์ผ์ด ๋ฐ์ํ์ ๋, ๋๋ฉ์ธ์๋ ์ํฅ์ ๋ผ์น ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๋ง์ฝ ๋ชจ๋ฅธ๋ค๋ฉด ์์ ๊ฐ์ ๋ณ๊ฒฝ์๋ ๋๋ฉ์ธ์ด ์์ ๋์ง ์์์ ์ ์ฐํ ์ฝ๋๋ก ํ ์ ์์ต๋๋ค. -
๋ค๋ฅธ ๋ฐฉ์์ด ์ ๋ ์ค๋ฅด์ง ์์์ ์ผ๋จ Repository์์ ResultSet์ ๊บผ๋ด์ค๊ณ , ํ์ํ ํ์ ์ผ๋ก ๋งคํํ๊ณ , ๋ค์ ๊ฐ์ฒด๋ก ์กฐ๋ฆฝํ๋ ๋ฐฉ์์ผ๋ก ์งํํ์ต๋๋ค. ์ง๊ธ ๋ ์ค๋ฅด๋ ์๊ฐ์ผ๋ก๋ Mapper ํด๋์ค๋ฅผ ๋ฐ๋ก ๋๋ฉด ์ด๋์ ๋๋ ๋ถ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ฒ ๊ฐ๊ธด ํฉ๋๋ค.
| import java.util.Optional; | ||
| import javax.sql.DataSource; | ||
|
|
||
| public class JdbcJanggiGameRepository implements JanggiGameRepository { |
There was a problem hiding this comment.
๋ค์ด๋ฐ์ ํฌ๊ฒ ์๋ฏธ๋ฅผ ๋์ง ์์์ต๋๋ค..
DAO, Repository ์ค์์ Repository๊ฐ ๋ ์น์ํด์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
์ข ๋ ์ฐพ์๋ณด๋๊น, ๋ ๋ค ๋น์ทํ์ง๋ง DAO๋ ์ ์ฅ์์ ์ ๊ทผํ๋ ๊ธฐ์ ์ค์ ์ด๊ณ , Repository๋ ๋๋ฉ์ธ ๊ด์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ถ์ํ ๊ณ์ธต์ด๋ผ๊ณ ํฉ๋๋ค.
ํด๋น ๊ด์ ์ผ๋ก ๋ณด๋ฉด ์ ๊ฐ ๋ง๋ ๊ฑด Repository๋ณด๋จ DAO๊ฐ ์ข ๋ ๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค!
Gomding
left a comment
There was a problem hiding this comment.
์๋
ํ์ธ์ ๋ก์น!
๊ณ ๋ฏผ๊ณผ ํจ๊ป ์ ์์ ํด์ฃผ์
จ๋ค์ ๐
์ถ๊ฐ๋ก ์ฝ๋ฉํธ ๋จ๊ฒผ์ผ๋ ํ์ธํด์ฃผ์ธ์!
๊ถ๊ธํ ์ ์์ผ๋ฉด ์ธ์ ๋ DM ์ด๋ ์ฝ๋ฉํธ ๋จ๊ฒจ์ฃผ์ธ์~
| import domain.piece.Team; | ||
| import java.util.List; | ||
|
|
||
| public interface GameState { |
There was a problem hiding this comment.
์ํํจํด์ ์ฌ์ฉํ ๊ฐ์ฅ ํฐ ์ด์ ๋ ์ฌ์ค ์ํํจํด์ ์ฌ์ฉํด๋ณด๊ณ ์ถ์ด์ ์์ต๋๋ค.
ํ์ต์ ์ํ ๋์ ๐ฏ ๐ฏ ๐ฏ
์ํํจํด ๋์
ํ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ๋ค๊ณ ๋๋์ ์ ์์์๊น์?
๊ธฐ์กด ์ฝ๋๊ฐ ๋ ๊ฐ๋
์ฑ์ด ์ข์๋ค๋์ง..
|
|
||
| import java.util.List; | ||
|
|
||
| public record Direction(int column, int row) { |
There was a problem hiding this comment.
enum์ผ๋ก ๋ฐ๊พธ๋ฉด Direction.of(col, row)๋ฅผ ์ฌ์ฉํ์ง ๋ชปํด์, ๋ง์ฝ์ ์ ์ํ์ง ์์ Direction์ด ํ์ํด์ง๋ฉด ์๋ก์ด enum ํ๋๋ฅผ ์ถ๊ฐํด์ผํด์ ์คํ๋ ค ๋ ๋ถํธํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค!
Direction ์ enum ์์ ์ถ๊ฐํ๋๊ฒ VS ์๋ก์ด Piece ๊ฐ์ฒด ๋๋ ๊ธฐ์กด๊ฒ์ ์๋ก์ด ๋ฐฉํฅ ์ง์ ์ ์ธํ๊ธฐ
๋ ๋ค ๋น์ทํ ์ฝ๋๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ์๋ฐ enum ์ ์์ ์ถ๊ฐํ๋๊ฒ๋ง ๋ถํธํ ์ด์ ๊ฐ ์์๊น์?
๋ก์น๊ฐ ๋ถํธํจ์ ๋๋ผ๋ ์ด์ ๊ฐ ๋จ์ํ ํ๋๋ฅผ ์ถ๊ฐํด์๊ฐ ๋ง์๊น? ๋ผ๋ ์๋ฌธ์ด ๋ค์ด์์~
(enum ๋ณ๊ฒฝ์ ๋ฐ์ํ์ง ์์ผ์ ๋ ์ข์์! ์๊ฒฌ๋ง ๊ณต์ ํด์ฃผ์ธ์ ใ ใ )
| import java.util.Optional; | ||
| import javax.sql.DataSource; | ||
|
|
||
| public class JdbcJanggiGameRepository implements JanggiGameRepository { |
There was a problem hiding this comment.
์ค.. ์ ์ ํ๊ฒ ํ์ตํด์ฃผ์
จ๋ค์~
์ง๊ธ ๋จ๊ณ์์๋ ๊ตณ์ด DAO ์ Repository ๋ฅผ ๊ตฌ๋ถํ์ง ์์๋ ๋๋ค๊ณ ์๊ฐํ์ง๋ง
๋ง์ํด์ฃผ์ ๋๋ก ๋ถ๋ฆฌํด์ ๋ณผ ์๋ ์์ต๋๋ค :)
| if ("CHO".equals(currentTeam)) { | ||
| return new ChoPlayingState(); | ||
| } | ||
| return new HanPlayingState(); |
There was a problem hiding this comment.
enum ๊ฐ์๊ฒ์ ๋ค๋ฃฐ๋๋ else ๋ฅผ ์ฃผ์ํด์ ์ฌ์ฉํด์ผํ๋ค๋ ๊ฒ์ ๋ช
์ฌํด์ฃผ์ธ์! ใ
ใ
else ๋ก ๋ฐํ๋๋ ๊ธฐ๋ณธ๊ฐ์ ํธ๋ฆฌํ์ง๋ง ๋
์ด ๋ ์ ์์ต๋๋ค~
|
|
||
| @Override | ||
| public List<Position> getPiecePositions(Board board) { | ||
| throw new IllegalStateException("๊ฒ์์ด ์ข ๋ฃ๋์์ต๋๋ค."); |
There was a problem hiding this comment.
์๋ชป๋ ์ํ๋ผ๋๊ฒ ๋ง๋๊ฒ ๊ฐ์ง๋ง UnsupportedOperationException ์ ๋์ง๋๊ฒ ๋ ๋ช
ํํ ์ ์์ด์~
์ง์ํ์ง ์๋ ๊ธฐ๋ฅ์ด๋ผ๋๊ฒ์ ์๋ ค์ผํ๋ ์ํฉ์ด๋๊น์
| pieces.put(from, Piece.choPieceOf(PieceType.GENERAL)); | ||
| pieces.put(Position.of(10, 1), Piece.choPieceOf(PieceType.GENERAL)); |
| import java.sql.Statement; | ||
| import javax.sql.DataSource; | ||
|
|
||
| public final class DatabaseInitializer { |
There was a problem hiding this comment.
์ด๊ฒ๋ ์ ํธํด๋์ค์ด๋ DataSourceFactory ์ฒ๋ผ ์์ฑ์๋ฅผ private ์ผ๋ก ๋ซ์๋์ฃ !
| gameDao.update(connection, gameId, janggiGame); | ||
| pieceDao.deleteByGameId(connection, gameId); | ||
| pieceDao.saveAll(connection, gameId, janggiGame.getPieces()); | ||
| connection.commit(); |
There was a problem hiding this comment.
piece ๋ถ๋ถ ์
๋ฐ์ดํธ ํ๋ ๋ฐฉ์์ด ์๋
์ ์ฒด๋ฅผ ์ญ์ ํ๊ณ ์ ์ฒด๋ฅผ ์ฌ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ํ์
จ๊ตฐ์!
๋ก์น๋ ์ด๋ค ์ด์ ๋ก ์ด๋ฐ ๋ฐฉ์์ ์ ํํ์ จ๋์ง ๊ถ๊ธํด์ :)
+) ์ด๋ฒคํธ ์์ฑ ๋ฐฉ์๋ ๊ณ ๋ฏผํด๋ณด์
จ์๊น์?
์๋ ๊ธ์ ๊ฐ๋ณ๊ฒ ์ฝ๊ณ ์ด๋ฒคํธ ์์ฑ์ ๋ํด์ ๋ง๋ง ๋ณด์
๋ ์ข๊ฒ ์ด์!
(CQRS ๊ฐ์ด ํ์ฌ ๋จ๊ณ์์ ๋๋ฌด ๋ฌด๊ฑฐ์ด ์ง์๋ค์ ํจ์คํ์๊ณ ์ด๋ฒคํธ ์์ฑ์ด ๋ญ์ง? ๋ผ๋๊ฒ๋ง ์ง์คํด์ ์ฝ์ด๋ณด์๋ฉด ๋ฉ๋๋ค! ใ
ใ
)
There was a problem hiding this comment.
๋งค๊ฐ๋ณ์๊ฐ JanggiGame์ด๋ค๋ณด๋, ์ ๋ฐ์ดํธ ๋ ํผ์ค๋ง ์ฐพ์์ ๋ณ๊ฒฝํด์ฃผ๋ ๊ฒ๋ณด๋ค ์ ์ฒด๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์ ์ฅํ๋ ๋ก์ง์ด ์ข ๋ ๊ฐํธํ ๊ฒ ๊ฐ์์ ํด๋น ๋ฐฉ์์ ์ฑํํ์ต๋๋ค!
+) ์ด๋ฒคํธ ์์ฑ ๊ธ ์ ๋ดค์ต๋๋ค! ๊ฐ์ฌํฉ๋๋ค!
์ฒ์ ๋ฃ๋ ํค์๋์๋๋ฐ DB ๋์
์ด๊ธฐ์ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ๊ณผ ๋น์ทํด์ ์ดํดํ๋๋ฐ ์ด๋ ต์ง ์์์ต๋๋ค.
์ด๊ธฐ์๋ ๋งจ ์ฒ์ ์ฅ๊ธฐํ ์ด๊ธฐํ ์ํ๋ move_history๋ฅผ ์ ์ฅํ๋ ค๊ณ ํ์์ต๋๋ค. ์ด๋ฌ๋ฉด ๋์ค์ ๋ฌด๋ฅด๊ธฐ ๊ธฐ๋ฅ๋ ์ถ๊ฐํ๊ธฐ ์ฝ๊ณ , ๋งค ๋ผ์ด๋๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์๋ณด๋ค ์ ์ฅ๊ณต๊ฐ๋ ๋ ์ฐจ์งํ ์ ์์ด์ ์ข์์ต๋๋ค.
ํ์ง๋ง ๊ฒ์์ ๋ถ๋ฌ์ฌ ๋๋ง๋ค ๋ชจ๋ move_history๋ฅผ ์ฌ์ฐํด์ผ ํด์ ํฌ๊ธฐํ์์ต๋๋ค๐ฅฒ
| } catch (SQLException exception) { | ||
| throw new IllegalStateException("๊ฒ์์ ์ ์ฅํ๋ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค."); | ||
| } |
There was a problem hiding this comment.
์ด์ ์๋ IllegalStateException ์์ธ ์์ฑ์ cause ์ SQLException ์ ์ฃผ์
ํด์ฃผ์
จ๋๋ฐ
์ด๋ฒ์ ์์ ํ๋ฉด์ ์์ด์ก๊ตฐ์ ๐ณ
์ด๋ค ์ด์ ์์ ์์ ํ์
จ์๊น์?
๋ฌธ์ ๊ฐ ์์ด์ ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ SQLException ์ ๋ด์ฉ์์ด ๋๋ฒ๊น ์ ๋น ๋ฅด๊ฒ ํ ์ ์์๊น์!
There was a problem hiding this comment.
์์ ํ๋ฉด์ cause๋ฅผ ํจ๊ป ๋๊ธฐ๋ ๋ถ๋ถ์ด ๋น ์ก๋ค์.
๋ณ๋ ์๋๊ฐ ์์๋ค๊ธฐ๋ณด๋ค๋ ๋ฆฌํฉํ ๋ง ๊ณผ์ ์์ ๋์ณค์ต๋๋ค...
| Long savedId = janggiGameRepository.save(janggiGame); | ||
|
|
||
| // then | ||
| assertThat(savedId).isEqualTo(1L); |
There was a problem hiding this comment.
id ๊ฐ 1์ธ์ง ๊ฒ์ฆํ๋๊ฒ์ ์กฐ๊ธ ์ํํ ์ ์์ด์!
๋น์ฅ์ ์ฑ๊ณตํ์ง๋ง ํ
์คํธ ํ๊ฒฝ, ์์์ ๋ฐ๋ผ ์คํจํ ์๋ ์๋ ๊ฒ์ฆ์
๋๋ค :)
์ด๋ป๊ฒ ๊ฒ์ฆํ๋ฉด ์ข์๊น์~
+) id ๋ง ๊ฒ์ฆํ๋ฉด ์ ์์ ์ผ๋ก ์ ์ฅ๋๋์ง ์ถฉ๋ถํ ๊ฒ์ฆํ๋๊ฒ์ผ๊น์?
There was a problem hiding this comment.
์ผ๋จ savedId != null ์ธ์ง ํ์ธํ๊ณ , savedId๋ก ๋ค์ findById๋ฅผ ํ์ ๋ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ๋์ค๋์ง ํ์ธํ๋๊ฒ ๋ ์ข์ ๊ฒ ๊ฐ๋ค์!
๋ง์ฝ Mockito๋ฅผ ์ฐ๋ฉด verify()๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค.
โฆException ๋ณ๊ฒฝ
bhoon716
left a comment
There was a problem hiding this comment.
๋ฆฌ๋ทฐ ๊ฐ์ฌํด์ ์ฐฐ๋ฆฌ!
์ด๋ฒ์๋ ๋ง์ ๊นจ๋ฌ์๊ณผ ์๋ก์ด ์ง์๋ค์ ๋ฐฐ์ด ๊ฒ ๊ฐ์์!!
์์ง๋ ๋ง์ด ๋ถ์กฑํ์ง๋ง ๊ณ์ ๋
ธ๋ ฅํด๋ณผ๊ฒ์!!
|
|
||
| import java.util.List; | ||
|
|
||
| public record Direction(int column, int row) { |
There was a problem hiding this comment.
์ฅ๊ธฐ ๋ฏธ์
์์๋ ๊ทธ๋ด ์ผ์ด ์์ง๋ง, ๋ง์ฝ์ ํ๋ก๊ทธ๋จ์์ ๋์ ์ผ๋ก ๋ณํ๋ Direction์ด ํ์ํด์ง๋ฉด enum์ผ๋ก๋ ํด๋น Direction์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ, ํ์ํ Direction์ด ๋ ์ถ๊ฐ๊ฐ ๋๋ค๋ฉด, ์ ๊ฐ ์ฌ์ฉํ ๋ฐฉ์์์๋ ํ์ํ ๋ถ๋ถ์ Direction.of(col, row)๋ง ์์ฑ๋ง ํด์ฃผ๋ฉด ๋๋๋ฐ, enum ๋ฐฉ์์ ํด๋น Direction์ ์๋ฏธํ๋ enum ์์๋ฅผ ์ถ๊ฐํ๊ณ , ํ์ํ ๋ถ๋ถ์ ์ ํด๋น ์์๋ฅผ ๊ฐ์ ธ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ ๋ถํธํ๋ค๊ณ ์๊ฐํ์ต๋๋ค!
๊ธฐ์กด ๋ฐฉ์
// ํธ์ถ์
Positon next = now.move(Direction.of(2, 2));enum ๋ฐฉ์
// enum
public enum Direction {
// ์๋ต..
RIGHT_TWO_DOWN_TWO(2, 2);
}// ํธ์ถ์
Position next = now.move(Direction.RIGHT_TWO_DOWN_TWO);| import domain.piece.Team; | ||
| import java.util.List; | ||
|
|
||
| public interface GameState { |
There was a problem hiding this comment.
์ฅ๊ธฐ์์๋ ๊ธฐ์กด ์ฝ๋๊ฐ ์คํ๋ ค ๋ ์ฝ๊ธฐ ์ฌ์ ๊ณ , ์ํ ํจํด์ ๋์
ํ์ ๋ ์ป์ ์ ์๋ ์ด์ ๋ ํฌ์ง ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์คํ๋ ค State๋ฅผ ๋ณ๋๋ก ๊ด๋ฆฌํด์ผ ํด์ ์ ์ฒด์ ์ธ ๋ณต์ก๋๋ง ์กฐ๊ธ ๋์์ง ๋๋์ด์์ต๋๋ค.
๊ทธ๋๋ง ๊ธ์ ์ ์ด์๋ ์ ์ Controller๊ฐ Team์ ์ง์ ๊ด๋ฆฌํ์ง ์๊ฒ ๋๋ฉด์, ๊ทธ ๋ถ๋ถ์ด ์ฝ๊ฐ ๋ ๊ฐ๊ฒฐํด์ก๋ค๋ ์ ๋์์ต๋๋ค.
๋ค์์ ์ํ ํจํด ๋์ ์ ๋ค์ ๊ณ ๋ คํ๊ฒ ๋๋ค๋ฉด, ์ํ์ ์๊ฐ ์ถฉ๋ถํ ๋ง์์ง, ์ถํ์ ์ํ์ ์ถ๊ฐ๋ ๋ณ๊ฒฝ์ด ์์ฃผ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋์ง ๋ฑ์ ๋จผ์ ๋ฐ์ ธ๋ณธ ๋ค ์ ์ฉํ ๊ฒ ๊ฐ์ต๋๋ค.
| } | ||
|
|
||
| String currentTeam = resultSet.getString("current_team"); | ||
| if (CHO_TEAM_NAME.equals(currentTeam)) { |
There was a problem hiding this comment.
์ ๋ ์ด ๋ฐฉ์์ด ๋ ์์ ํด์ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!
| } catch (SQLException exception) { | ||
| throw new IllegalStateException("๊ฒ์์ ์ ์ฅํ๋ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค."); | ||
| } |
There was a problem hiding this comment.
์์ ํ๋ฉด์ cause๋ฅผ ํจ๊ป ๋๊ธฐ๋ ๋ถ๋ถ์ด ๋น ์ก๋ค์.
๋ณ๋ ์๋๊ฐ ์์๋ค๊ธฐ๋ณด๋ค๋ ๋ฆฌํฉํ ๋ง ๊ณผ์ ์์ ๋์ณค์ต๋๋ค...
| pieces.put(from, Piece.choPieceOf(PieceType.GENERAL)); | ||
| pieces.put(Position.of(10, 1), Piece.choPieceOf(PieceType.GENERAL)); |
| Long savedId = janggiGameRepository.save(janggiGame); | ||
|
|
||
| // then | ||
| assertThat(savedId).isEqualTo(1L); |
There was a problem hiding this comment.
์ผ๋จ savedId != null ์ธ์ง ํ์ธํ๊ณ , savedId๋ก ๋ค์ findById๋ฅผ ํ์ ๋ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ๋์ค๋์ง ํ์ธํ๋๊ฒ ๋ ์ข์ ๊ฒ ๊ฐ๋ค์!
๋ง์ฝ Mockito๋ฅผ ์ฐ๋ฉด verify()๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค.
| gameDao.update(connection, gameId, janggiGame); | ||
| pieceDao.deleteByGameId(connection, gameId); | ||
| pieceDao.saveAll(connection, gameId, janggiGame.getPieces()); | ||
| connection.commit(); |
There was a problem hiding this comment.
๋งค๊ฐ๋ณ์๊ฐ JanggiGame์ด๋ค๋ณด๋, ์ ๋ฐ์ดํธ ๋ ํผ์ค๋ง ์ฐพ์์ ๋ณ๊ฒฝํด์ฃผ๋ ๊ฒ๋ณด๋ค ์ ์ฒด๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์ ์ฅํ๋ ๋ก์ง์ด ์ข ๋ ๊ฐํธํ ๊ฒ ๊ฐ์์ ํด๋น ๋ฐฉ์์ ์ฑํํ์ต๋๋ค!
+) ์ด๋ฒคํธ ์์ฑ ๊ธ ์ ๋ดค์ต๋๋ค! ๊ฐ์ฌํฉ๋๋ค!
์ฒ์ ๋ฃ๋ ํค์๋์๋๋ฐ DB ๋์
์ด๊ธฐ์ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ๊ณผ ๋น์ทํด์ ์ดํดํ๋๋ฐ ์ด๋ ต์ง ์์์ต๋๋ค.
์ด๊ธฐ์๋ ๋งจ ์ฒ์ ์ฅ๊ธฐํ ์ด๊ธฐํ ์ํ๋ move_history๋ฅผ ์ ์ฅํ๋ ค๊ณ ํ์์ต๋๋ค. ์ด๋ฌ๋ฉด ๋์ค์ ๋ฌด๋ฅด๊ธฐ ๊ธฐ๋ฅ๋ ์ถ๊ฐํ๊ธฐ ์ฝ๊ณ , ๋งค ๋ผ์ด๋๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์๋ณด๋ค ์ ์ฅ๊ณต๊ฐ๋ ๋ ์ฐจ์งํ ์ ์์ด์ ์ข์์ต๋๋ค.
ํ์ง๋ง ๊ฒ์์ ๋ถ๋ฌ์ฌ ๋๋ง๋ค ๋ชจ๋ move_history๋ฅผ ์ฌ์ฐํด์ผ ํด์ ํฌ๊ธฐํ์์ต๋๋ค๐ฅฒ


์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
DB์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋๋ฉ์ธ์ผ๋ก ์กฐ๋ฆฝ์ ์ด๋ป๊ฒ ํ๋๊ฒ ์ข์์ง๊ฐ ๊ถ๊ธํฉ๋๋ค.
์ง๊ธ ๊ตฌํํ ๋ฐฉ์์ ๋๋ฉ์ธ์ด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ชจ๋ฅด๊ฒ ํ๊ธฐ ์ํด์, ๋ ํฌ์งํ ๋ฆฌ ๋ด์์ ํ๋ํ๋ ์กฐ๋ฆฝํ๊ณ ์๋๋ฐ,
์ด๋ฐ ๋ฐฉ์์ ์ฒ์ ์ฌ์ฉํด๋ด์ ์ ๋๋ก ํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค์.. ํด๋น ๋ถ๋ถ ์ง์ค์ ์ผ๋ก ๋ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!