ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ€ ๊ณ ๋ คํ•œ ๋ถ€๋ถ„๋“ค

1. ํ…Œ์ŠคํŠธ ๋„ค์ด๋ฐ ๊ทœ์น™

https://dzone.com/articles/7-popular-unit-test-naming

 

7 Popular Strategies: Unit Test Naming Conventions - DZone Agile

 

dzone.com

github discussion ์—์„œ ํ•œ ๋ถ„์ด ๊ณต์œ ํ•ด์ฃผ์…”์„œ ์ฐธ๊ณ ํ–ˆ๋˜ ๊ธ€์ด๋‹ค.

 

์ด์ „๊นŒ์ง€๋Š” ํ…Œ์ŠคํŠธ์ฝ”๋“œ์˜ ๋ฉ”์„œ๋“œ๋ช…๊นŒ์ง€ ์‹ ๊ฒฝ์จ์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ๋ชปํ•ด์„œ ๋ณ„๋‹ค๋ฅธ ๋„ค์ด๋ฐ ๊ทœ์น™ ์—†์ด ๋– ์˜ค๋ฅด๋Š” ๋Œ€๋กœ ๋ฉ”์„œ๋“œ๋ช…์„ ์ง€์—ˆ์—ˆ๋‹ค. ๊ทธ๋‚˜๋งˆ ๊ทœ์น™์ด ์žˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ๋ฉ”์„œ๋“œ๋ช…์˜ ํ˜•ํƒœ๋Š” check + ํ™•์ธํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ช…์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ด๋ ‡๊ฒŒ ๋  ๊ฒฝ์šฐ์—๋Š”

1. ๋ฉ”์„œ๋“œ๋ช…์„ ๋ฆฌํŒฉํ† ๋งํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ์˜ ์—ญํ• ์„ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ์ฝ”๋“œ์˜ ๋ฉ”์„œ๋“œ๋ช…๋„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์—ˆ๋‹ค.

2. ๋˜ํ•œ, ์ด๋Ÿฐ ์˜ค๋ฅ˜๋“ค์€ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋„ ์•„๋‹ˆ๋ผ์„œ ๋‚ด๊ฐ€ ์ผ์ผ์ด ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•ด์•ผ ํ•ด์„œ ๋†“์น˜๊ธฐ ์‰ฝ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ด๋ฒˆ ์ฃผ์ฐจ์—๋Š”, ์•„๋ž˜์˜ ๊ทœ์น™์„ ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ฅผ ๋„ค์ด๋ฐํ–ˆ๋‹ค. 

is + ํ…Œ์ŠคํŠธํ•  ๊ธฐ๋Šฅ + (์ธ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด) with ____ ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค. 

 

 

2. ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž์—ด์„ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•ด๋ณด์ž

 

์ด์ „์ฃผ์ฐจ์—์„œ๋Š” [ERROR] ์ด๋ผ๋Š” prefix ๋ฅผ ์ƒ์ˆ˜๋กœ ๋‘๊ณ  ๋‹จ์ˆœ ๋ฌธ์ž์—ด ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์„ ํ†ตํ•ด์„œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ •๋ง ์ด๊ฐ€ ์ตœ์„ ์ผ์ง€ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฒˆ ์ฃผ์ฐจ์—๋Š” ErrorStatus ๋ผ๋Š” Enum ์„ ๋‘๊ณ , message ๋ผ๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋‘์–ด ๋ฌธ๊ตฌ ๋ฐ˜ํ™˜ ์‹œ์— [ERROR] ์„ ๋ถ™์—ฌ์„œ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ, ์ถœ๋ ฅ ํ˜•ํƒœ๋Š” ์ง€ํ‚ค๋ฉด์„œ๋„ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ž์ฒด์— ๋Œ€ํ•œ ์ˆ˜์ •๊ณผ ํ•˜๋“œ ์ฝ”๋”ฉ ์—†์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

package bridge.validator;

public enum ErrorStatus {
    BRIDGE_SIZE_TYPE_ERROR("๋‹ค๋ฆฌ ๊ธธ์ด๋Š” ์ •์ˆ˜๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค."),
    BRIDGE_SIZE_RANGE_ERROR("๋‹ค๋ฆฌ ๊ธธ์ด๋Š” 3๋ถ€ํ„ฐ 20 ์‚ฌ์ด์˜ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."),
    BRIDGE_SIZE_BLANK_ERROR("๋‹ค๋ฆฌ ๊ธธ์ด๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๋‘˜ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."),
    DIRECTION_SIGN_ERROR("์ด๋™ํ•  ์นธ์€ U ํ˜น์€ D ๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค."),
    GAME_COMMAND_SIGN_ERROR("์žฌ์‹œ์ž‘ ์—ฌ๋ถ€๋Š” R ํ˜น์€ Q๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.");

    private final String message;

    ErrorStatus(String message) {
        this.message = message;
    }

    public String getMessage() {
        return "[ERROR] " + this.message;
    }
}

 

3. static ํ‚ค์›Œ๋“œ๋ฅผ ํ•จ๋ถ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ

 

์ด๋ฒˆ ์ฃผ์ฐจ์—์„œ ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค ์ธก์—์„œ ๋ฏธ๋ฆฌ ์ฃผ์–ด์ง„ ํด๋ž˜์Šค๊ฐ€ ์ด์ „ ์ฃผ์ฐจ๋ณด๋‹ค ํ™•์—ฐํžˆ ๋งŽ์•˜๊ณ , ์ œํ•œ ์‚ฌํ•ญ๋„ ๋Š˜์–ด๋‚ฌ๋‹ค. ์ด ์ค‘ ๊ฐ€์žฅ ์ธ์ƒ์ ์ด์—ˆ๋˜ ๊ฒƒ์€ OutputView ์™€ InputView ๋ฅผ static ๋ฉ”์„œ๋“œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•œ ๊ฒƒ์ด์—ˆ๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ์—๋Š” ์ด์ „๊นŒ์ง€๋Š” ๋ชจ๋ธ, ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ๊ฑฐ์˜ ๋‹ค static ์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ๋‘๊ณ  ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ œํ•œ ์‚ฌํ•ญ์„ ๋ณด๋ฉฐ static ์„ ๋‚จ๋ฐœํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ๊ฒƒ์ด์—ˆ๊ฒ ๊ตฌ๋‚˜. ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ static ํ‚ค์›Œ๋“œ๊ฐ€ ์–ด๋–ค ๋‹จ์ ์ด ์žˆ์„์ง€ ์ฐพ์•„๋ณด์•˜๋‹ค.

 

https://velog.io/@yyy96/static

 

static ๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ์  ๊ด€์ 

static ์— ๊ด€ํ•˜์—ฌ. ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ”๊ฐ€ static์„ ์ง€์–‘ํ•˜๋Š” ์ด์œ ๋Š”?

velog.io

 

1. ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„

2. ์บก์Аํ™”์— ์œ„๋ฐ˜๋˜๋Š” ํ‚ค์›Œ๋“œ

- ์บก์Аํ™”๋Š” ํ•œ ๊ฐ์ฒด๊ฐ€ ์ง€๋‹ˆ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ „์—ญ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์—†๋‹ค.

3. ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. (interface ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์—†์Œ)

 

๋”ฐ๋ผ์„œ ์ด๋ฒˆ ์ฃผ์ฐจ์—๋Š”, static ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ์„ ์ค„์ด๊ณ  ์ตœ๋Œ€ํ•œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ๊ฐ์ฒด๋“ค์„ ์ฃผ์ž…๋ฐ›์•„ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ–ˆ๋‹ค. ๋˜ํ•œ, InputView, OutputView ์˜ ๊ฒฝ์šฐ์—๋Š” ํ˜„์žฌ๋Š” ๋‹จ ๋‘๊ฐœ๋งŒ์˜ view ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— static ์œผ๋กœ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๊ด€ํ–ˆ์—ˆ์ง€๋งŒ(๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค.) ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋˜๊ณ  view ๋„ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋  ๊ฒฝ์šฐ์—๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋งˆ๋‹ค ์•Œ๋งž๋Š” view ๋ฅผ ์ฃผ์ž…์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ์ด ๋งž๋Š” ์ˆ˜์ˆœ์ด๋ผ๋Š” ์ƒ๊ฐ๋„ ํ–ˆ๋‹ค.

 

4. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ

 

์š”๊ตฌ ์‚ฌํ•ญ์ด์—ˆ๋˜ ๋ฉ”์„œ๋“œ์˜ ๊ธธ์ด๊ฐ€ 10๋ผ์ธ์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ธฐ ๋ผ๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์„ ๊ฑฐ์ณค๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฝ‘์•„๋‚ด์–ด ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์ด ๊ณผ์ •์—์„œ validator/ ์˜ ํด๋ž˜์Šค๋“ค์„ ์ธ์ž๋กœ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋˜์—ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๊ณ ๋ฏผ์„ ํ–ˆ๋˜ ๊ฒƒ์ด, validator ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•˜๋Š”๊ฐ€? ์˜€๋‹ค. ์ฝ”๋“œ๋„ ๋˜‘๊ฐ™์€๋ฐ ๋‹จ์ˆœํžˆ ์ธ์ž๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ์ด์œ ๋กœ ๊ทธ๋Ÿฐ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? ํ•˜๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ Validator ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‘๊ณ , BridgeSizeValidator, DirectionValidator, GameCommandValidator ๋“ค์ด ๋ชจ๋‘ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ, ์ธ์ž๋ฅผ Validator ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฌถ์–ด์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

private String readInputValue(Validator validator) {
        String inputValue;
        do {
            inputValue = Console.readLine();
        } while (!validateInputValue(inputValue, validator));
        return inputValue;
    }

๋˜ํ•œ, ๊ธฐ์กด์˜ ํ•ด๋‹น validator ํด๋ž˜์Šค๋“ค์€ ๋ชจ๋‘ validate ๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ validate ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ฒŒ ํ–ˆ๋‹ค.

 

public interface Validator {
    void validate(String input);
}

 

5. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ์‹œ body ๋ฅผ ์ ๊ทน ํ™œ์šฉ

 

์ด๋ฒˆ ์ฃผ์ฐจ์—๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— body ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ์ž‘์„ฑํ•˜๊ณ ์ž ํ–ˆ๋‹ค. 

 

ํŠนํžˆ refactor ์˜ ๊ฒฝ์šฐ, ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ•  ๋‹น์‹œ์—๋Š” ๋ฆฌํŒฉํ† ๋ง์˜ ์ด์œ ๊ฐ€ ํƒ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ์ง„ํ–‰ํ•˜์ง€๋งŒ ์ถ”ํ›„์— ๋‹ค์‹œ ๋“ค์—ฌ๋‹ค๋ดค์„ ๋•Œ์—๋Š” ์–ด๋–ค ๋ถ€๋ถ„์ด ์–ด๋–ค ์ด์œ ๋กœ ์ˆ˜์ •๋๋Š”์ง€ ์ž˜ ํŒŒ์•…๋˜์ง€ ์•Š์•˜์—ˆ๊ธฐ์— ์ด๋ฒˆ์ฃผ์ฐจ์—๋Š” ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์ด ์ž์„ธํ•˜๊ฒŒ body๋ฅผ ์ž‘์„ฑํ•˜๊ณ ์ž ๋…ธ๋ ฅํ–ˆ๋‹ค.

 

5. @ParameterizedTest ๋ฅผ ์ด์šฉ

ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋„ ์ฝ”๋“œ๋‹ค ๋ผ๋Š” ์ง€๋‚œ ์ฃผ์ฐจ ํ”ผ๋“œ๋ฐฑ์„ ํ™•์ธํ•˜๊ณ , ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ง€์–‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ”ผ๋“œ๋ฐฑ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ–ˆ๋‹ค. 

 

๐Ÿ€ ์†Œ๊ฐ๋ฌธ

 

์ด๋ฒˆ ์ฃผ์ฐจ์™€ ์ €๋ฒˆ ์ฃผ์ฐจ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์œผ๋กœ ๋А๋‚€ ๊ฒƒ์€ ์ œ์•ฝ์‚ฌํ•ญ์ด ๋งŽ์•„์กŒ๋‹ค๋Š” ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

1. ๋ฏธ๋ฆฌ ์ฃผ์–ด์ง„ ์ฝ”๋“œ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์•„์กŒ๋‹ค.

2. ๋ฉ”์„œ๋“œ ๋ผ์ธ์„ 10์ค„ ์ด๋‚ด๋กœ ์ œํ•œํ•ด์•ผ ํ•œ๋‹ค.

 

๊ทธ ์ค‘, ์ฒซ๋ฒˆ์งธ์™€ ๊ด€๋ จํ•˜์—ฌ ์ด๋ฒˆ ์ฃผ์ฐจ์— ํ•™์Šตํ•œ ๊ฒƒ์€ static ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ์„ ์ž์ œํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„ , ์ด์ „ ์ฃผ์ฐจ๊นŒ์ง€๋Š” controller ์™€ model ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋‘ static ๋ฉ”์„œ๋“œ๋กœ ๋‘์–ด ๊ฐ์ฒด๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•ด์™”์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์™”๋˜ ์ด์œ ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์ด๊ณ , ํด๋ฆฐ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ 3๊ฐœ ์ด๋‚ด๋กœ ๋‘๋Š” ๊ฒƒ์ด ์ข‹์€๋ฐ ํ•ด๋‹น ๊ฐ์ฒด๊นŒ์ง€ ๋ชจ๋‘ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ๋‘๊ฒŒ ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์งˆ ๊ฒƒ์„ ์šฐ๋ คํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ด๋ฒˆ์ฃผ์ฐจ์—๋Š” ํŠนํžˆ view ์— ์†ํ•œ ๋ฉ”์„œ๋“œ๋“ค์„ static ๋ฉ”์„œ๋“œ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์–ด ์žˆ์–ด ์™œ ์ด๋ ‡๊ฒŒ ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค ์ธก์—์„œ ์ œํ•œ ์‚ฌํ•ญ์„ ๋‘์—ˆ์„์ง€ ๊ณ ๋ฏผํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. static ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜น์‹œ ์น˜๋ช…์ ์ธ ๋‹จ์ ์„ ์•ˆ๊ณ ์žˆ๋‚˜? ํ•˜๊ณ  ์ฐพ์•„๋ณด๋ฉฐ ์ด๊ฐ€ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ด์ง€ ์•Š์Œ์„ ํ•™์Šตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ๋Œ€ํ•œ ์ด๋ฅผ ์ง€์–‘ํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์งœ๊ณ ์ž ๋…ธ๋ ฅํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, 10์ค„ ์ด๋‚ด๋กœ ๋ฉ”์„œ๋“œ ๋ผ์ธ์„ ์ค„์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ๊ณตํ†ต์ ์ธ ์ฝ”๋“œ๋ฅผ ๋ฝ‘์•„๋‚ด๋Š” ์—ฐ์Šต์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ํด๋ž˜์Šค๋“ค์„ ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ๋ฌถ์–ด ์ธ์ž๋กœ ๋ฐ›์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๋Š” ํด๋ž˜์Šค๋“ค์ด๋ผ๋Š” ํŠน์„ฑ์„ ์‚ด๋ ค ํ•ด๋‹น ํด๋ž˜์Šค๋“ค์ด ๋ชจ๋‘ ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ๊ณ  ํด๋ž˜์Šค์˜ ๋ถ„๋ฆฌ์™€ ๋ช…ํ™•ํ•œ ์—ญํ• ์˜ ๋ถ„๋ฅ˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋”ฐ์ ธ ๋ดค์„ ๋•Œ๋„ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค๋“ค์ด ๊ฐ™์€ ํ˜•ํƒœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ด๋Ÿฐ ์ด์œ ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ตฌ๋‚˜ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

 

์ด๋ ‡๊ฒŒ ๋ฆฌํŒฉํ† ๋ง์„ ๊ฑฐ์น˜๋Š” ๊ณผ์ •์—์„œ ํ•™์Šตํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•˜์œผ๋‚˜ ์–ด๋–ค ์ด์œ ๋กœ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ–ˆ๊ณ , ์–ด๋–ค ๋ถ€๋ถ„์ด ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€ ๊นŒ๋จน๊ธฐ ์ผ์‘ค์˜€์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฒˆ ์ฃผ์ฐจ์—๋Š” ๊นƒํ—™ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ๋ฐ”๋”” ๋ถ€๋ถ„์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ์ˆ˜์ • ๋‚ด์šฉ๊ณผ ์ˆ˜์ • ์ด์œ ๋ฅผ ๋‚˜๋ฆ„๋Œ€๋กœ ์ ์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋‚ด๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ๋ฆฌํŒฉํ† ๋ง์ด ํƒ€๋‹นํ•œ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด์„œ๋„ ํ•œ๋ฒˆ ๋” ๊ณ ๋ฏผ์„ ๊ฑฐ์น˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 

 

๋˜ํ•œ ์ด๋ฒˆ์ฃผ์ฐจ์— ๋ฐฐ์šด ์ ์€, ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋„ ์ฝ”๋“œ๋‹ค. ๋ผ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์—ญ์‹œ๋„ ํšจ์œจ์ ์ธ ๊ตฌ์กฐ์™€ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๊ณ , ๋ฉ”์„œ๋“œ ๋„ค์ด๋ฐ์„ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „๊นŒ์ง€๋Š” ๋ณ„๋‹ค๋ฅธ ๊ทœ์น™์„ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ check+ํ™•์ธํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ช… ๊ณผ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ๋„ค์ด๋ฐํ•ด์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์€ ๋ฉ”์„œ๋“œ๋ช…์„ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ๋ฉ”์„œ๋“œ๋ช…๋„ ์ˆ˜์ •ํ•ด์ค˜์•ผํ–ˆ๊ณ , ์ด๋Š” ๋กœ์ง์ด ๋ฐ”๋€Œ์ง€ ์•Š์•˜์Œ์—๋„ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ์•„์ด๋Ÿฌ๋‹ˆ์™€ ๋ฒˆ๊ฑฐ๋กœ์›€์„ ๋А๋ผ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘, github discussion ์„ ํ†ตํ•ด์„œ ๋‹ค๋ฅธ ์ฐธ๊ฐ€์ž๋ถ„๊ป˜์„œ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ๋„ค์ด๋ฐ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ข‹์€ ์ž๋ฃŒ๋ฅผ ์˜ฌ๋ ค์ฃผ์‹  ๊ฒƒ์„ ํ™•์ธํ–ˆ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์—ญ์‹œ๋„ ๋„ค์ด๋ฐ ๊ทœ์น™์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ฒด๊ฐํ•˜๊ณ  ์ ์šฉํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•˜์—ฌ @ParameterizedTest ๋ฅผ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

๐Ÿ€ 4์ฃผ๊ฐ„์˜ ํ”„๋ฆฌ์ฝ”์Šค๋ฅผ ๋งˆ์น˜๋ฉฐ

ํ•œ๋งˆ๋””๋กœ ์••์ถ•ํ•œ๋‹ค๋ฉด ์ฝ”๋”ฉ์˜ ์ฝ”์–ดํž˜์„ ๊ธฐ๋ฅธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

ํ”„๋ฆฌ์ฝ”์Šค ์ด์ „์˜ ์ €๋Š”

1. ์ข‹์€ ์ฝ”๋“œ๋ž€ ๋ฌด์—‡์ผ์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

2. ๊ณ ๋ฏผํ•˜๋Š” ํž˜์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ํ”„๋ฆฌ์ฝ”์Šค๋ฅผ ํ†ตํ•ด์„œ ์ข‹์€ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ธฐ์ค€์ด ์ƒ๊ธฐ๊ณ  ๊ฐ€๋งŒํžˆ ์•‰์•„ ๋‚˜์˜ ์ฝ”๋“œ๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๋ฉฐ ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•˜๊ณ ์ž ํ•˜๋Š” ์ข‹์€ ์Šต๊ด€์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌดํ„ฑ๋Œ€๊ณ  ์ฝ”๋“œ๋ฅผ ์งœ๋˜ ์ €๋Š”, ๋งค์ฃผ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‚ฌํ•ญ๋“ค์„ ์ •๋ฆฌํ•˜๊ณ  ์ด๋ฅผ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋ฉฐ ์ฒด๊ณ„์ ์ธ ๊ณ„ํš๊ณผ ์‹ค์ฒœ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ๋ฅผ ์–ด๋А ์ •๋„ ์งœ๊ณ  ๋‚œ ๋’ค์—๋Š” ํ•œ ๋ฐœ์น˜ ๋ฌผ๋Ÿฌ๋‚˜์„œ ๋ฉ”์„œ๋“œ, ํด๋ž˜์Šค๊ฐ„์˜ ๊ฒฐํ•ฉ๋„์™€ ๋„ค์ด๋ฐ, ๋ณ€์ˆ˜๋ช…, ์ƒ์ˆ˜๋กœ ์–ด๋–ค ๊ฒƒ๋“ค์„ ๋นผ์•ผ ํ• ์ง€, ์บก์Аํ™”๊ฐ€ ์ž˜ ์‹ค์ฒœ๋˜์–ด ์žˆ๋Š”์ง€ ๋“ฑ์„ ๊ณ ๋ฏผํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ œํ•œ์‚ฌํ•ญ์ด ๋ช…ํ™•ํ•œ ์ƒํ™ฉ ์†์—์„œ ์ด๋ฅผ ์œ ๋…ํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์งœ์•ผ ํ•œ๋‹ค๋Š” ์˜์‹์ด ์ƒ๊ธฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ œํ•œ ์‚ฌํ•ญ์ด ๋ช…ํ™•ํ•œ ๊ฒƒ์€ ์–ด๋ ค์›€์„ ์ฃผ๊ธฐ๋„ ํ–ˆ์ง€๋งŒ, ๊ทธ ์ œํ•œ ์†์—์„œ ๋‚˜์˜ ํ•œ๊ณ„๋ฅผ ๊ฒฝํ—˜ํ•ด๋ณด๊ณ  ๋” ๋‚˜์€ ๊ฒฐ๊ณผ๋ฅผ ๊ณ ๋ฏผํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์ด๋Ÿฌํ•œ 4์ฃผ๊ฐ„์˜ ํ”„๋ฆฌ์ฝ”์Šค์˜ ๊ณผ์ •์—์„œ ํฐ ๋ฐฐ์›€๊ณผ ๊นจ๋‹ฌ์Œ์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ํ•จ๊ป˜ ์ฐธ์—ฌํ–ˆ๋˜ ๋ถ„๋“ค ๋•๋ถ„๋„ ํฌ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ œํ•œ์‚ฌํ•ญ ์†์—์„œ ํƒ„์ƒํ•˜๋Š” ์ฐธ๊ณ ํ• ๋งŒํ•œ ๋‹ค์–‘ํ•œ ์ฝ”๋“œ๋“ค์„ ํ†ตํ•ด ๋‚˜์˜ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋„ ๋Œ์•„๋ณด๊ณ , ๋‹ค๋ฅธ ์ฝ”๋“œ๋“ค์„ ํ•™์Šตํ•˜๋ฉด์„œ๋„ ๋” ๋งŽ์ด ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, discussion ์ด๋‚˜ slack ์„ ํ†ตํ•ด์„œ ์ข‹์€ ์ฐธ๊ณ  ์ž๋ฃŒ๋“ค์„ ๊ณต์œ ํ•ด์ฃผ์‹œ๋Š” ๋ถ„๋“ค ๋•๋ถ„์—๋„ ๋” ๋‚˜์€ ๋ฐฉํ–ฅ์œผ๋กœ์˜ ์„ฑ์žฅ์ด ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ”„๋ฆฌ์ฝ”์Šค๋ฅผ ํ†ตํ•ด ํ˜•์„ฑํ•œ ์ข‹์€ ์Šต๊ด€๋“ค์„ ์ €์˜ ์•ž์œผ๋กœ์˜ ์ฝ”๋”ฉ ์ƒํ™œ์—๋„ ๊ณ„์† ์ด์–ด๋‚˜๊ฐ€๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ