ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ ์ฃผ์ ๋ ์ซ์์ผ๊ตฌ ๊ฒ์์ด์๋ค. ์ฌ์ค 4๊ธฐ ํ๋ฆฌ์ฝ์ค ๋ฏธ์ ์ ๋ฏธ๋ฆฌ ํ์ด๋ดค์๊ธฐ ๋๋ฌธ์ ๋๋ฆ ์ต์ํ ์ฃผ์ ์๋ค. ํ์ง๋ง ์ด๋ฒ ๋ฏธ์ ์ 4๊ธฐ ๋ฏธ์ ๊ณผ๋ ๋ฌ๋ฆฌ html์ ์ ํ ๋ค๋ฃจ์ง ์์๊ณ , ํ ์คํธ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ๋ผ๋ ์๊ตฌ์ฌํญ์ด ์ถ๊ฐ๋์ด ์กฐ๊ธ ์๋ค๋ฅธ ๋๋์ด์๋ค.
์ง๋์ฃผ ๋ฏธ์
๊ณผ๋ ๋ฌ๋ฆฌ ์ด๋ฒ์ฃผ ๋ฏธ์
์ ์ถ๊ฐ๋ ์๊ตฌ์ฌํญ์ด ๊ฝค ๋ง์๋ค. ๊ธฐ๋ฅ์ ๋๋ฌด ๋ณต์กํ์ง ์๊ฒ ๊ตฌํํ๋ ์๊ตฌ์ฌํญ๋ค์ด ๋ช๊ฐ์ง ์์๊ณ , ํ์
์ ์ํด ์ปจ๋ฒค์
์ ์งํค๋ผ๋ ์๊ตฌ์ฌํญ๊ณผ ํ
์คํธ ์ฝ๋ ๊ด๋ จ ์๊ตฌ์ฌํญ์ด ์ถ๊ฐ๋์๋ค. ์ด ์ค ๊ฐ์ฅ ์์ํ ๋ด์ฉ์ ํ
์คํธ ์ฝ๋ ์์ฑ์ด์๋ค. ๊ทธ๋์ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ํ๋ฒ๋ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํด๋ณธ ์ ์ด ์์๊ณ , Jest
๋ผ๋ ๋
์๋ ์ด๋ฒ์ ์ฒ์ ๋ดค๋ค. ๊ทธ๋์ ๋น์ฐํ๊ฒ๋ ๊ฐ์ฅ ์ด๋ ค์ ๋ ์ ์ค ํ๋์๋ค.
๋คํํ๋ ์ด๋ฏธ ์ฃผ์ด์ง ํ
์คํธ ์ฝ๋๊ฐ ApplicationTest.js
, StringTest.js
์ด๋ ๊ฒ ๋ ๊ฐ์ง๋ ์ฃผ์ด์ ธ ์์๊ณ
๋ฆฌ๋๋ฏธ์ ์น์ ํ ๊ทธ ๋ด์ฉ์ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ผ๋ ๋ง๋ ์ ํ์์๋ค. ๊ณต์๋ฌธ์๋ ๋๋ฆ ์์ธํ ๋์์๋ ๊ฒ ๊ฐ์ ์์ฃผ ๊ฐ๋ ๊ณต์๋ฌธ์์ ๋ด์ฉ๋ ์ฐธ๊ณ ํ๋ค.
Jest
์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด ํ
์คํธ ์ฝ๋์ ์์๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ง๋ค.
์ฌ์ฉ ๋ฐฉ์์ ํฌ๊ฒ ์ด๋ ต์ง ์์๋ค. ๋จผ์ package.json
์
{
"scripts": {
"test": "jest"
}
}
์์ ๊ฐ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ , npm test
๋ฅผ ์คํํ๋ฉด
์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค๊ณ ๋์์๋ค.
์ด๋ฅผ ํตํด test
์ ์ฒซ๋ฒ์งธ ์ธ์๋ก ์ฃผ์ด์ง ๋ฌธ์์ด์ ํตํด ์ด๋ค ํ
์คํธ์ธ์ง๋ฅผ ๋ช
์ํด์ฃผ๊ณ , ๋๋ฒ์งธ ์ธ์๋ก ์ฃผ์ด์ง ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์ expect
์ ์ฐธ๊ฐ์ด ์ฃผ์ด์ง๋ฉด ํ
์คํธ๊ฐ ํต๊ณผ๋จ์ ์ ์ ์์๋ค.
test('๋ณผ๊ณผ ์คํธ๋ผ์ดํฌ๊ฐ ํจ๊ป ์์ ๋๋ "~๋ณผ ~์คํธ๋ผ์ดํฌ"๊ฐ ์ถ๋ ฅ๋๋ค.', () => {
const correctNumber = ["123", "456", "789", "159", "753"];
const inputNumber = ["321", "461", "981", "519", "715"];
const answer = [
"2๋ณผ 1์คํธ๋ผ์ดํฌ",
"1๋ณผ 1์คํธ๋ผ์ดํฌ",
"1๋ณผ 1์คํธ๋ผ์ดํฌ",
"2๋ณผ 1์คํธ๋ผ์ดํฌ",
"1๋ณผ 1์คํธ๋ผ์ดํฌ",
];
for (let i = 0; i < 5; i++) {
expect(getHint(correctNumber[i], inputNumber[i])).toEqual(answer[i]);
}
});
์ ์ฝ๋๋ ์ค์ ๋ก ์์ฑํ๋ ํ
์คํธ ์ฝ๋์ ์ผ๋ถ์ด๋ค. ํ
์คํธ ํ๊ณ ์ ํ๋ ๊ธฐ๋ฅ์ ํํธ๋ฅผ ์ฐ์ถํ๋ getHint
ํจ์์ ์ ์ ๋์ ์ฌ๋ถ์๋ค.
getHint
ํจ์๋ ์ ๋ต๊ณผ ์ฌ์ฉ์ ์
๋ ฅ๊ฐ์ ์ธ์๋ก ๋ฐ์ ํํธ๋ฅผ ์ถ๋ ฅํ๋ ํจ์์ด๋ค. ์ด๋ฅผ ํ
์คํธ ํ๊ณ ์ ๊ฐ์์ ์ ๋ต, ์
๋ ฅ๊ฐ์ ๋ฐฐ์ด๋ก ๋ง๋ค๊ณ , ์ด ๊ฐ๋ค์ ํด๋นํ๋ ํํธ ๋ํ ๋ฐฐ์ด๋ก ๋ง๋ค์๋ค. ๋ฐ๋ณต๋ฌธ์ ์์ฑํ์ฌ getHint
์ ๊ฐ์์ ์ ๋ต, ์
๋ ฅ๊ฐ์ ์ ๋ฌํด ์ฃผ์๊ณ Jest
์ toEqual
matcher๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ๊ฐ์ด ๋ฏธ๋ฆฌ ์์ฑํ ํํธ์ ์ผ์นํ๋์ง ํ์ธํ๋ค.
๋ค ์ ๊ณ ๋ณด๋ ๋ณด์๊ฒ ์์ด ๋ณด์ด๊ธด ํ์ง๋ง ์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ค์ธ ์๊ฐ์ด ์๊ฐ๋ณด๋ค ๊ธธ์๋ค. ์ ๋ฐ ๊ฐ๋จํ ํ
์คํธ๋ ์ด์ ์์ํ๊ฒ ์์ฑํ ์ ์์ง๋ง, ๊ฐ์ ํจ์ mock function
์ ๋ง๋ค์ด ํ
์คํธ ํ๋ ๊ธฐ๋ฅ์ ์ด๋ฒ์ฃผ ๋ฏธ์
์๋ฃ๊น์ง ํ์คํ ๊ณต๋ถํ์ง ๋ชปํ๋ค. ์ค๋(11/09) ์ฌ๋๋๋ฅผ ๋นผ๋ฌ ๊ฐ๋ ๋ ์ด๋ผ ํต์ฆ์ด ์ข ์ค์ด๋ค 11/12๊น์ง mock function
์ ๋ถ์ํด ํฌ์คํ
ํ๊ฒ ๋ค. (๋ฐ๋๋ผ์ธ์ ์์ก์ผ๋ฉด ์ ๋ ์ํ๋ ์ฑ๊ฒฉ์ด๋ผ ๋ธ๋ก๊ทธ์ ์ ์ด๋์๋ค)
mock function ๋ถ์
์ด์ ์์ํ ์ค ์์๋๋ฐ ์์ง๋ ๋ฝ์ ์๋ฆฌ๊ฐ ๋ฐ๊ฐ๋ค... ๋งค๋ณต์ด๋ผ ๊ทธ๋ฐ๊ฐ ใ
ใ
๊ทธ๋๋ ์ฝ์ํ ๋ด์ฉ์ด๋ ์ง์ผ ์ ์ด๋ณด์๋ค.(11/12)
์ฐธ๊ณ ๋ก ๊ณต์๋ฌธ์๋ฅผ ๊ฒ์ํ ๋๋ "๊ฒ์ํ๊ณ ์ ํ๋ ๋์
docs"๋ก ๊ฒ์ํ๋ฉด ๋๋ค. ex) "javascript docs", "node.js docs"
์ต๊ทผ์ ์๊ฒ๋ผ์ ์ ์ด๋ณธ๋ค
๋ฏธ์ ์ ์ํํ๋ค๋ณด๋ ํ๋์ ๊ธฐ๋ฅ์ ์์ฑํ๊ธฐ ์ํด ์ฌ๋ฌ ์์ ํจ์๋ค์ ๊ตฌํํ๊ฒ ๋์๊ณ , ๊ทธ๋ ๊ฒ ํจ์๋ค์ด ๋ง์์ง๋ค ๋ณด๋ ๋๋ฌด ์ง์ ๋ถํด ๋ณด์ด๊ฒ ๋์๋ค. ๊น๋ํ๊ฒ ๊ณ ์ณ๋ณด๊ณ ์ ๊ธฐ๋ฅ ๋จ์๋ก ๋ฌถ์ด ๋ค์๊ณผ ๊ฐ์ด ํจ์๋ค์ ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
export default function ์๋ ์ธ ํจ์๋ฅผ ์ฌ์ฉํด์ ํํธ๋ฅผ ๋ฐํํ๋ ํจ์(){~~~};
function ์คํธ๋ผ์ดํฌ ๊ฐ์ ๊ณ์ฐ ํจ์(){~~~};
function ๋ณผ ๊ฐ์ ๊ณ์ฐ ํจ์(){~~~};
function ์คํธ๋ผ์ดํฌ, ๋ณผ ๊ฐ์๋ก ํํธ ๋ฌธ์์ด ๋ง๋๋ ํจ์(){~~~};
// ์ฌ์ฉํ ๋
import ์๋ ์ธ ํจ์๋ฅผ ์ฌ์ฉํด์ ํํธ๋ฅผ ๋ฐํํ๋ ํจ์ from "๊ฒฝ๋ก"
์ ์ฝ๋๋ ๊ทธ๋์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์์ฑํ ์ฝ๋์ด๋ค. ์ ํ ๋ฌธ์ ๊ฐ ์์ด ๋ณด์ด์ง๋ง ์ ํจ์๋ฅผ ์ฌ์ฉํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ฌธ์ ์ ์์ธ์ ์ฐพ์๋ณด๊ธฐ ์ํด node.js์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐพ์๋ณด์๋ค. ์ฐพ์๋ณธ ๊ฒฐ๊ณผ node.js์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก import
, export
๋ฅผ ์ง์ํ์ง ์๊ณ , ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ jsํ์ผ์ ์ ์ฅํ ๋ ํ์ฅ์๋ช
์ mjs๋ก ์ ์ฅํด์ผ ํ๋ค๋ ๊ฒ์ ์์๋ค. ํน์ package.json
์ ์ผ๋ถ ์์ ํ๋ ๋ฐฉ์์ด ์๋ค๊ณ ํ์ง๋ง ์ด๋ ๋ฏธ์
์์ ์ ํ ์ฌํญ์ ์๋ ๋ด์ฉ์ด๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐํ๋ค.
ํ์์๋ js์ ES6๋ฌธ๋ฒ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ import
, export
๋ฅผ ์ง์ํด์ฃผ๋ ๊ฒ์ด์๊ณ , node.js ํ๊ฒฝ์์๋ module.exports
, require
๋ฅผ ์ฌ์ฉํด์ผ ํจ์ ์๊ฒ ๋์๋ค.
ํน์๋ mjs ํ์ผ ํ์ฅ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฏธ์
์งํ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊น ๋๋ ค์ module.exports
, require
๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค. ๊ทธ๋ ๊ฒ ๋ณ๊ฒฝ๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
function ์๋ ์ธ ํจ์๋ฅผ ์ฌ์ฉํด์ ํํธ๋ฅผ ๋ฐํํ๋ ํจ์(){~~~};
function ์คํธ๋ผ์ดํฌ ๊ฐ์ ๊ณ์ฐ ํจ์(){~~~};
function ๋ณผ ๊ฐ์ ๊ณ์ฐ ํจ์(){~~~};
function ์คํธ๋ผ์ดํฌ, ๋ณผ ๊ฐ์๋ก ํํธ ๋ฌธ์์ด ๋ง๋๋ ํจ์(){~~~};
module.export = {์๋ ์ธ ํจ์๋ฅผ ์ฌ์ฉํด์ ํํธ๋ฅผ ๋ฐํํ๋ ํจ์};
// ์ฌ์ฉํ ๋
const {์๋ ์ธ ํจ์๋ฅผ ์ฌ์ฉํด์ ํํธ๋ฅผ ๋ฐํํ๋ ํจ์} = require("๊ฒฝ๋ก");
import๋ฅผ ์ฌ์ฉํ ๋ ค๊ณ ๊ณ ์ง๋ถ๋ฆฐ ๋์ ์๋ก์ด ๋ด์ฉ์ ์๊ฒ๋๋ค. (์ฌ์ค node.js ๊ณต์๋ฌธ์๋ฅผ ๊ฒ์ํ๊ธฐ๊น์ง ๋ค๋ฅธ ๋ด์ฉ์ผ๋ก ์์ฒญ ์ฝ์งํ๋ค)
์ด๋ฐ ์๊ตฌ์ฌํญ์ด ์์๋ค.
ApplicationTest๋ฅผ ์ดํด๋ณด๋ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ํ ์คํธ๋ฅผ ์งํํ ์ ์์ด 0์ ์ฒ๋ฆฌ๊ฐ ๋จ์ ํ์ธํ ์ ์์๋ค. ๊ทธ๋์ ์ ๋ ์์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ณํ์ ์ง๋ดค๋ค.
MissionUtils.Console.readLine("์ง๋ฌธ ๋ด์ฉ",(์
๋ ฅ๊ฐ)=>{
// ์ฌ๊ธฐ์ ์
๋ ฅ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
});
์๋ฐ ํจ์๊ฐ ์๋๋ฐ ์๋ ๊ณํ์ ๋ค์๊ณผ ๊ฐ์ด while๋ฌธ์์ ์ MissionUtils๋ฅผ ์ฌ์ฉํด ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์๋ฅผ ํธ์ถํ๊ณ ์ ํ๋ค.
class BaseballGame{
constructor(){
this.inputNumber = 0;
}
handleUserInput(){
MissionUtils.Console.readLine("์ง๋ฌธ ๋ด์ฉ",(์
๋ ฅ๊ฐ)=>{
this.inputNumber = ์
๋ ฅ๊ฐ
});
}
startGame(){
while(ํํธ๊ฐ 3์คํธ๋ผ์ดํฌ ์๋ ๋์ ๋ฐ๋ณต){
handleUserInput();
//๋ค์ ๋ก์ง...
}
}
}
๊ทธ๋ฅ ๋ณด๊ธฐ์ ๋ฌธ์ ๊ฐ ์์ด๋ณด์ด์ง๋ง, ์ด ์ฝ๋์ ์น๋ช
์ ์ธ ๋ฌธ์ ๊ฐ ์์๋ค. readLine
์ ํตํด ์
๋ ฅ๊ฐ์ ๋ฐ์์ฌ ๋ ์์ ๊ฐ์ด ํธ์ถํ๋ฉด ์ฌ์ฉ์์ ์
๋ ฅ์ ๊ธฐ๋ค๋ ค์ฃผ์ง ์๊ณ while๋ฌธ์ด ๊ณ์ ๋ฐ๋ณตํ๋ค๋ ๋ฌธ์ ์ ์ด์๋ค.
์ค์ ๋ก ์ ๋ก์ง์ ๋๋ ค๋ณด๋ฉด ๋ด ์ ๋ ฅ์ ๊ธฐ๋ค๋ฆฌ์ง๋ ์๊ณ ์ซ์๋ฅผ ์ ๋ ฅํ๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋ฌดํ๋๋ก ์ถ๋ ฅ๋๋ ์๋ฆ๋ค์ด ๊ฒฝํ์ ํ ์ ์์ ๊ฒ์ด๋ค... ใ ใ
๊ทธ๋์ ๋ฐฉ์์ ๊ณ ๋ฏผํ๋ค readLine
๋ด๋ถ์์ ๋ก์ง์ ์คํ์ํค๋ฉด ์ด๋จ๊น ๋ผ๋ ์๊ฐ์ ํ๊ฒ ๋์๋ค. ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
MissionUtils.Console.readLine("์ง๋ฌธ ๋ด์ฉ",(์
๋ ฅ๊ฐ)=>{
์
๋ ฅ๊ฐ ์ฒ๋ฆฌ ํจ์(์
๋ ฅ๊ฐ);
});
์ด๋ฐ ์์ผ๋ก ์ฒ๋ฆฌํ๋ ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์ ๋ ฅ์ด ๋๋ฉด ๊ทธ ๊ฐ์ ํตํด ๋ก์ง์ด ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์์๋ค.
MissionUtils๋ readLine
๋ง๊ณ ๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋ ๊ดด๋กญํ๋ค. ๋ฏธ์
์ ๋ก์ง์ด ์์ฑ๋๊ณ npm test
๋ฅผ ์คํ์์ผฐ์ ๋ ๋ชจ๋ ์ ์์ ์ผ๋ก ํ
์คํธ๊ฐ ํต๊ณผํด ๊ธฐ๋ถ ์ข๊ฒ ์ฐํ
์ฝ ์ง์ ์ฌ์ดํธ์์ ํ
์คํธ๋ฅผ ๋๋ ค๋ณด์๋ค.
๊ฒฐ๊ณผ๋
์ ์ถ๋ ์ด๋ฐ ๋ฌธ๊ตฌ์ ๋ง์ฃผํ๊ฒ ๋์๋ค. ๋ฌด์์ด ๋ฌธ์ ์ธ์ง ์ ์ ์์ด ์ ๊ฟ์ PR๋ง ๋ซ์๋ค๊ฐ ๋ค์ ์ ์ถํ๋ค. ๊ทธ๋๋ ๊ฒฐ๊ณผ๋ ์์ ๊ฐ์๋ค. ์ค๋ ์๊ฐ ๊ณ ๋ฏผํด๋ณธ ๊ฒฐ๊ณผ ๋ฌธ์ ์ ์ ๊ฒ์์ด ์ข ๋ฃ๋ ์ดํ "2"๋ฅผ ์ ๋ ฅํ์ ๋ ๊ฒ์์ด ์ข ๋ฃ๋๋ ๋ถ๋ถ์ ์์๋ค. ๋ด๊ฐ ์ฒ์ ์๊ฐํ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ์๋ค.
- ์ฌ์ฉ์๊ฐ ์ซ์๋ฅผ ๋ง์ถฐ ์ฌ์์ ์ฌ๋ถ ํ๋ณํจ์ ์คํ
- "1"์ด ์ ๋ ฅ๋๋ฉด ์ฌ์์
- "1", "2"๊ฐ ์๋ ๋ค๋ฅธ ์ซ์๊ฐ ์ ๋ ฅ๋๋ฉด throw๋ก Error ๋ฐ์
- "2"๋ ๋ฐ๋ก ์ฒ๋ฆฌํ์ง ์์
์๋ง๋ ํ
์คํธ๋ฅผ ํ ๋ ์ข
๋ฃ๋๋ ๋ถ๋ถ์ด ์์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ์๋ค. MissionUtils์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ฒ ์ฝ์ด๋ณด๋
์ด๋ฐ ๋ถ๋ถ์ด ์์๋ค. ํน์๋ ์ด ๋
์์ด ํด๊ฒฐ์ฑ
์ผ๊น ์ถ์ด ๊ฒ์ ์ข
๋ฃ ํ "2"๊ฐ ์
๋ ฅ๋๋ฉด Console.close()
๋ฅผ ํธ์ถํด๋ณด์๋ค.
์์ผ๋ก ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ์กฐ๊ธ๋ง ๋ ๊ผผ๊ผผํ ๊ณํํ์๋ ๋ค์ง์ ํ๋ค.
์ ์ฌ์ง์ 1์ฃผ์ฐจ ๋ฏธ์ ์ค ๊ฐ์ฅ ์ด๋ ค์ ๋ 7๋ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ์์ฑํ๋ ๊ธฐ๋ฅ๋ชฉ๋ก ๋ฐ ๊ตฌํ ๋ฐฉํฅ์ฑ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ง์ 2์ฃผ์ฐจ ๋ฏธ์ ์ ์ํํ๋ฉฐ ์์ฑํ ๊ธฐ๋ฅ๋ชฉ๋ก ๋ฐ ๊ตฌํ ๋ฐฉํฅ์ฑ์ด๋ค. ์ ์ฒด ๋ด์ฉ์ ์ฌ๊ธฐ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฅ ๋ณด๊ธฐ๋ง ํด์๋ ๊พธ๋ช๋ค๋ ๊ฒ ์ธ์ ๋์ ์ฐจ์ด๊ฐ ์ ์๋๊ปด์ง๊ฒ ์ง๋ง
์ด ๋ถ๋ถ์์ ๋์ ์ฐจ์ด๊ฐ ์๋ค.
1์ฃผ์ฐจ์ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์์ฑํ๋ ๋๋ง์ ๋ฃจํด์ ์ก์๊ฐ๋ ๋จ๊ณ์๋ค๋ฉด 2์ฃผ์ฐจ๋ ๊ทธ๊ฑธ ์ข ๋ ๋ฐ์ ์ํค๋ ๋จ๊ณ์๋ค. ์ง๋ 1์ฃผ์ฐจ ํ๊ณ ์์ ๋๋ง์ ๊ธฐ๋ฅ๋ชฉ๋ก ์์ฑ ๊ท์น์ ์ด์ผ๊ธฐ ํ์๋๋ฐ
์ด๋ ๋๋ ์ด 5๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ณ ์ด์ผ๊ธฐ ํ๋ค. ์ด๋๋ ๋๋ฆ ๊ฐ๋จํ ๋ด์ฉ์ด๋ผ ํ๊บผ๋ฒ์ ๋ชจ๋ ๋ฐฉํฅ์ฑ์ ์ ํ ์ ์์๋ค. ํ์ง๋ง ์ด๋ฒ์ฃผ ๋ฏธ์
์์๋ ํ๋์ ํฐ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ ์ํ ๊ธฐ๋ฅ๋ชฉ๋ก์ ์์ฑํด์ผ ํ๋ค. ์ง์ ํด๋ณด๋ ๋ด ๋ฃจํด ์ค ๊ตฌํ ๋ฐฉํฅ์ฑ์ ์ค์ ํ๋ ๋ถ๋ถ์์ ์ด๋ ค์์ด ์์๋ค. ๊ทธ๋์ ๊ธฐ๋ฅ๋ชฉ๋ก์ ์์ฑํ ํ ๊ธฐ๋ฅ์ ํ์ํ ๊ตฌํ ๋ฐฉํฅ์ฑ์ ๊ตฌํํ ๋๋ง๋ค ์ ์ด๋ณด์๋ค. ์ ์ฒด ๋ฐฉํฅ์ฑ์ ์ ํด๋ ํ ์์ ๋ฐฉํฅ์ฑ๋ค์ ์ก์๊ฐ๋ ํฐ ๋ฌด๋ฆฌ ์์ด ๋ฏธ์
์ ํด๊ฒฐํ ์ ์์๋ค. ์ด๋์ ์ฃผ์๋ค์ divide and conquer
๊ฐ ๋ ์ฌ๋๋ค. ์ด๋์ ์ด์ ๊ธฐ์ ๋ถ๋ค์ ํ๊ธฐ๋ฅผ ๋ณด๋ฉด ๊ธฐ๋ฅ ๋ชฉ๋ก ์์ฑ์ด ๋ง์ ๋์์ด ๋์๋ค๊ณ ์๊ธฐํ๋๊ฑด๊ฐ ์ถ์๋ค.
1์ฃผ์ฐจ ํ๊ณ ๋ ์ฌ๊ธฐ์ ํ์ธํ ์ ์๋ค.
์ฒ์์ ๋งํ๋ค์ํผ ๋๋ ์ด๋ฏธ ์ด ๋ฏธ์ ์ ํ๋ฒ ๊ตฌํํด๋ณธ ์ ์ด ์์๋ค. ๋ฌผ๋ก ์ง๊ธ ํ ๊ฒ์ฒ๋ผ ์ด์ฌํ ํ์ง ์์์ง๋ง ๊ตฌํ์ ์ด๋ฏธ ํด๋ณธ ํ๋ก๊ทธ๋จ์ ๋ค์ ํด๋ณด๋ ๊ฒ์ ์ฒ์ ํ๋ ๊ฒ๋ณด๋ค ํฌ๊ฒ ์ด๋ ต์ง ์์๋ค. ๊ทธ๋์ ์ด๋ฒ์ ๋ฆฌํฉํ ๋ง์ ๋ง์ด ํด๋ณด์๋ ์๊ฐ์ผ๋ก ๋ฏธ์ ์ ์ํ๋ค.
ํ๋ฒ ๋ค ์ง ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ํ๋์ ์ฝ๋์ ๋ถ๋ด์ด ๋๋ฌด ์ปค์ง๋ฉด ์์ ์กฐ๊ฐ๋ค์ ์ฑ ์์ ๋ถํ ํ๋ ๋๋์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
ex)
์ด๋ ๊ฒ ํด๋ณด๋ ์๊ตฌ์ฌํญ์ ์ฃผ์ด์ก๋ indent depth 2์ดํ๋ก ์ ํ, ํจ์๊ฐ ํ๋์ ์ญํ ๋ง ์ํํ๋๋ก ์์ฑ ๋ฑ์ ๋ด์ฉ์ด ์์ฐ์ค๋ฝ๊ฒ ์ง์ผ์ง๊ฒ ๋์๋ค. ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์๋ ๋๋ฆ์ ๋ฆฌํฉํ ๋ง์ ์์ฃผ ์งํํ์์ง๋ง, ์ด๋ ๊ฒ๊น์ง ์ธ๋ถ์ ์ผ๋ก ํด๋ณธ์ ์ ์์๋ค. ๊ณ ๋ฏผํ๋ฉด ๊ณ ๋ฏผํ ์๋ก ๋จ์ํ ํํ์ผ๋ก ๋ง์ ๊ธฐ๋ฅ์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋๋ ๊ณ ๋ฏผํ๋ ์ฌ๋ฏธ๊ฐ ์์๋ค.