๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Java

ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ๋ฏผ๊ณผ ๋…ธ๋ ฅ

์šฐํ…Œ์ฝ” ํ”„๋ฆฌ์ฝ”์Šค๊ฐ€ ๋๋‚˜๊ณ , ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด '์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„' ๋ฏธ์…˜์„ ๋‹ค์‹œ ํ’€์–ด๋ณด์•˜๋‹ค.

 

ํ•˜์ง€๋งŒ, ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ๊ตฌํ˜„ ํ•˜๊ธฐ ์œ„ํ•ด, ๊ณ ๋ฏผํ•˜๊ณ  ๋‹ต์„ ์ฐพ๋Š” ๊ณผ์ •์ด 2์ฃผ๊ฐ€ ๊ฑธ๋ ธ๋‹ค.

์ด ๊ณผ์ •์—์„œ ์ƒ๊ฒผ๋˜ ๊ถ๊ธˆ์ฆ๋“ค์„ Q&A ํ˜•์‹์œผ๋กœ ๋จผ์ € ์–˜๊ธฐํ•ด๋ณด๊ฒ ๋‹ค!

 

*์˜ˆ์‹œ๋กœ ๋‚˜์˜ค๋Š” ์ฝ”๋“œ์˜ ์ „๋ฌธ์ž…๋‹ˆ๋‹ค.

โœ… ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฒ€์ฆ(validate)์„ ์–ด๋””์„œ ํ•  ๊ฒƒ์ธ๊ฐ€?

์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š” ์กฐ๊ฑด๋“ค์„ ์–ด๋””์„œ ๊ฒ€์ฆํ•ด์•ผ ํ• ๊นŒ?

 

๋‚˜์˜ ์ƒ๊ฐ์€ ๊ฐ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž์—์„œ ๊ฒ€์ฆ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๋•Œ, ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ์ด ๋œ๋‹ค๋ฉด ๊ทธ ๊ฐ์ฒด๋Š” ์š”๊ตฌ์‚ฌํ•ญ์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋ณด์žฅ๋œ ๊ฐ์ฒด์ž„์„ ๋œปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์˜ "์„œ๋กœ ๋‹ค๋ฅธ ์„ธ ์ž๋ฆฌ์ˆ˜" ๋ผ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด๋“ค์„ ๋‚ดํฌํ•˜๊ณ  ์žˆ๋‹ค.

โ‘ ์„œ๋กœ ๋‹ค๋ฅธ ์„ธ ์ž๋ฆฌ์ˆ˜์˜ ์ˆซ์ž๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค

โ‘ก 1~9์‚ฌ์ด์˜ ์ˆซ์ž์—ฌ์•ผ ํ•œ๋‹ค

โ‘ข์„ธ ์ž๋ฆฌ ์ˆซ์ž์—ฌ์•ผ ํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ ์กฐ๊ฑด๋“ค์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์„ธ ์ž๋ฆฌ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด์ธ GameNumber ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ์ƒ์„ฑ์ž์—์„œ ์กฐ๊ฑด๋“ค์„ ๊ฒ€์ฆ(validate)์„ ํ•˜๋„๋ก ํ–ˆ๋‹ค.

public class GameNumber{
    private final List<Integer> numbers;
    
    public GameNumber(List<Integer> numbers){
        validate(numbers);
        this.numbers = numbers;
    }
    ... ๋‹ค๋ฅธ ๋กœ์ง๋“ค ...
    
    private void validate(List<Integer> numbers){
        1. ์ค‘๋ณต๋˜๋Š”์ง€ ์—ฌ๋ถ€
        2. ์ˆซ์ž๊ฐ€ 1~9์‚ฌ์ด์ธ์ง€ ์—ฌ๋ถ€
        3. ์„ธ ์ž๋ฆฌ์ˆ˜์ธ์ง€ ์—ฌ๋ถ€
    }
}

์ž…๋ ฅ๊ฐ’์ธ String์„ List<Integer>๋กœ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•œ ํ›„, GameNumber ์—๊ฒŒ ๋„˜๊ฒจ ์ฃผ์—ˆ์„ ๋•Œ!!

GameNumber ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ ๋œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์€ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๋Š” ์ž…๋ ฅ์ด๋ž€ ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

์ฆ‰, GameNumber ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ˆซ์ž๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๊ณ , ์ˆซ์ž๊ฐ€ 1~9์‚ฌ์ด ์ด๊ณ , ์„ธ ์ž๋ฆฌ์ˆ˜๊ฐ€ ๋ณด์žฅ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

์ด๊ฒƒ์ด ์ผ๊ธ‰์ปฌ๋ ‰์…˜์˜ ๊ธ€์˜ 1๋ฒˆ์— ํ•ด๋‹น๋˜๋Š” ๋‚ด์šฉ์ด๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜, ์กฐ์˜ํ˜ธ๋‹˜์˜ ๊ฐ์ฒด์ง€ํ–ฅ ์„ธ๋ฏธ๋‚˜์˜ 1์‹œ๊ฐ„ 23๋ถ„ 15์ดˆ๊ฒฝ์„ ๋ณด๋ฉด ๊ฐ ๊ฐ์ฒด์— ์žˆ๋Š” validate ๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๋Š” Validator ๋ฅผ ๋งŒ๋“œ์‹ ๋‹ค.

๊ทธ๋ฆฌ๊ณ , validate ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๋Š” ์ด ์„ค๊ณ„(Validator)๋Š” ํฉ์–ด์ ธ ์žˆ๋Š” validate ๋“ค์„ ๋ฌถ์„ ์ˆ˜ ์žˆ๊ธฐ์— ์ข‹๋‹ค๊ณ  ๋ง์”€ํ•˜์‹ ๋‹ค.

validate ๊ฐ€ ํฉ์–ด์ ธ ์žˆ๋‹ค๋ฉด ์ „์ฒด์ ์ธ ๋กœ์ง์˜ ํ”Œ๋กœ์šฐ์„ ๋†“์น  ์ˆ˜ ์žˆ๊ณ , ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋Š”์ง€ ์–ด๋ ต๋‹ค๊ณ  ํ•œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ƒ์„ฑ์ž์—์„œ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฒ€์ฆ ๋กœ์ง๋“ค์„ ๋ชจ์•„ ๋†“์€ Validator ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ๋” ์ข‹์€ ์„ค๊ณ„์ผ๊นŒ?

โœ… Wrapping์€ ์–ด๋””๊นŒ์ง€ ํ•˜๋Š”๊ฐ€?

์œ„ ์˜ˆ์‹œ์— ์žˆ๋Š” List<Integer> numbers ์— ํ•ด๋‹นํ•˜๋Š” Integer๋„ Wrapping์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

List<Integer> numbers ๋ฅผ List<Number> numbers ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๋Š” ์–˜๊ธฐ์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, Wrapping์„ ํ•ด์•ผ ํ• ๊นŒ? ๋ง์•„์•ผ ํ• ๊นŒ?

 

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ๋‚˜๋Š” List ์•ˆ์— ์žˆ๋Š” ์ˆซ์ž๋“ค์„ Number ๋กœ Wrapping ์„ ํ–ˆ๋‹ค.

์™œ๋ƒํ•˜๋ฉด Number ๊ฐ์ฒด์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ˆซ์ž๋“ค์€ 1~9์‚ฌ์ด์˜ ์ˆซ์ž์ž„์„ ๋ณด์žฅํ•˜๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

public class GameNumber{
    private final List<Number> numbers;
    
    public GameNumber(List<Number> numbers){
        validate(numbers);
        this.numbers = numbers;
    }
    ... ๋‹ค๋ฅธ ๋กœ์ง๋“ค ...
    
    private void validate(List<Number> numbers){
        1. ์ค‘๋ณต๋˜๋Š”์ง€ ์—ฌ๋ถ€
        2. ์„ธ ์ž๋ฆฌ์ˆ˜์ธ์ง€ ์—ฌ๋ถ€
    }
}

public class Number{
    private final int value;
    
    public Number(int value){
        validate(value);
        this.value = value;
    }
    
    private void validate(int value){
        1. ์ˆซ์ž๊ฐ€ 1~9์‚ฌ์ด์ธ์ง€ ์—ฌ๋ถ€
    }
}

์ด๋กœ ์ธํ•ด GameNumber ์— ์žˆ๋˜ "๊ฐ ์ˆซ์ž๋Š” 1~9์‚ฌ์ด ์ธ์ง€ ํ™•์ธ" ํ•˜๋Š” ๊ฒ€์ฆ ์กฐ๊ฑด์€ Number ์—๊ฒŒ๋กœ ์˜ฎ๊ฒจ์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.

* [๋ฐ”๋€ ๊ฒ€์ฆ ์กฐ๊ฑด]

GameNumber : ๊ฐ ์ˆซ์ž๊ฐ€ ์ค‘๋ณต๋˜๋Š”์ง€ ํ™•์ธ, ์„ธ ์ž๋ฆฌ ์ˆ˜ ์ธ์ง€ ํ™•์ธ

Number : ๊ฐ ์ˆซ์ž๊ฐ€ 1~9์ธ์ง€ ํ™•์ธ

 

์ด์ œ Number ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋“ค์€ 1~9์‚ฌ์ด์˜ ์ˆซ์ž๋ฅผ ์ด์šฉํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ๋˜์—ˆ๋‹ค.

* ์ง€๊ธˆ๊นŒ์ง€์˜ ๋‚ด์šฉ์ด ์ดํ•ด๊ฐ€ ์ž˜ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด ํฌ๋น„๋‹˜์ด ์ง„ํ–‰ํ•˜์‹  ๋ฆฌํŒฉํ† ๋ง ์˜์ƒ์˜ 45๋ถ„ ๊ฒฝ์— ๋‚˜์˜ค๋Š” Positive ๊ด€๋ จ ์„ค๋ช…์„ ์ถ”์ฒœํ•œ๋‹ค!

์ด ์„ค๋ช…์—์„œ ๋‚˜๋Š” Positive๊ฐ€ 0 ์ด์ƒ์˜ ์ˆซ์ž๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฐ์ฒด์ž„์ด ๋ณด์žฅ๋œ๋‹ค๊ณ  ์ดํ•ดํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, Wrapping ์„ ๊ผญ ํ•ด์•ผ ํ• ๊นŒ? ๊ทธ๋ƒฅ ๋ƒ…๋‘๋ฉด ์•ˆ๋˜๋‚˜?

๊ทธ๋ ‡๋‹ค๋ฉด, ์ŠคํŠธ๋ผ์ดํฌ์™€ ๋ณผ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” Result ์˜ ํ•„๋“œ์ธ int ballCount ์™€ int strikeCount ๋„ Wrapping ํ•ด์•ผ ํ• ๊นŒ?

 

๋‚˜๋Š” ballCount ์™€ strikeCount ๋ฅผ ํ†ตํ•ด ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ๋ถ€ํ„ฐ ๋ณด์žฅํ•˜๊ณ  ์‹ถ์€ ๊ฐ’์€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Wrapping ํ•˜์ง€ ์•Š๊ณ  ์›์‹œ ํƒ€์ž…์œผ๋กœ ๋‘์—ˆ๋‹ค.

 

๋ฌผ๋ก , ๋‚˜์™€ ๋‹ค๋ฅธ ์„ค๊ณ„๋ฅผ ํ•œ ๋ˆ„๊ตฐ๊ฐ€๋Š” Number ๋ฅผ Wrapping ํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ด๋‹ค.

์˜คํžˆ๋ ค, ๋ณผ ๊ฐœ์ˆ˜์™€ ์ŠคํŠธ๋ผ์ดํฌ ๊ฐœ์ˆ˜๋ฅผ Wrapping ํ–ˆ์„ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด Wrapping์„ ์–ด๋””๊นŒ์ง€ ํ•ด์•ผ ์ข‹์€ ์„ค๊ณ„๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„๊นŒ?

โœ… ์ž…๋ ฅ๊ฐ’์˜ ๊ฒ€์ฆ์€ ์–ด๋””์„œ ํ•˜๋Š”๊ฐ€?

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๊ฐ’์˜ ํƒ€์ž…์€ String ์ด๋‹ค. 

 

GameNumber ๊ฐ€ String ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์„œ ์ˆซ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ง๊ด€์ ์ด์ง€ ์•Š์„ ๋ฟ๋”๋Ÿฌ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์ฑ…์ž„ ์ด์™ธ์— ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•˜๋Š” ์ฑ…์ž„๋„ ๊ฐ–๊ฒŒ ๋œ๋‹ค. (String ํƒ€์ž… → List<Integer> ํƒ€์ž…) 

 

๋˜ํ•œ, validate ๋„ ์ˆซ์ž๋ฅผ ๊ฒ€์ฆํ•ด์•ผ ํ•˜๋Š”๋ฐ String ํƒ€์ž…์„ ์ด์šฉํ•ด์„œ ๊ฒ€์ฆํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ง๊ด€์ ์ด์ง€ ์•Š๋‹ค.(์„œ๋กœ ๋‹ค๋ฅธ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— GameNumber๋Š” int ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ String ํƒ€์ž…์ด๋‹ค.)

public class GameNumber{
    private final List<Integer> numbers;
    
    public GameNumber(String input){
        validate(input);
        this.numbers = Arrays.stream(input.split(""))
            .map(Integer::parseInt)
            .collect(toList());
    }
    
    private void validate(String input){
        1. ์ค‘๋ณต๋˜๋Š”์ง€ ์—ฌ๋ถ€
        2. ์ž…๋ ฅ๊ฐ’์˜ ๊ธธ์ด๊ฐ€ ์„ธ ์ž๋ฆฌ์ธ์ง€ ์—ฌ๋ถ€
    }
}

๊ทธ๋ ‡๊ธฐ์— GameNumber ์—๊ฒŒ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์ธ String ํƒ€์ž…์„ ๊ทธ๋Œ€๋กœ ๋„˜๊ฒจ์ฃผ์ง€ ๋ง๊ณ , ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ String ์„ List<Integer> ๋กœ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•ด์„œ ์ค˜์•ผ ํ•œ๋‹ค.

 

๋‚˜๋Š” ์ด๊ฒƒ์„ GameNumberFactory ์—์„œ ์ง„ํ–‰ํ•ด์ฃผ์—ˆ๊ณ , ๋™์‹œ์— ์ž…๋ ฅ๊ฐ’์ด ์ˆซ์ž๋กœ ๋ณ€ํ™˜ ๋  ์ˆ˜ ์žˆ๋Š”์ง€๋„ ๊ฒ€์ฆํ•ด์ฃผ์—ˆ๋‹ค.

public class GameNumberFactory(){
    public static GameNumber createNumber(String input){
        validate(input); // ์ž…๋ ฅ๊ฐ’์ด ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋˜๋Š”์ง€ ๊ฒ€์ฆ, ๋ณ€ํ™˜์ด ์•ˆ๋œ๋‹ค๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ
        return GameNumber.from(generateNumbers(input)); // String ํƒ€์ž…์„ List<Integer> ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
    }
    
    // ์ž…๋ ฅ๊ฐ’์ด ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์ฆ
    private void validate(String input){
        try {
            Integer.parseInt(input);
        catch (NumberformatException e) {
            throw new Illegal~~;
        }
    }
}

์ด ๋•Œ, DTO๊ฐ€ ์ˆœ๊ฐ„์ ์œผ๋กœ ๋– ์˜ฌ๋ž๊ณ , DTO์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ํ•™์Šตํ•œ ๊ฒฐ๊ณผ๋กœ, ๋งŒ์•ฝ์— ๋‚ด๊ฐ€ DTO ๋ฅผ ์ฝ”๋“œ์— ์ ์šฉํ•  ์ค„ ์•Œ์•˜๋”๋ผ๋ฉด DTO ์—์„œ ์ตœ์†Œํ•œ์˜ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ์„ ํ•˜๊ณ (์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์„ ์˜ˆ๋กœ ๋“ค๋ฉด, ์ž…๋ ฅ๊ฐ’์—์„œ ์ˆซ์ž์ž„์„ ๊ฒ€์ฆํ•˜๊ธฐ), ํƒ€์ž…์„ ๋ณ€ํ™˜ ํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

* DTO๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค ใ…œใ…œ

 

๊ทธ ์ด์œ ๋Š” DTO ์—์„œ ํ•œ๋‹ค๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ๋กœ์ง๊นŒ์ง€ ์•ˆ๊ฐ€๋„ ๋˜๋Š” ์žฅ์ ๊ณผ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›๋Š” View ๋„ ์ž…๋ ฅ๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

*DTO :  Controller ๊ณ„์ธต ์—์„œ Service ๊ณ„์ธต์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ชฉ์ ์ด๋‹ค. ๊ด€๋ จ ์˜์ƒ → ์ธ๋น„์˜ DTO vs VO

*Service ๊ณ„์ธต : ๋‚ด ์ƒ๊ฐ์€ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•  ๋•Œ, ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜(์ผ๋ จ์˜ ํ–‰๋™) ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณ„์ธต์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค.(!!์•„๋‹ ์ˆ˜๋„ ์žˆ์Œ ์ฃผ์˜!!)

 

'์ž…๋ ฅ๊ฐ’์˜ ๊ฒ€์ฆ์„ ์–ด๋””์—์„œ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?'๋Š” 6๊ธฐ ๋””์Šค์ฝ”๋“œ ๋ฐฉ์—์„œ๋„ ํ™œ๋ฐœํžˆ ์ง„ํ–‰๋์„๋งŒํผ ์˜๊ฒฌ์ด ๋งค์šฐ ๋ถ„๋ถ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ํ•œ ์ƒ๊ฐ์ด ์ •๋‹ต์€ ์•„๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋””์„œ ์ž…๋ ฅ๊ฐ’์˜ ๊ฒ€์ฆ์„ ํ•ด์•ผ ์ข‹์€ ์„ค๊ณ„์ผ๊นŒ?

โœ… ์–ด๋””์„œ ๋ถ€ํ„ฐ ๊ตฌํ˜„์„ ์‹œ์ž‘ํ• ๊นŒ? 

๊ฐ์ฒด์ง€ํ–ฅ์— ์ž…๋ฌธํ–ˆ๋‹ค๋ฉด "๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด"๋‚˜ "์˜ค๋ธŒ์ ํŠธ"๋ฅผ ์ฝ์–ด๋ดค์„ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์ด ๋‘ ์ฑ…์˜ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ํŠน์ • ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์™„์„ฑ์‹œํ‚ค๋Š” ๊ฒƒ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

 

"์˜ค๋ธŒ์ ํŠธ"์˜ ์˜ํ™” ์˜ˆ๋งค ์˜ˆ์ œ์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹ฌํŒ ๊ฐ์ฒด๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„๋„ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“œ๋Š” ์‹ฌํŒ์ด๋ž€ ๊ฐ์ฒด๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ–ˆ๋‹ค.

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด Result ๋Š” ๋ณผ ๊ฐœ์ˆ˜์™€ ์ŠคํŠธ๋ผ์ดํฌ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ–๊ณ ์žˆ๋Š” ๊ฐ์ฒด,, Computer ๋Š” ๋žœ๋ค์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ˆซ์ž, User๋Š” ์ž…๋ ฅ๊ฐ’์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋Š” ์ˆซ์ž๋กœ ๋ฉ”์„œ๋“œ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์™„์„ฑํ–ˆ๋‹ค.

public class Referee{

    public Result compare(Computer computer, User user){
        return new Result(? , ?); // ์•„๋งˆ ๋ณผ ๊ฐœ์ˆ˜, ์ŠคํŠธ๋ผ์ดํฌ ๊ฐœ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค.
    }
}

 

๊ทธ๋Ÿฌ์ž, Result, Computer, User์— ๋Œ€ํ•œ ์ˆ˜๋งŽ์€ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฅผ ๋ฐ˜๊ฒผ๊ณ , ์ด ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์ž‘์„ฑ์€ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค.

 

๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ , ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฐ์ฒด๋ฅผ ์„ ํƒํ•˜๊ณ , ๋‹ค์‹œ ๋˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ํ•˜๋Š” ๋ฐ˜๋ณต๋˜๋Š” ๊ณผ์ •์„ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฑ…์— ์žˆ๋Š” ์˜ˆ์ œ ์ฝ”๋“œ์ฒ˜๋Ÿผ ํŠน์ • ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ๋Š” ๋ถ„๋ช… ์–ด๋ ค์› ๋‹ค.

 

๊ทธ์— ๋ฐ˜ํ•ด, ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜ํ–‰ํ•  ์ตœ์†Œ ๋‹จ์œ„์ธ ๋„๋ฉ”์ธ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ํ›จ์”ฌ ์‰ฌ์› ๊ณ , ํ…Œ์ŠคํŠธํ•˜๊ธฐ์—๋„ ์šฉ์ดํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์ด ๋ฐฉ์‹์ด Bottom-Up์ด๋ž€ ๊ตฌํ˜„ ๋ฐฉ์‹์ด๋ž€ ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

Bottom-Up๊ณผ ๋Œ€๋น„๋˜๋Š” Top-Down ๋ฐฉ์‹์ด ์žˆ์—ˆ๊ณ , ์ด๋“ค์„ GPT์—๊ฒŒ ๋ฌผ์–ด๋ณด์•˜๋‹ค.

  • Top-down ๋ฐฉ์‹ ์‚ฌ์šฉ ์˜ˆ์‹œ:
    • ์ƒˆ๋กœ์šด ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ์ด๋‚˜ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ, ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ์„ ๋จผ์ € ์ดํ•ดํ•˜๊ณ  ๊ณ ์ˆ˜์ค€์˜ ์„ค๊ณ„๋ฅผ ์ˆ˜๋ฆฝํ•  ๋•Œ.
    • ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ๊ณ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ๋“ค์„ ๋จผ์ € ์ •์˜ํ•˜๊ณ  ์ด๋“ค ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ณ ๋ คํ•  ๋•Œ.
  • Bottom-Up ๋ฐฉ์‹ ์‚ฌ์šฉ ์˜ˆ์‹œ:
    • ์ด๋ฏธ ์ •์˜๋œ ์‹œ์Šคํ…œ์ด๋‚˜ ๋ชจ๋“ˆ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ, ๊ธฐ์กด ๋ชจ๋“ˆ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋จผ์ € ๊ณ ๋ คํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ.
    • ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ๋Š” ์ „์ฒด์ ์ธ ์•„์ด๋””์–ด๊ฐ€ ๋šœ๋ ทํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋จผ์ € ์ž‘์€ ๋‹จ๊ณ„๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•  ๋•Œ.

์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์„  Bottom-Up ๋ฐฉ์‹์œผ๋กœ ์„ค๋ช…ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

Number(int value)  → GameNumber(List<Number>)  → GameNumberFactory(new GameNumber) ์ˆœ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

1~9์‚ฌ์ด์˜ ์ˆซ์ž๋ฅผ ๋ณด์žฅํ•˜๋Š” Number๋ฅผ ๋จผ์ € ๋งŒ๋“ค๊ณ , ์ด Number ๋ฅผ ์„ธ ์ž๋ฆฌ ์ˆ˜๋กœ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” GameNumber๋ฅผ ๋งŒ๋“ค๊ณ , ์ด GameNumber๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์ธ GameNumberFactory ์ˆœ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

๋‚˜๋Š” ์ด ๋ฐฉ์‹์ด ํ•ต์‹ฌ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ๋„ ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ์‹์„ ์ด์šฉํ•˜๊ณ ์ž ํ–ˆ๋‹ค!

 

์ฆ‰, ์„ค๊ณ„๋Š” ์˜ค๋ธŒ์ ํŠธ์™€ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด์—์„œ ๋งํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด์„œ ์‹œ์ž‘ํ•ด์„œ Top-Down ์„ ์ด์šฉํ•˜๊ณ ,

๊ตฌํ˜„์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜ํ–‰ํ•  ์ตœ์†Œ ๋‹จ์œ„๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๋Š” Bottom-Up์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ด๋‹ค.

 

๋˜ํ•œ, ์ด ๋ฐฉ์‹์€ ์šฐ์•„ํ•œ ATDD(1์‹œ๊ฐ„ 5๋ถ„ 30์ดˆ~ 1์‹œ๊ฐ„ 9๋ถ„)์—์„œ๋„ ์†Œ๊ฐœ๋œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ๊นจ์šฐ์นœ ๋ฐฉ์‹์— ๋”์šฑ ๋” ๋ฏฟ์Œ์ด ๊ฐ”๋‹ค.

 

์ตœ์†Œ ๋‹จ์œ„์˜ ๋„๋ฉ”์ธ์ด Number ์ธ์ง€ ์–ด๋–ป๊ฒŒ ์•Œ์ง€? ๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค๋ฉด, ํ”„๋ฆฌ์ฝ”์Šค์—์„œ ์š”๊ตฌํ•˜๋Š” ๊ฐ์ฒด ๋ถ„๋ฆฌ์™€ ํ•จ์ˆ˜ ๋ถ„๋ฆฌ๋ฅผ ๊ณ„์† ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋ผ๋Š” ๋ง์”€์„ ๋“œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

์ € ๋˜ํ•œ ์—ด์‹ฌํžˆ ๊ฐ์ฒด๋ถ„๋ฆฌ ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ , ํ•จ์ˆ˜๋ถ„๋ฆฌ๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์ง€์‹์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋Š˜์–ด๋‚ฌ๋‹ค.

(๋ฌผ๋ก , ์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„๋งŒ 2์ฃผ๋™์•ˆ ์ณ๋‹ค๋ด์„œ ๊ทธ๋Ÿฐ ๊ฑฐ์ผ ์ˆ˜๋„ ์žˆ๋‹ค๐Ÿ˜‚)

 

๋„๋ฉ”์ธ ์ง€์‹์ด ์‰ฝ๊ฒŒ ์–ป์–ด์ง€์ง„ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๊ฐ์ฒด ๋ถ„๋ฆฌ๋ฅผ ํ•˜๊ณ , ํ•จ์ˆ˜ ๋ถ„๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด  ํฌ๋น„๋‹˜์ด ์ง„ํ–‰ํ•˜์‹  ๋ฆฌํŒฉํ† ๋ง ์˜์ƒ๋งŒ ์ •๋ง 7๋ฒˆ ์ด์ƒ์€ ๋ณธ ๊ฒƒ ๊ฐ™๋‹ค.

* 7๋ฒˆ์„ ๋ณด๋ฉด์„œ ๋Š๋‚€ ๊ฒƒ์ด '์•„๋Š” ๋งŒํผ ๋ณด์ธ๋‹ค' ๋ผ๋Š” ๋ง์ฒ˜๋Ÿผ ์•„๋Š” ๊ฒƒ์ด ์Œ“์ผ์ˆ˜๋ก ๋˜‘๊ฐ™์€ ์˜์ƒ์ด์—ˆ์ง€๋งŒ ์–ป๋Š” ๊ฒƒ์ด ๋งค๋ฒˆ ๋‹ฌ๋ผ์กŒ๋‹ค.

 

์ด ์™ธ์—๋„ ๋งŽ์€ ์ •๋ณด๋ฅผ ์ฐพ๊ณ , ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ , ๊ฐ์ข… ์˜์ƒ์„ ๋ณด๋ฉฐ ๋„๋ฉ”์ธ ์ง€์‹์„ ์–ป๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ–ˆ๋‹ค.

โœ… ๋Œ๊ณ  ๋Œ์•„ ์ข‹์€ ์„ค๊ณ„์— ์ •๋‹ต์€ ์—†๋‹ค๋ฅผ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ฐพ๋Š” ๊ณผ์ •์—์„œ ์ƒ๊ฒผ๋˜ ์ข‹์€ ์„ค๊ณ„๋ž€ ๋ฌด์—‡์ผ๊นŒ?

์ •๋‹ต์„ ์ฐพ๊ณ ์ž ๋…ธ๋ ฅํ–ˆ์ง€๋งŒ ๊ฒฐ๋ก ์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. ์ •๋‹ต์€ ์—†๋‹ค.

 

์˜ค๋ธŒ์ ํŠธ์—์„œ๋„, ์กฐ์˜ํ˜ธ๋‹˜์˜ ์„ธ๋ฏธ๋‚˜ ์˜์ƒ์—์„œ๋„ ์ฝ”๋“œ์— ์ •๋‹ต์€ ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

์ข‹์€ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ์ •๋‹ต์€ ์—†๊ณ , ๋‹จ์ง€ ์ฝ”๋“œ๋Š” trade-off์˜ ์‚ฐ๋ฌผ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ฒƒ์„ ๊ฐ์ˆ˜ํ•˜๊ณ  ์–ด๋–ค ๊ฒƒ์„ ๋Š˜๋ฆด ๊ฑด์ง€ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ๊ทธ์ € '์ ์ ˆํ•˜๊ฒŒ' ํ•ด์•ผํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

* trade-off : ๋‘ ๊ฐ€์ง€ ์ด์ƒ์˜ ๋Œ€๋ฆฝ์ ์ธ ์š”์†Œ๋‚˜ ๊ฐ€์น˜ ์‚ฌ์ด์—์„œ ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์–ด๋–ค ํ•œ ๊ฐ€์ง€๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ์ธก๋ฉด์—์„œ ์–ด๋–ค ๊ฒƒ์„ ํฌ๊ธฐํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ

 

์ด '์ ์ ˆํ•˜๊ฒŒ' ๋ž€ ์ฃผ๊ด€์ ์ธ ๋‹จ์–ด๋Š” ์ข‹์€ ์ฝ”๋“œ, ์ข‹์€ ์„ค๊ณ„๋ฅผ ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์ž…๋ฌธ์ž์ธ ๋‚ด๊ฒŒ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜๋‹ค.

 

ํ•˜์ง€๋งŒ, ์ง€๊ธˆ์€ "์„ค๊ณ„๋Š” ์ ์ ˆํ•ด์•ผํ•œ๋‹ค"๋Š” ๋ง์— ์ ์ฐจ ๊ณต๊ฐํ•˜๊ณ  ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , '์ ์ ˆํ•˜๊ฒŒ'๋ผ๋Š” ๋ง์— ๊ณต๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ!! ๋น„๋กœ์†Œ ์ข‹์€ ์„ค๊ณ„๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ ์ ˆํ•˜๊ฒŒ ์„ค๊ณ„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ๋…ธ๋ ฅ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋ดค๋‹ค.

 

1. '์ฝ”๋“œ๋ฅผ ์™œ ์ด๋ ‡๊ฒŒ ์งฐ๋Š”๊ฐ€?' ๋ฅผ ์•„๋Š” ๊ฒƒ. ์Šค์Šค๋กœ์˜ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. 

2. "๊ณ ๋ฏผ ๋์— ๊ฒฐ์ •ํ•œ ๋‚ด ์„ค๊ณ„๊ฐ€ ์˜ณ์•„!!" ๋ผ๋Š” ์ƒ๊ฐ ๋ฒ„๋ฆฌ๊ธฐ. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์˜๊ฒฌ์„ ๋ฌผ์–ด ๋‹ค์–‘ํ•œ ๊ด€์ ์„ ์–ป๊ธฐ

3. ์ƒˆ๋กœ์šด ์„ค๊ณ„ ๋ฐฉ์‹์„ ๋ฐฐ์šธ ๋•Œ, ๋‚ด ๊ธฐ์กด ์„ค๊ณ„ ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฐฉ์‹์„ ๋„์ž…ํ•˜๋ฉด ์–ด๋–ค ์žฅ์ ์ด ์žˆ์„์ง€ ๊ผญ!! ์ƒ๊ฐํ•ด๋ณด๊ธฐ

 

(๋ถ€ํŠธ์บ ํ”„์—์„œ ์‹ค๋ฌด ํ˜„์—…์ž๋“ค์—๊ฒŒ ํ”ผ๋“œ๋ฐฑ ๋ฐ›๋Š”๊ฒŒ ์ตœ๊ณ ๊ฒ ์ง€๋งŒ.. ๋ชป๋ฐ›๋Š”๋‹ค๋ฉด ๋ชป๋ฐ›๋Š”๋Œ€๋กœ ์•„์‰ฝ์ง€๋งŒ ๋‚˜์•„๊ฐ€์•ผ์ง€!)

 

์ข‹์€ ์„ค๊ณ„, ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด โœ…์— ๋Œ€ํ•ด ์Šค์Šค๋กœ ์ƒ๊ฐํ•˜๊ณ  ๊ธฐ์ค€์„ ๋‚ด๋ ค๋ณด์•˜๋‹ค.

๊ธฐ์ค€์— ๋Œ€ํ•œ ์ •๋‹ต์ด ์—†์—ˆ๊ธฐ์— ๊ธฐ์ค€์„ ๋‚ด๋ฆฌ๊ธฐ ๊นŒ์ง€ ์ •๋ง ๋ง‰๋ง‰ํ–ˆ์ง€๋งŒ, ์‚ฝ์งˆํ•œ ๋งŒํผ ์„ฑ์žฅํ–ˆ๋‹ค๋Š” ํ™•์‹ ์ด ๋“ ๋‹ค!

 

๊ทธ๋ ‡๊ฒŒ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์˜๋ฏธ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์—์„œ ๋งŽ์€ ๊ฒƒ์„ ๊นจ๋‹ซ๊ณ  ์–ป๊ฒŒ ๋˜์—ˆ๋‹ค.