๐ 2์ฃผ์ฐจ ๋ชฉํ
- ์๊ตฌ์ฌํญ์ ์ถฉ์คํ๊ณ , 2์ฃผ์ฐจ ๋ชฉํ์ธ ํจ์ ๋ถ๋ฆฌํ๊ธฐ์ ํจ์๋ณ๋ก ํ ์คํธ ์์ฑ์ ์ต์ํด์ง๊ธฐ!
- 1์ฃผ์ฐจ ๊ณตํต ํผ๋๋ฐฑ ์ ์ฉํ๊ธฐ!
- ์ฝ๋๋ฅผ ํ ์ค ํ ์ค, ๊ณ ๋ฏผํ๋ฉฐ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๊ธฐ!
- ์ค๋ฅ๋ฅผ ๋ฌด์์ํ์ง ๋ง๊ณ ์ฑ์ฅ์ ๊ณผ์ ์ด๋ผ ๋ฏฟ๊ธฐ!
- ์ฒ์ฒํ ๊ทธ๋ฆฌ๊ณ ๊ผผ๊ผผํ ๋ฌธ์ ์ฝ๊ธฐ!
๐ ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์ ๊ตฌํ
โ ์ฝ๋์ ์ ๋ฌธ์ ๋๋ค.
โ ์ข์ ํ๋ก๊ทธ๋จ์ด๋?
2์ฃผ์ฐจ๋ ์๊ตฌ์ฌํญ ๋ง๋ค "~ํ ์ ์๋ค." ๋ก ๋๋์ ์ฐธ ์ ๋งคํ๋ค.
์ด๋ป๊ฒ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ผํ ์ง ์ป์ ๋๋, ์๊ธฐ ์ ์๋, ๊ตฌํ ๋์ค์๋ ์ง์ง ๊ณ์ ๊ณ ๋ฏผํ๋ค.
๊ทธ ๊ณผ์ ์์ Console.readLine() ๋ด๋ถ ์์ ๋ค์ด๊ฐ ๋ณด๊ธฐ๋ ํ๊ณ , escape ๋ฌธ์๋ ์ถ๋ ฅ๊ณผ ๋ค๋ฅด๊ฒ ๊ทธ๋๋ก ์ ๋ ฅ์ด ๋๋์ง ์๊ฒ ๋๊ณ , BigDecimal์ BigInteger ์๋ฃํ์ ํจ์๋ค๋ ์ฐพ๊ณ , ์ค๊ตญ์ด์ ์ผ๋ณธ์ด๋ ํฌํจํด์ผ ํ๋? ๋ ์๊ฐ์ String๋ฌธ์์ด์ ์ ๋ ฅ ๋ฒ์๋ฅผ ์์๋ด์ Stringํ์ ์ ์ ๋์ฝ๋์ ๋ฌธ์๋ฅผ ๋ฐ์ ์ ์๋ ๊ฒ๋ ์๊ฒ ๋์๋ค.
๊ทธ๋ฌ๋ค, ์ถ๋ ฅ๋ฌธ์ ์๊ตฌ์ฌํญ ์ค ํ๋์ธ "-" ๋ฅผ ํตํด ๊ฐ์ ์ก๊ธฐ ์์ํ๋ค.
๋ง์ฝ, intํ ์๋ฃ๋ฒ์์ธ ์ฝ 20์ต์ ๋์ด๊ฐ๋ ๊ฒ๊น์ง ์ ๋ ฅ์ ๋ฐ์ ์ ์๊ฒ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ค๋ฉด ์ฌ์ฉ์์ ์ฝ์์๋ 20์ต๋ฒ๋ง๋ค 20์ต๊ฐ์ "-"๋ฅผ ๋ณผ ์๋ ์๋ค๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด,
pobi : -----------------------------------------------------------------------...
pobi : -----------------------------------------------------------------------..------...
pobi : -----------------------------------------------------------------------... ...-----.. ์ด๋ ๊ฒ ๊ณ์ ๋๋ฐฐ๋ ๊ฒ์ด๋ค.
์ด๋ฐ ์ถ๋ ฅ๋ฌธ์ด ๋ฐ๋ณต๋๋ ๊ฒ์ ์ฌ์ฉ์๊ฐ ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์์ ์งํ ์ํฉ์ ์ธ์งํ๊ธฐ ์ด๋ ค์์ง ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ "์ด๋ฐ ์ถ๋ ฅ๋ฌธ์ ์ฌ์ฉ์๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๋ณด๋ ๊ฒ์ด ๊ณผ์ฐ ๋์์ด ๋๋๊ฐ?"๋ฅผ ์๊ฐํ ์ ์์๋ค.
ํ๋ก๊ทธ๋๋จธ๋ ๋น์ฆ๋์ค ๋ฌธ์ ๋ฅผ ์ฝ๋๋ก ํด๊ฒฐํด์ ์ฌํ(์ฌ์ฉ์)์ ์ด๋ฐ์ง ํ๋ ์ฌ๋์ด๋ผ ์๊ฐํ๋ค.
๋์ ์ญํ (ํ๋ก๊ทธ๋๋จธ)์ ์ฌ์ฉ์๋ค์ด ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์์ ์ฆ๊ธธ ์ ์๋๋ก ํด์ผ์ง, ์ฌ์ฉ์๊ฐ ์ฃ์ง์ผ์ด์ค๋ ๋ญ๊ฐ ์์ง? ํ๋ฉฐ ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์์ ์ฆ๊ธฐ๋ ๋ฐ์ ํผ๋์ ์ผ๊ธฐํ๊ฒ ๊ฒ์์ ๋ง๋ค์ด์ผ ํ๋ ๊ฒ์ ์๋๋ผ๊ณ ์๊ฐํ๋ค.
๊ทธ๋ ๊ฒ ์๊ตฌ์ฌํญ์ ๊ธฐ์ค์ "์ฌ์ฉ์๊ฐ ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์์ ์ง๊ด์ ์ผ๋ก ๋ฐ๋ผ๋ดค์ ๋, ์ฆ๊ธธ ์ ์์ด์ผ ํ๋ค."๋ก ์ธ์ ๋ค.
๋จผ์ , "์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์" ๋ ์ด๋ฆ์ ๊ฑธ๋ง๊ฒ ๋จ์ด๋ค์ ์ ์ํ๋ค.
"์๋์ฐจ" → ์๋์ฐจ๋ ์ด๋ฆ์ ๊ฐ์ ธ์ผ ํ๋ค
"๊ฒฝ์ฃผ" → ์๋์ฐจ๋ผ๋ฆฌ ๊ฒจ๋ค์ ์ฐ์น์๋ฅผ ๊ฐ๋ ค๋ด์ผ ํ๋ค.
๋ง์นจ๋ด, ์์ธ์ฌํญ์ ๋ง๋ค์ด๊ฐ๋ค.
1. ์๋์ฐจ์ ์ด๋ฆ์ ๋ถ์ฌํ ์ ์๋ค
- ์๋์ฐจ๋ ์ด๋ฆ์ 1~5์ฌ์ด์ฌ์ผ ํ๋ค
- ์ด๋ฆ์ ์ต์ 2๊ฐ ์ด์ ์ ๋ ฅ ๋ฐ๊ธฐ → ์ด๋ฆ์ด 0๊ฐ๋ 1๊ฐ๋ฉด "๊ฒฝ์ฃผ"๋ ์๋ฏธ๊ฐ ์์
- ์
๋ ฅ์ ์ซ์์ ํน์๊ธฐํธ๋ฅผ ํฌํจํ๊ฒ ํ ๊ฒ์ธ๊ฐ?
- 1๋ฒ : ์
๋ ฅ์ ์ ํ๋์ง ์๊ธฐ
- car! ๋ ๋จ์ด๋ ์ด๋ฆ์ด ๋๋ ๋์ !@#$%๋ ์ด๋ฆ์ด ๋ ์ ์๋ค. ๋ํ, ์ ๋ ฅ์ ์ ํ์ ๋์ง ์์ผ๋ฉด String์ด ์ ๋์ฝ๋์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ง์ํ๋ค ํ๋๋ผ๋ ์๊ธฐ์น ๋ชปํ ์ค๋ฅ๊ฐ ์๊ฒจ ํ๋ก๊ทธ๋จ์ ๋ฒ๊ทธ๊ฐ ์๊ธธ ์ ์๋ค๊ณ ์๊ฐํ๋ค. ์ด๋ก ์ธํด ๋ฒ๊ทธ๊ฐ ์๊ฒจ ์ฌ์ฉ์ ์ปดํจํฐ์๊ฒ ์ ์ํ์ ๋ผ์น ์ ๋ ์๋ ๊ฐ๋ฅ์ฑ ์๊ฐํ๊ธฐ
- 2๋ฒ : ์ด๋ฆ์ ์ ํ ๋๊ธฐ
- ์ฌ์ฉ์๋ "์ด๋ฆ์ ์ผํ(,) ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ" ์ด๋ ๊ฒ์ ์์ ๋ฌธ๊ตฌ ๋๋ฌธ์ "ํน์ ๊ธฐํธ๋ ํฌํจ ๋๋๊ตฌ๋" ๋ผ๊ณ ์๊ฐํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋, ํน์๊ธฐํธ๋ฅผ ํฌํจํ ์ด๋ฆ์ ์ ์ํ๋ฉด ์ฌ์ฉ์๋ ์ค๋ฅ๋ฅผ ๋ง์ดํ๋ค. car! ๋ผ๊ณ ์
๋ ฅํ๋ฉด ์ค๋ฅ ๋ฉ์์ง๋ก [์๋ฌธ์,ํ๊ธ๋ก๋ง ์
๋ ฅํด ์ฃผ์ธ์] ๋ฅผ ํํํ๊ณ , ์ฌ์ฉ์์๊ฒ "๋ญ์ผ, ๋ฏธ๋ฆฌ ๋ง์ ํด ์ฃผ๋๊ฐ" ๋ผ๋ ๋ฐ์์ ์ป์ ์ ์๋ค.
- GPT๋ฅผ ์ด์ฉํด ์๋ฌธ์์ ํ๊ธ๋ก๋ง ์ ๋ ฅ์ ๋ฐ๋ ์ ๊ท์์ ์๊ฒ ๋์๋ค. ์ ๊ท์ ํ์ต!
- ์ฌ์ฉ์๋ "์ด๋ฆ์ ์ผํ(,) ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ" ์ด๋ ๊ฒ์ ์์ ๋ฌธ๊ตฌ ๋๋ฌธ์ "ํน์ ๊ธฐํธ๋ ํฌํจ ๋๋๊ตฌ๋" ๋ผ๊ณ ์๊ฐํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋, ํน์๊ธฐํธ๋ฅผ ํฌํจํ ์ด๋ฆ์ ์ ์ํ๋ฉด ์ฌ์ฉ์๋ ์ค๋ฅ๋ฅผ ๋ง์ดํ๋ค. car! ๋ผ๊ณ ์
๋ ฅํ๋ฉด ์ค๋ฅ ๋ฉ์์ง๋ก [์๋ฌธ์,ํ๊ธ๋ก๋ง ์
๋ ฅํด ์ฃผ์ธ์] ๋ฅผ ํํํ๊ณ , ์ฌ์ฉ์์๊ฒ "๋ญ์ผ, ๋ฏธ๋ฆฌ ๋ง์ ํด ์ฃผ๋๊ฐ" ๋ผ๋ ๋ฐ์์ ์ป์ ์ ์๋ค.
- ๊ฒฐ๋ก : 1๋ฒ์ด ์ฌ์ฉ์๋ฅผ ์ํ ํ๋ก๊ทธ๋จ์ด๋ผ ์๊ฐํด์ ์๋ฌธ์,ํ๊ธ๋ก๋ง ์ด๋ฆ์ ์ ๋ ฅํ ์ ์๊ฒ ํด๋จ๋ค. ๋ค๋ง, ๊ธฐํ์์ ์ํตํ๋ค๋ฉด ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์ ํจ์๋ฅผ ์ ๋ถ๋ฆฌํด๋๊ธฐ! (ํ๋ฆฌ์ฝ์ค์์๋ ๊ธฐํ์๋ ์ฐํ ์ฝ๋ผ ์์ฝ๊ฒ๋ ์ํตํ ์ ์๋ค..)
- 1๋ฒ : ์
๋ ฅ์ ์ ํ๋์ง ์๊ธฐ
- ๋์ด ์ผํ(,) ๋ก ๋๋๋ฉด ์์ธ์ฒ๋ฆฌ!
- ์ด๋ฆ์ด ์ค๋ณต๋๋ฉด ์์ธ์ฒ๋ฆฌ! → ์ฐ์น์๋ฅผ ์ถ๋ ฅํ ๋ ํท๊ฐ๋ฆฌ๊ธฐ ๋๋ฌธ
2. ์ฌ์ฉ์๋ ์๋์ฐจ์ ์ด๋ํ ํ์๋ฅผ ์ ๋ ฅํ ์ ์์ด์ผ ํ๋ค
- ์ด๋ ํ์๋ฅผ int๋ก ์ ํํด์ ์ซ์๊ฐ ์๋๋ฉด ์์ธ์ฒ๋ฆฌ!
- int ์ค์์ 0๊ณผ ์์๋ฉด ์์ธ์ฒ๋ฆฌ (0์ด๋ฉด ๊ฒฝ์ฃผ๋ ๋ป์ ์๋ฐ๋๊ธฐ ๋๋ฌธ)
- ์์ธ์ฒ๋ฆฌ ๋ฉ์์ง๋ฅผ "1์ด์์ ์์ฐ์๋ก ์
๋ ฅํ์ธ์"๋ก ํ๋ค๋ฉด 50์ต๋ 1์ด์ ์์ฐ์์ด๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์ ๋ถํฉํ์ง๋ง intํ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ ์ค๋ฅ๋ฅผ ์ผ์ผํค๊ณ , ์ด๋ ์ฌ์ฉ์์๊ฒ ํผ๋์ ์ผ๊ธฐํ ์ ์๋ค ์๊ฐํจ. ๊ทธ๋์, 20์ต ์ด์์ ์
๋ ฅ ์ด์์ ์ซ์๋ฅผ ์
๋ ฅํ๋ฉด "20์ต ์ดํ์ ์ซ์๋ฅผ ์
๋ ฅํ์ธ์"๋ ์ค๋ฅ ๋ฉ์์ง ์ถ๋ ฅ.
(์๋์ฐจ 2๋๊ฐ 30๋ฒ๋ง ์์ง์ฌ๋ 20์ต์ ๊ฒฝ์ฐ์ ์๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ ํ๋ฅ ๊ณผ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ๊ณ์ฐํด์ ์ ๋ ฅ๋ฐ์ ์๋ฅผ ์ ํํ ๊น ์๊ฐ๋ ํ๋ค..ใ ) - ๊ฒฐ๋ก : ์ฌ์ฉ์๊ฐ 1~20์ต ์ฌ์ด์ ์ซ์๋ฅผ ์ ๋ ฅ๋ฐ๊ฒ ํ์
๊ทธ๋ ๊ฒ ์์ธ์ฌํญ์ ๋ง๋ค์๋ค.
consistOfEnglishKoreanComma(input); // ์
๋ ฅ์ ์๋ฌธ์,ํ๊ธ,์ผํ๋ง ๊ฐ๋ฅ
endWithsNotComma(input); // ์
๋ ฅ์ ๋์ ์ผํ๊ฐ ์ฌ ์ ์๋ค.
checkCarNameLength(carNames); // ์๋์ฐจ ์ด๋ฆ์ 1~5์์ด๋ค.
checkCarNameCounting(carNames); // ์๋์ฐจ ์ด๋ฆ์ ์ต์ 2๊ฐ์ฌ์ผ ํ๋ค.
checkCarNameDuplicated(carNames); // ์๋์ฐจ ์ด๋ฆ์ ์ค๋ณต๋๋ฉด ์๋๋ค
validateMovingNumber // ์ด๋ํ์๋ก ์ซ์๋ง ์ฌ ์ ์๋ค.
checkMinMovingNumber(movingNumber); // ๊ฒฝ์ฃผ์ ์๋ง๊ฒ ์ต์ ์ด๋ํ์๋ 1๋ฒ์ด๋ค.
checkMaxMovingNumber(movingNumber); // intํ ๋ฒ์๋ ๋์ด๊ฐ์ง ์๋๋ก ์ต๋ ์ด๋ํ์๋ 20์ต์ด๋ค.
๊ทธ๋ฆฌ๊ณ , ์์ธ์ฌํญ์ด ๋ง์ ๋งํผ ์ฌ์ฉ์์๊ฒ ํผ๋์ ์ฃผ์ง ์๊ธฐ ์ํด ์ ํํ ์ค๋ฅ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ ์ ์๋๋ก ๋ ธ๋ ฅํ๋ค.
๊ฒฐ๊ตญ "์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์์ ๋ชฉ์ ", "์ฌ์ฉ์์ ์ ์ฅ", "์๊ตฌ์ฌํญ์ ๋ณ๊ฒฝ", "์์คํ ์ ์์ ์ฑ"์ ์ข ํฉ์ ์ผ๋ก ์ถฉ๋ถํ ๊ณ ๋ คํ๊ณ ์ ํ๋ค.
์ด ๊ฒฝํ์ ํตํด ์ข์ ํ๋ก๊ทธ๋จ์ด๊ธฐ ์ํ ์ต์ ์กฐ๊ฑด์ "๋ค์ํ ์๊ฐ์์ ๋ฐ๋ผ๋ณด๊ธฐ" ๋ผ๊ณ ์กฐ์ฌ์ค๋ ์๊ฐํด๋ณธ๋ค.
1์ฃผ์ฐจ์๋ ์ด๋ฌํ ์๊ฐ๋ค๋ก ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ๋ณด์ง ๋ชปํ๊ฒ ๋๋ฌด ์์ฝ๋ค. (์ด๋ ๊ฒ๊น์ง ๊ณ ๋ฏผ์ ํ๋ 1์ฃผ์ฐจ์ ๋์น ์์ธ์ฌํญ๋ค์ด ์๋ ๊ฒ๋ ์๊ฒ๋จ..ใ )
๊ทธ๋๋ ์ด์ ํ๋ฆฌ์ฝ์ค ๊ณผ์ ๋ฅผ ํ๋ค๊ณ ์๊ฐํ์ง ์๊ณ , ์์ ํ๋ก๊ทธ๋จ์ด์ง๋ง ์ฌ์ฉ์๋ฅผ ์ํด ์ข์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ณ ์ ๋ ธ๋ ฅํ๊ธฐ! ๋ฅผ ์๊ฐํ๋ฉฐ ํ๋ฆฌ์ฝ์ค์ ์ํ๊ฒ ๋ค.๐
โ ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ํ AssertJ ํ์ต
์ผ๋จ ํ ์คํธ ์ฝ๋ ์์ฑํ๋ ๊ฒ์ด ์ต์ํด ์ง๊ณ ์ AssertJ ๋ฉ์๋๋ฅผ ํ์ตํ๋ค.
ํ์ตํ๋ ๊ณผ์ ์์ ๊ณต์๋ฌธ์๋ฅผ ์ด์ฉํ๋ ค๊ณ ํ์ง๋ง ๋ฉ์๋์ด๋ฆ ์์ฒด๋ฅผ ๋ชฐ๋ผ์ ๋ฉ์๋๋ฅผ ์ฐพ๋๋ฐ ์ด๋ ค์์ด ๋ง์๋ค.
๋ฌผ๋ก , ๊ณต์๋ฌธ์๊ฐ ๋ค ์์ด๋ก ๋์ด์์ด์ ํ์ฐธ์ ๊ตฌ๊ฒฝํ๊ณ ํค๋งธ๋ค..ใ
๋ ์ด์ ์๊ฐ์ ์ง์ฒดํ ์ ์์ด์ 3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ์ตํ๋ค.
1. ํ๋ก๊ทธ๋จ์ ๋ด์ฅ๋์ด ์๋ [External Libraries]์ assertJ ํจํค์ง๋ฅผ ์ด์ฉ
2. ์ธํ ๋ฆฌ์ ์ด์์ .์ ์ฐ์ผ๋ฉด ๋์ค๋ ์๋์์ฑ๊ธฐ๋ฅ์ผ๋ก ํ๋์ฉ ์ดํด๋ณด๊ธฐ
3. ๊ตฌ๊ธ๋งํ๊ธฐ
*๊ณต์๋ฌธ์๋ก ๋ชจ๋ฅด๋ ๋ฉ์๋๋ฅผ ์ด๋ป๊ฒ ์ฐพ๋์ง ์์๋๋ถ ๋๊ธ ๋ถํ๋๋ฆผ๋๋ค..
โ ๊ธฐ๋ฅ๋ง๋ค ์ปค๋ฐํ๊ธฐ, ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ํ ๋๋ง์ ๋ฃจํด
๊ตฌํํ๋ฉด์ ๊ธฐ๋ฅ๋ง๋ค ์ปค๋ฐํ๊ณ , ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ฒ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ง์ ๋ฃจํด์ ๋จผ์ ์ธ์ ๋ค.
๋์ ๋ฃจํด์ 1์ฃผ์ฐจ์ ๋๋๋๋ก " ๊ตฌํ → ์ปค๋ฐ → ํ ์คํธ ์ฝ๋ → ์ปค๋ฐ" ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ ํ๋ค.
๊ทธ๋ฌ๋, ํ ์คํธ ์ฝ๋๊ฐ ์คํจํ๊ฑฐ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์ง๋๋ฐ ์ด๋ ค์์ด ์์ ๋๋ฉด, ์ปค๋ฐํ๋ ๊ตฌํ ๋ก์ง์ ์์ ํ๊ณ , ๋ค์ ์ปค๋ฐํด์ผํ๋ค.
์ด๋ก ์ธํด ์ปค๋ฐ ์์๋ ์ํค๊ณ , ์ถ๊ฐ ์ปค๋ฐ์ ์๊ฐ์ด ๋ง์ด ์์๋์ 2์ฃผ์ฐจ๋ฅผ ์งํํ๋ฉด์ ์์๋ฅผ ๋ฐ๊ฟจ๋ค.
"๊ตฌํ → ํ ์คํธ ์ฝ๋ → ์ปค๋ฐ → ์ปค๋ฐ" ์ด๋ค. ์ด ์์๋ก ์์ผ๋ก 3์ฃผ์ฐจ์ ์ํด๋ณด๊ฒ ๋ค!
โ public ์ ์ง์ ํ ์คํธ, private ์ ๊ฐ์ ํ ์คํธ
ํ ์คํธ ์ฝ๋๋ฅผ ์ง๋ค๋ณด๋ฉด public ๋ฉ์๋์ private ๋ฉ์๋๋ค์ ๋ชจ๋ ํ ์คํธ ํด์ผ ํ ๊น? ๋ผ๋ ๊ณ ๋ฏผ์ด ์๊ธฐ๋๋ฐ ์ฝ๊ฒ ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค.
๋๋ public ๋ฉ์๋๊ฐ ๊ฐ์ฒด์๊ฒ ๋ถ์ฌ๋ ์ฑ ์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๊ณ , private ๋ฉ์๋๋ public ๋ฉ์๋์ ๋ก์ง์ ๋์์ ์ฃผ๋ ๋ฉ์๋๋ผ ์๊ฐํ๋ค.
์ฆ, private ๋ฉ์๋๋ public ๋ฉ์๋๋ฅผ ์ํด ์กด์ฌํ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋์, ๋๋ public ๋ฉ์๋๋ง์ ์ง์ ํ ์คํธ ํ๋ค.
private ํค์๋๋ฅผ ์ฐ๋ ์ด์ ๋ ์บก์ํํ๊ธฐ ์ํจ์ธ๋ฐ, ํ ์คํธ ์ฝ๋๋ฅผ ํตํด ๋ ธ์ถ์ํค๋ ๊ฒ์ ์๋๋ผ ์๊ฐํ๋ค.
๊ทธ๋ฌ๋, private ํจ์๋ฅผ ํ ์คํธํด์ผ ํ ์ํฉ์ด ์จ๋ค.
์๋์ฒ๋ผ ์์ธ์ฒ๋ฆฌ๊ฐ ์ ๋์๋์ง ํ ์คํธ ํ ๋๊ฐ private ํ ์คํธ๋ฅผ ํด์ผ ํ ์ํฉ์ด๋ค.
๋๋ private์ ๊ฐ์ ์ ์ผ๋ก ํ ์คํธ ํ๋ค.
ํ ๊ฐ์ public๋ฉ์๋ ์์ ์๋ก ๋ค๋ฅธ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ 3๊ฐ์ private๋ฉ์๋๊ฐ ์๋ค.
public void validateCarNames(List<String> carNames) {
checkCarNameLength(carNames); // privateํจ์
checkCarNameCounting(carNames); // privateํจ์
checkCarNameDuplicated(carNames); // privateํจ์
}
public๋ฉ์๋๋ง ํ ์คํธํ๋ค๋ฉด ์ด 3๊ฐ ์ค์ ์ด๋ค ํจ์์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ ์์ธ ์ฒ๋ฆฌ ๋ฉ์์ง๋ฅผ ํจ๊ป ํ ์คํธ ์ฝ๋์ ๋ถ์ฌ์ฃผ์๋ค.
public ๋ฉ์๋์ธ validateCarNames ๋ฅผ ์ง์ ํธ์ถํ๊ณ , private ๋ฉ์๋๋ค์ ํธ์ถํ์ง ์๊ณ hasMessage ๋ก๋ง ํ์ธํ์ฌ ๊ฐ์ ํ ์คํธ๋ฅผ ์งํํ๋ค.
@Test
void validateCarNames_์๋์ฐจ์ด๋ฆ์ด_1์๋ถํฐ_5์์ธ์ง_ํ์ธ1() {
List<String> invalidList = Arrays.asList("pobi", "", "์์ข
ํ");
assertThatThrownBy(() -> validator.validateCarNames(invalidList))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage(CAR_NAME_LENGTH_ERROR);
}
@Test
void validateCarNames_์๋์ฐจ์ด๋ฆ์ด_2๊ฐ์ด์์ธ์ง_ํ์ธ1() {
List<String> invalidList = Arrays.asList("pobi");
assertThatThrownBy(() -> validator.validateCarNames(invalidList))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage(CAR_NAME_COUNT_ERROR);
}
@Test
void validateCarNames_์๋์ฐจ์ด๋ฆ์ด_์ค๋ณต์ธ์ง_ํ์ธ1() {
List<String> invalidList = Arrays.asList("pobi", "pobi", "์ข
ํ");
assertThatThrownBy(() -> validator.validateCarNames(invalidList))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage(CAR_NAME_DUPLICATE_ERROR);
}
์ด๋ ๊ฒ hasMessage๋ฅผ ์ด์ฉํ๋ฉด private ์ public ์ผ๋ก ๊ณ ์น์ง ์๊ณ ๋ private๋ฅผ ๊ฐ์ ์ ์ผ๋ก ํ ์คํธ ํ ์ ์์๋ค.
โ 2์ฃผ์ฐจ ๋ชฉํ : ํ ์คํธ ์ฝ๋์ ํจ์ ๋ถ๋ฆฌ
์๋๋ 2์ฃผ์ฐจ ๋ชฉํ์ธ ํ ์คํธ ์ฝ๋์ ํจ์ ๋ถ๋ฆฌ๋ฅผ ์งํํ๋ฉฐ ํ๋ ์๊ฐ๋ค์ด๋ค.
[ํ ์คํธ ์ฝ๋์ ์ฅ์ ]
public ๋ฉ์๋์ ๋ด๋ถ๋ฅผ ๋ถ๋ฆฌํ๋ฉด์ "์ณ๊ฒ ํจ์๋ฅผ ๋ถ๋ฆฌํ๋์ง?", "๊ฐ์ฒด์ ๊ฐ์ด ์ ๋ฌ๋๊ณ ์๋์ง?"๋ ๋๋ ค์์ด ์์๋ค.
๊ทธ๋ฌ๋, public ๋ฉ์๋์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด ๋๊ณ ํจ์๋ถ๋ฆฌ๋ฅผ ํ ๋๋ง๋ค ํ ์คํธ ์ฝ๋๋ฅผ "๋ธ๊น" ํด์ ์ด๋ก๋ถ์ด ๋ค์ด์ค๋ ๊ฒ๋ง ํ์ธํ๋ฉด ํจ์๋ถ๋ฆฌ๊ฐ ์ ์งํ๋๊ณ ์๋์ง๋ฅผ ํ์ ํ ์ ์์๋ค.
ํ ์คํธ ์ฝ๋๋ ๊ตฌํํ ๋ก์ง์ ๊ฒ์ฆ๋ฟ๋ง ์๋๋ผ ํจ์๋ถ๋ฆฌ ๊ฐ์ ๋ฆฌํฉํ ๋ง ํ๋๋ฐ์๋ ์ค์ํ๋จ ๊ฒ์ ์ ์ ์์๋ค.
[ํ ์คํธ ํ๊ธฐ ์ด๋ ต๋ค๋ฉด ํจ์ ๋ถ๋ฆฌ๋ฅผ ํด๋ณด์]
์ ๋ ฅ๋ String ํ์ ์ ์๋์ฐจ์ด๋ฆ์ด List ๋ก ๋ณํ๋๋ ํจ์์ด๋ค.
๊ทธ๋ฌ๋, ์ด ํจ์๋ ์ ๋ ฅ๊ฐ์ ๋ฐ๊ณ , ๋๋๊ณ , List์ ์ถ๊ฐํ๊ณ , ๋ฐํํ๋ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์๋ค.
์ด ํจ์์ ์ด๋ค ๊ธฐ๋ฅ์ ํ ์คํธ ํ ๊ฑด์ง ๊ณ ๋ฏผ์ ๋ง์ด ํ์๋ค.
์ ๋ ฅ๊ฐ์ ๋ค์ด์๋์ง? ์ ๋ ฅ๊ฐ์ด ์ ๋๋ ์ง๋์ง? List์ ์ ์ถ๊ฐ ๋๋์ง? ๋ฐํ์ด ์ ๋๋์ง?
์ถ๊ฐ๋ก, ๋งค๊ฐ๋ณ์๊ฐ ์์ด์ ํ ์คํธ ์ฝ๋์ ์์๊ฐ๊ณผ ๊ธฐ๋๊ฐ์กฐ์ฐจ ์์ฑํ๊ธฐ ์ด๋ ค์ ๋ค.
public List<String> inputCarNames() {
System.out.println("๊ฒฝ์ฃผํ ์๋์ฐจ ์ด๋ฆ์ ์
๋ ฅํ์ธ์.(์ด๋ฆ์ ์ผํ(,) ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ)");
String input = Console.readLine();
String[] carNameArray = input.split(",");
for (String carName : carNameArray) {
carNames.add(carName);
}
return carNames;
}
ํจ์ ๋ถ๋ฆฌ๋ฅผ ํตํด ์ฝ๋๊ฐ ๊น๋ํด์ก๋ค. ๋ด๋ถ ๋ก์ง์ ๋ง๊ฒ ๋ฉ์๋๋ช ์ ๋ฐ๊ฟจ๋ค.(inputCarNames → createCarNames)
์ด์ ์ด ํจ์๋ ์ฌ์ฉ์์ input๊ฐ์ ๋ฐ์์ List๋ก ๋ณํ๋๋์ง๋ฅผ ํ์ธ ํ๋ฉด ๋๋ค.
๋์ฑ์ด, ํ ์คํธ ์ฝ๋์ ์์๊ฐ๊ณผ ๊ธฐ๋๊ฐ์ ๋น๊ตํ๊ณ ์ ํ๋ค๋ฉด "isEqualTo"๋ง์ ์ฌ์ฉํด์ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์์๋ค.
public List<String> createCarNames(String input) {
System.out.println("๊ฒฝ์ฃผํ ์๋์ฐจ ์ด๋ฆ์ ์
๋ ฅํ์ธ์.(์ด๋ฆ์ ์ผํ(,) ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ)");
String[] inputCarNames = split(input);
return toList(inputCarNames);
}
[ํจ์๋ถ๋ฆฌ๋ฅผ ์ํ๋ฉด ์ฝ๋ ์ฝ๊ธฐ๊ฐ ์ฌ์์ง๋ค.]
ํจ์๋ถ๋ฆฌ๋ฅผ ํ๊ธฐ ์ ์๋ ๋ฉ์๋ ์ด๋ฆ๊ณผ ๋ค๋ฅด๊ฒ ๋ด๋ถ์์ ๋ง์ ์ผ๋ค์ด ์ผ์ด๋๊ณ ์์๋ค. ์ฆ, ํจ์์ ์ด๋ฆ๋ง ๋ด์๋ ํจ์์ ๊ธฐ๋ฅ์ ์ ์ ์์๋ค.
์๋ฅผ ๋ค์ด, inputCarNames() ๋ ์ ๋ ฅ๊ฐ ๋ฐ๊ณ , ๋๋๊ณ , List ๋ก ๋ณํํ๋ ๊ฒ๊ณผ ๊ฐ์ด ๋ชจ๋ ๋ก์ง์ ์ฝ์ด์ผ๋ง ํจ์์ ๊ธฐ๋ฅ์ ์ ์๊ฐ ์์๊ณ , ์ด๋ ๋ฉ์๋ ์ด๋ฆ๊ณผ๋ ์ด์ธ๋ฆฌ์ง ์์๋ค.
๊ทธ๋ฌ๋, ํจ์๋ถ๋ฆฌ๋ฅผ ์งํํ์ ๋ฉ์๋์ ์ด๋ฆ๋ง ๋ณด๊ณ , ๋ด๋ถ๋ฅผ ์ฝ์ง ์๊ณ return๊ฐ๋ง ๋ด๋ ๋ฉ์๋๊ฐ ๋ฌด์จ ๊ธฐ๋ฅ์ธ์ง ์ฝ๊ฒ ๋์ ๋ค์ด์๋ค.
ํนํ, ํจ์๋ถ๋ฆฌ๊ฐ ์๋์ ์ฝ๋๊ฐ ์์ด ์ง๋ฌธ์ ์ฝ๋ ๊ฒ์ฒ๋ผ ์ ์ฝํ๋ค.
๊ฐ๋ ์ฑ์ด ์์ฒญ ํฅ์๋จ์ ๋๊ผ๊ณ , private ์ ์ ํ์ ์ผ๋ก ์ฝ๋ ๋ฉ์๋๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ด๋ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ ๋ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ ๊ฒ์ด๊ณ , ๋๋ ์ฌ๋๋ค์ ์ฝ๋๋ค ์ค public ๋ง ์ฝ์์ผ๋ก์จ ํ๋ฆ์ ์ก์ ์ ์์ ๊ฒ์ด๋ค!!
โ pushํ ์ปค๋ฐ ๋๋๋ฆฌ๊ธฐ
๊ธฐ๋ฅ๋ง๋ค ์ปค๋ฐํ๊ณ , ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ต์ํด์ง๊ธฐ ์ํด 2์ฃผ์ฐจ ๊ณผ์ ๋ฅผ 2๋ฒ ๊ตฌํํ์๋ค.
์ฒซ ๋ฒ์งธ ๊ตฌํํ์ ๋ ๊ธฐ๋ฅ๋ง๋ค ์ปค๋ฐํ๋ ๊ฒ์ด ์ต์์น ์์์ ๋ด ๋ง๋๋ก ์ปค๋ฐ์ ํ๊ณค ํ๋ค.
๋ค์ฃฝ๋ฐ์ฃฝ์ผ๋ก ๋ณด๋๋ ์ปค๋ฐ์ ๋๋๋ฆฌ๊ธฐ ์ํด, ํฌํฌ๋ฅผ ์๋กํ๊ณ ๊น์ ํด๋ก ํ๊ธฐ ๋ณด๋ค๋ ์๋ก์ด git ๋ช ๋ น์ด์ธ reset ์ ํ์ตํ๋ค.
reset ์ ์ ์ด์ ์ปค๋ฐ์ ํ์ง ์์ ์ํ๋ก ๋ง๋ค์ด์ฃผ๋ ํน์ง์ด ์๋ค.
๊ทธ๋์, reset ๋ช ๋ น์ด๋ ํ์คํ ๋ฆฌ๋ฅผ ๊ณ ์ณ์ด๋ค๋ ์ ๋๋ฌธ์ ๋ค๋ฅธ ์ฌ๋์ด ์ฌ์ฉํ๋ remote ๋ธ๋์น์์๋ ์ฌ์ฉํ๋ฉด ์๋๋ค.
reset ๋ช ๋ น์ด๋ ํ๋ฆฌ์ฝ์ค ๊ณผ์ ์ ๊ฐ์ด ๋ ํผ์ ์์ ํ ๋๋ง ์ฌ์ฉํ๊ธฐ!
reset ๋ช ๋ น์ด๊ฐ ์ ์๋ํ๋ ์ง ์๊ธฐ ์ํด ์ง๊ธ๊ป ์ปค๋ฐํ ๊ธฐ๋ก์ ๋ณด์ฌ์ฃผ๋ ๋ช ๋ น์ด์ธ git log ๋ฅผ ์ฌ์ฉํ์๋ค.
- git log --oneline : ์ง๊ธ๊น์ง ์ปค๋ฐํ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๋ git ๋ช ๋ น์ด
git log --oneline ์ ํตํด feat ์ docs๋ก ์ปค๋ฐ์ด ๋์ด ์์์ ํ์ธํ๋ค.
reset ์ ํตํด ์ปค๋ฐ์ ์ญ์ ํด ๋ณด์.
- git reset HEAD~n : HEAD ๊ธฐ์ค์ผ๋ก n๊ฐ ๋งํผ ๋๋๋ฆฌ๊ธฐ
๊ทธ๋ฆฌ๊ณ , git log --oneline์ ํตํด ์ปค๋ฐ ๋ก๊ทธ๋ฅผ ํ์ธํด์ ์ปค๋ฐ์ด ์ ์ง์์ ธ ์๋์ง ํ์ธ๊น์ง!
ํ์ง๋ง, ์๊ฒฉ ์ ์ฅ์์ธ ๊น ํ๋ธ์๋ ์ญ์ ์ปค๋ฐ์ด ๋ฐ์๋์ง ์์๋ค.
์๊ฒฉ ์ ์ฅ์์๋ ๋๊ฐ์ด ๋ฐ์ํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ git ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์๋ค.
- git push -f origin [๋ธ๋์น์ด๋ฆ] : ์๊ฒฉ ์ ์ฅ์์ ํน์ ๋ธ๋์น์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ฐ์ ๋ก(push --force) ํธ์(push)ํ๋ ๋ช ๋ น์ด
โ ์์ฌ์
[๊ฐ์ฒด์งํฅ๋ ๋ง๋งํ์ง ์์๋ค]
์ ๋ง .. ๊ฐ์ฒด์งํฅ์ ๋ง๋งํ์ง ์์๋ค.. 1์ฃผ์ฐจ์ ๊นจ๋ฌ์์ ์ป๊ณ 2์ฃผ์ฐจ์ ์ ์ ์ฉํ์ ๋ค์งํ์ง๋ง ์ด๋ฆผ๋ ์์๋ค..
๋ค์์ ๋ด ์ฝ๋์ด๋ค.
Game๊ฐ์ฒด๊ฐ User๊ฐ์ฒด์๊ฒ ์ ๋ ฅ๊ฐ์ ์ ๋ ฅํ๋ผ๊ณ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ์ป์ ๊ฐ์ List ์ ๋ณด๊ดํ๊ณ ์๋ค.
public class Game {
Private User user;
public void start() {
List<String> carNames = user.InputCarNames();
}
}
...
User ๊ฐ์ฒด์ ์ํ์ธ private List<String>์ด Game๊ฐ์ฒด์ ๋๋ฌ๋ฌ๋ค... ์ํ๋ฅผ private ์ผ๋ก ์ค์ ๋ง ํ๋ค๊ณ ์บก์ํ๊ฐ ์ง์ผ์ง๋ ๊ฒ์ ์๋์๋ค.
์ธ์ ๋ carNames ๋ ๋ณ๊ฒฝ๋ ์ํ์ด ์์๋ค. ๊ทธ๋์, ์ด๋ป๊ฒ ํ๋ฉด ์บก์ํ๋ฅผ ์งํฌ ์ ์์์ง ๋ง์ ๊ณ ๋ฏผ์ ํ๋ค.
์ด ์ค, ImmutableCollections(๋ถ๋ณ ์ปฌ๋ ์ )์ ์๊ฒ ๋์๋ค.
๋ถ๋ณ ์ปฌ๋ ์ ์ด๋ ์ปฌ๋ ์ ์ ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์์ (add, remove, sort ...๋ฑ)์ ํ๋ฉด UnsupportedOperationException ์์ธ๊ฐ ์ผ์ด๋๊ฒ ํ๋ ์ปฌ๋ ์ ์ด๋ค.
static abstract class AbstractImmutableList<E> extends AbstractImmutableCollection<E>
implements List<E>, RandomAccess {
// all mutating methods throw UnsupportedOperationException
@Override public void add(int index, E element) { throw uoe(); }
@Override public boolean addAll(int index, Collection<? extends E> c) { throw uoe(); }
@Override public E remove(int index) { throw uoe(); }
@Override public void replaceAll(UnaryOperator<E> operator) { throw uoe(); }
@Override public E set(int index, E element) { throw uoe(); }
@Override public void sort(Comparator<? super E> c) { throw uoe(); }
...
๊ทธ๋์, ๋์ carNames ์ ๋ณ๊ฒฝ์ ๋ง๊ธฐ ์ํด์ ๋ถ๋ณ ์ปฌ๋ ์ ์ผ๋ก ์ค์ ํ ์ ์์๋ค.
ํ์ง๋ง, ์ด ๋ถ๋ณ ์ปฌ๋ ์ ์ ์ฌ์ฉ ์ฉ๋๋ ๊ฐ์ ์กฐํํ๊ธฐ ์ํด ์ํ๋ฅผ ๊ฐ์ฒด์์ ๊บผ๋ด์ผ ํ ๋!! ์ฃผ๋ก ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
๋ด๊ฐ carNames ๋ ์ํ๋ฅผ API์ ๋๋ฌ๋ธ ์ด์ ๋ ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํด์์๊ธฐ ๋๋ฌธ์ ๋ด ๋ฌธ์ ์ ๋ถ๋ณ ์ปฌ๋ ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋จ์ง ์์๋ฐฉํธ์ด๋ผ ์๊ฐํด์ ์ฌ์ฉํ์ง ์์๋ค.
๊ทผ๋ณธ์ ์ธ ์์ธ์ ์ฐพ๊ณ ์ถ์๋ค.
๊ทธ๋ฌ๋,, ๋ง์ ์๊ฐ์ ์๊ฐ์ ํฌ์ํ์ง๋ง ๊ฒฐ๊ตญ ํด๊ฒฐํ์ง ๋ชปํด์ ๋๋ฌด ์์ฌ์ ๋ค.
User ๊ฐ ์ ๋ ฅ์ ๋ฐ์ ์ฑ ์๊ณผ Car๋ฅผ ์ด๋์ํฌ ์ฑ ์์ด ์๋์ง, ์๋๋ฉด ๋์ฒ๋ผ ๊ฐ์ ์ ๋ฌํ๋๋ฐ ํน์ ๋ฐฉ์์ด ๋ฐ๋ก ์๋ ๊ฑด์ง ๊ณ ๋ฏผํ๋ฉฐ ๊ฐ์ฒด ์ค๊ณ๋ฅผ ์ํ๊ธฐ ์ํด ๊พธ์คํ ๊ณ ๋ฏผํด์ผ๊ฒ ๋ค.
๐๋ง์น๋ฉฐ
2์ฃผ์ฐจ ์ค๊ฐ์๋ ์ฝ๋์ ์ง์ ์ด ์๋ ๊ฒ ๊ฐ์ ์ค์ค๋ก์๊ฒ ์ค๋ง๋ ํ์์ง๋ง, ๊ธฐ๋ก์ ํตํด ๊ฝค ๋ง์ด ๋ ธ๋ ฅํ๊ฑธ ์ ์ ์์๋ค๐๐๐
์ฝ์ง์ ํ๋งํผ ๋ค์ ๋ฒ์๋ ์ฝ์ง์ ์ํ ํ ๋๊น!!
- ์ ๊ท์ํ์ต
- AssertJํจ์ ํ์ต, ๊ณต์๋ฌธ์์์ ํจ์ ์ฐพ๊ธฐ
- ํจ์๋ถ๋ฆฌ, ํ ์คํธ ์ฝ๋ ์์ฑ
- 1์ฃผ์ฐจ ๊ณต๋ ํผ๋๋ฐฑ ํ์ต
- ๋ถ๋ณ์ปฌ๋ ์
- ์๊ตฌ์ฌํญ์ ๋ํ๋ ์์ธ
๋ค๋ง 2์ฃผ์ฐจ๊ฐ ๋๋๊ณ ๋ ๊ตฌํํ ๊ธฐ๋ฅ๋ง๋ค ์ปค๋ฐํ๊ณ , ํ ์คํธ ์ฝ๋ ์์ฑ๊ณผ ํจ์๋ถ๋ฆฌ์ ์ต์ํด์ง๊ณ ์ถ์์ง๋ง ์ด๋ฃจ์ง ๋ชปํด ์์ฝ๋ค.
์ค๋๋ 3์ฃผ์ฐจ์ ์์์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ค์ง์ ํด๋ณธ๋ค.
"์ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฑฐ์ผ?" ๋ฅผ ์์์ ์ผ๋ก ์๋ฌธํ๊ธฐ
๋ง์ง๋ง์ผ๋ก ํ ์คํธ ์ฝ๋์ ๋ํด ํ์ตํ๋ฉฐ ์ฝ์๋ ์ฑ ์ค ์ธ์ ๊น์๋ ๋ง์ ์ ์ผ๋ฉฐ 2์ฃผ์ฐจ๋ ๋!
์ฝ๋๋ฅผ ๋ค ์์ฑํ๊ณ ๋์ ํ ์คํธ์ ๋ํด ์๊ฐํ๋ฉด ์๋๋ค.
์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ '์ด๋ป๊ฒ ํ ์คํธ๋ฅผ ํ ๊ฒ์ธ๊ฐ?'๋ฅผ ์๋ฌธํ๊ธฐ
p. 23 ไธญ ์ข์ ์ฝ๋, ๋์ ์ฝ๋
'๊ธฐํ > ์ฐ์ํํ ํฌ์ฝ์ค > ํ๋ฆฌ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ฆฌ์ฝ์ค 3์ฃผ์ฐจ] - ์ข์ ๋ค์ด๋ฐ์ ์ํ ๊ท์น (0) | 2023.11.09 |
---|---|
[ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ] 1์ฃผ์ฐจ ๊ณตํต ํผ๋๋ฐฑ ํ์ต (0) | 2023.11.02 |
[ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ] ์๋ฐ ์ฝ๋ฉ ์ปจ๋ฒค์ (ํด์ค) (1) | 2023.10.26 |
[ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ] ์ซ์ ์ผ๊ตฌ ๊ฒ์ ํ๊ณ (1) | 2023.10.26 |
[ํ๋ฆฌ์ฝ์ค ํ๋ฆฌ๋ทฐ] ํ๋ฆฌ์ฝ์ค๋ฅผ ์์ํ๋ ๋น์ ๊ณต์๋ฅผ ์ํ ๊ฐ์ด๋ (2) | 2023.10.18 |