๋ฐ์—”์œผ๋กœ ์„ฑ์žฅ์ค‘ ๐ŸŒฑ

์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 5๊ธฐ ๋ฐฑ์—”๋“œ ํ”„๋ฆฌ์ฝ”์Šค

[์šฐํ…Œ์ฝ” 5๊ธฐ ํ”„๋ฆฌ์ฝ”์Šค] ์ˆซ์ž ์•ผ๊ตฌ with ์ž๋ฐ” ๊ธฐ์ดˆ ๊ฐ•์˜ ์ •๋ฆฌ

์จ๋ฐ 2022. 11. 27. 23:05

์ž๋ฐ”๋Š”์š”...?!

์ž๋ฐ”๋Š” ๋ฌด์กฐ๊ฑด ํด๋ž˜์Šค์™€ ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

[ main ๋ฉ”์„œ๋“œ ]

main ๋ฉ”์„œ๋“œ ์•ˆ์—๋Š” ๋‚ด๊ฐ€ ๋ฐฐํฌ, ์„œ๋น„์Šคํ•˜๊ณ ์ž ํ•  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

 

[ ํŒจํ‚ค์ง€ ]

  • ํŒจํ‚ค์ง€ = ๋””๋ ‰ํ† ๋ฆฌ

์ž๋ฐ”๋Š” ํŒจํ‚ค์ง€๋ž‘ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ž‘ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์œผ๋ฉด, ์–ด๋–ค ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ํด๋ž˜์Šค์ธ์ง€ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.

  • domain(model): ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์˜์—ญ

๋ณดํ†ต model์ด๋ผ๋Š” ํ‘œํ˜„ ์“ฐ๋Š”๋ฐ, ์š”์ฆ˜์—” domain์ด๋ผ๊ณ  ๋‚ด๊ฐ€ ์‹ค์ œ ๋‹ค๋ฃจ๊ณ ์ž ํ•  ์„œ๋น„์Šค์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(๊ณ„์‚ฐ์„ ํ•œ๋‹ค๊ฑฐ๋‚˜ ํ–‰์œ„๋“ค์ด ์žˆ๋Š” ๊ฒƒ)์ด ๋“ค์–ด์žˆ๋Š” ์˜์—ญ์„ ์˜๋ฏธํ•œ๋‹ค.

 

[ ํด๋ž˜์Šค ]

ํด๋ž˜์Šค๋Š” ๊ธฐ๋Šฅ ๋ชจ์Œ์ง‘์ด๋‹ค.

ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค ์ด๋ฆ„๋‹ต๊ฒŒ ๋ญ”๊ฐ€ ํ•˜๋Š” ๋ฉ”์„œ๋“œ(๊ธฐ๋Šฅ๋“ค) ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

 

- ์ƒ์„ฑ์ž

command + n์„ ๋ˆŒ๋Ÿฌ constructor๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ƒ์„ฑ์ž๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

 

- ๋ฉ”์„œ๋“œ

์ž๋ฐ”์—์„œ ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ž๋ฐ”๋Š” ํƒ€์ž…์„ ์ง€์ •ํ•˜์—ฌ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

์–ด๋–ค ํƒ€์ž…์œผ๋กœ ๋ฐ›์„์ง€ ๋ช…์‹œํ•œ ์ˆœ๊ฐ„, ๊ทธ์— ๋งž๋Š” ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

add(int number1, int number2)

์ด ๋ถ€๋ถ„์„ ๋ฉ”์„œ๋“œ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜(๊ณ ์œ ํ•œ ์„ฑ์งˆ)์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

- ์ ‘๊ทผ ์ œ์–ด์ž

์ž๋ฐ”๋Š” ์ด ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ๋ฅผ ์–ด๋””๊นŒ์ง€ ์—ด์–ด์ค„์ง€ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • public: ์ด ํด๋ž˜์Šค ๋ฐ–์—์„œ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค.
  • private: ์ด ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์“ฐ๊ฒ ๋‹ค.

 

- ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค

๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์€ ๊ฒŒ ์žˆ๋‹ค๋ฉด, 'new + ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์€ ํด๋ž˜์Šค ์ด๋ฆ„'์„ ์ž‘์„ฑํ•˜๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ, ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์€ ํด๋ž˜์Šค ์ด๋ฆ„์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.

import๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์œ„์น˜๋ฅผ ์ ์–ด์ค€๋‹ค.

 

๋กœ์ปฌ ๋ณ€์ˆ˜์— ๋‹ด์•„์„œ ์‚ฌ์šฉํ•˜์ž.

์„ ์–ธ ๋ฐ ํ• ๋‹น์„ ๋™์‹œ์— ํ•œ๋‹ค.

Calculator teacher = new Calculator();

= ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ(Calculator teacher)์€ ์„ ์–ธ, ์˜ค๋ฅธ์ชฝ(new Calculator())์ด ํ• ๋‹น์ด๋ผ๊ณ  ํ•œ๋‹ค.

new๋ผ๊ณ  ๋งŒ๋“ค์–ด์ง„ ์ˆœ๊ฐ„ ๋ณต์‚ฌ๋ณธ์ด๊ณ , teacher๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

- ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜

๋ฉ”์„œ๋“œ์—์„œ ๋‚˜์˜ค๋Š” ๊ฒฐ๊ด๊ฐ’์„ ์ €์žฅํ•˜๋ ค๋ฉด, ํด๋ž˜์Šค ๋ฒ”์œ„ ๋‚ด์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค.

public์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค.

 

ํด๋ž˜์Šค ๋‚ด๋ถ€์ด๋ฉด์„œ ๋ฉ”์„œ๋“œ ๋ฐ–์— ์žˆ๋Š” ๋ณ€์ˆ˜๋“ค์€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

* static์ด ์—†๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

 

- ํด๋ž˜์Šค ๋ณ€์ˆ˜

๋ณต์‚ฌ๋ฅผ ํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ๋Š”, ๊ฐ’์„ ๊ณต์œ ํ•ด์˜ค์ง€ ์•Š๋Š”๋‹ค.

* ๋งŒ์•ฝ ๊ณต์œ ํ•ด์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด, static์„ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•œ๋‹ค

๊ฐ’์„ ๊ณ„์† ์œ ๋™์ ์œผ๋กœ ๋ฐ”๊ฟ” ์ €์žฅํ•œ๋‹ค.

 

- ์ƒ์ˆ˜(ํด๋ž˜์Šค ๋ณ€์ˆ˜์ด๋ฉด์„œ ๋ถˆ๋ณ€ ๊ฐ’)

* static final์„ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐ’์„ ๊ณต์œ ๋Š” ํ•˜์ง€๋งŒ ์ ˆ๋Œ€ ๋ณ€ํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค.

ํ•ญ์ƒ ๊ฐ™์€ ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ์ƒ์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ฆ‰, ์ƒ์ˆ˜ ๋ฐ ํด๋ž˜์Šค ๋ณ€์ˆ˜์ด๋ฉด์„œ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด๋‹ค.

public static final int SHARE_BIRTHDAY = 1104;

์ „๋ถ€ ๋Œ€๋ฌธ์ž๋กœ ์“ฐ๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๊ณ , ๋„์–ด์“ฐ๊ธฐ๋Š” underbar(_)๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

 

 

์•„๋ž˜๋Š”, ์œ„ ๊ฐœ๋…๋“ค์„ ์ •๋ฆฌํ•œ ์˜ˆ์‹œ์ด๋‹ค.

public class Calculator {
	
    public static final int SHARE_BIRTHDAY = 1104; // ์ƒ์ˆ˜, ํด๋ž˜์Šค ๋ณ€์ˆ˜์ด๋ฉด์„œ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’
    public static int shareResult = 0; // ํด๋ž˜์Šค ๋ณ€์ˆ˜
    
    public int result = 0; // ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜
    
    public Calculator() { // ์ƒ์„ฑ์ž
    }
    
    public int add(int number1, int number2) { // ๋ฉ”์„œ๋“œ
        result = number1 + number2;
        shareResult = result;
        return result;
    }
    
}

 

# ์ฐธ๊ณ ๋กœ, ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ์—์„œ ์ •์ (static) ๋ฉ”์„œ๋“œ์— ์žˆ๋Š” ๊ฑธ ์ ‘๊ทผํ•˜๋ ค๋ฉด, ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋„ ์ •์  ๋ฉ”์„œ๋“œ์— ์žˆ์–ด์•ผ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

[ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€? ]

  1. ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”(=๊ฐ์ฒด=์˜ค๋ธŒ์ ํŠธ) ํ•œ๋‹ค.
  2. ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ (์—ญํ• ์— ๋งž๋Š”) ์ธ์Šคํ„ด์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•œ๋‹ค. (= ์˜์ธํ™”)
  3. ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ข…ํ•ฉํ•œ๋‹ค.

์ด ๊ณผ์ •์ด ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

[ ํ…Œ์ŠคํŠธ ]

ํ…Œ์ŠคํŠธ๋Š” ์„œ๋ฒ„์™€ ์˜ํ–ฅ์€ ์—†์ง€๋งŒ, ๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธํ•˜๊ณ ์ž ํ•˜๋Š” ์˜์—ญ์ด ์•ˆ์— ๋“ค์–ด๊ฐ„๋‹ค.

๋‹จ์ˆœํžˆ ๋‹ค ๋งŒ๋“  ๋’ค์— ํ…Œ์ŠคํŒ…ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํ”„๋กœ๋•์…˜์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋“ค์ด ๋“ค์–ด๊ฐ€๋Š” ๊ณณ์ด๋‹ค.

 

- assertThat

ํ…Œ์ŠคํŠธ์—์„œ assertThat์„ ์‚ฌ์šฉํ•ด์„œ ๋‚ด๊ฐ€ ์•„๋‹Œ, ์ปดํ“จํ„ฐ๊ฐ€ ํ™•์ธํ•˜๊ฒŒ ํ•˜์ž.

assertThat(result).isEqualsTo(answer);

์™ผ์ชฝ์ด ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๊ฐ’(result), ์˜ค๋ฅธ์ชฝ์ด ์‹ค์ œ ์ •๋‹ต์œผ๋กœ ์ƒ๊ฐํ•œ ๊ฐ’(answer)์„ ์ ์ž.

 

- @BeforeEach

@BeforeEach๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ์ค‘๋ณต์„ ํ•ด๊ฒฐํ•˜๊ณ , ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ ์–ด๋‘์ž.

@BeforeEach ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐ ํ…Œ์ŠคํŠธ๋งˆ๋‹ค ๋จผ์ € ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

private๋กœ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ๋ฐ”๋กœ ์•„๋ž˜์— ๊ฐ์ฒด ์„ ์–ธ์„ ๋จผ์ € ํ•ด๋‘๊ณ , @BeforeEach๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜์ž.

 

- ๋˜ ๋‹ค๋ฅธ ์ค‘๋ณต ๋ฐฉ์ง€ ๋ฐฉ๋ฒ•(refactor ๊ฐ€๋Šฅ)

@ParmeterizedTest

@CsvSource({”1, 2, 3, …”}) ๋ฅผ ์‚ฌ์šฉํ•˜์ž.

 

์™ผ์ชฝ: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง ์ „ / ์˜ค๋ฅธ์ชฝ: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง ํ›„