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

ํด๋ฆฐ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

์šฐ๋ฆฌ๋Š” ํ˜ผ์ž ์ผํ•˜์ง€ ์•Š๊ณ  ๋™๋ฃŒ์™€ ํ•จ๊ป˜ ์ผํ•œ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๋…์ž์ผ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

ํŽธํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ฆฐ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

 

## ์˜๋ฏธ์žˆ๋Š” ์ด๋ฆ„

1. ์˜๋„๋ฅผ ๋ถ„๋ช…ํžˆ ๋ฐํ˜€๋ผ.

- ์ด๋ฆ„์œผ๋กœ ์˜๋„๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํŒŒ์•…๋ผ์•ผ ํ•œ๋‹ค.

- ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด ๊ธธ์–ด์ง€๋ฉด ์–ด๋–กํ•˜๋‚˜?

  => ์ด๋ฆ„์ด ๊ธธ์–ด๋„ ์ง๊ด€์ ์ธ๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

       ๋ณ€์ˆ˜ ์•„๋ฌด๋ฆฌ ๊ท€์ฐฎ๊ณ  ํž˜๋“ค์–ด๋„ ์˜๋ฏธ๊ฐ€ ์ •ํ™•ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ช…ํ™•ํ•˜๊ฒŒ ์ˆ˜์ •ํ•ด์คฌ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

       - ํšŒ์‚ฌ๋งˆ๋‹ค ์šฉ์–ด์‚ฌ์ „์ด ์žˆ๊ณ  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค.

         => ์ด๋Ÿฌํ•œ ๋ฌธํ™”๊ฐ€ ์žˆ๋‹ค๋ฉด ๋”ฐ๋ฅด๊ณ , ์ด๊ฒƒ๋ณด๋‹ค๋Š” ๋˜๋„๋ก ๋ช…ํ™•ํ•œ ์ด๋ฆ„์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

2. ๊ทธ๋ฆ‡๋œ ์ •๋ณด๋ฅผ ํ”ผํ•˜๋ผ.

- ๋„๋ฆฌ ์“ฐ์ด๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๋‹จ์–ด๋ฅผ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž.

- ์„œ๋กœ ํก์‚ฌํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์ž.

3. ์˜๋ฏธ ์žˆ๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋ผ.

4. ๋ฐœ์Œํ•˜๊ธฐ ์‰ฌ์šด ์ด๋ฆ„์œผ๋กœ ์ •ํ•˜์ž.

5. ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์‰ฌ์šด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ผ.

- ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋กœ๊ทธ์—์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

6. ํƒ€์ž…๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ž์—ด์„ ๋„ฃ์ง€ ๋ง์•„๋ผ.

- ํƒ€์ž…์ด ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

7. ํ•œ ๊ฐœ๋…์— ํ•œ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.

8. ์˜๋ฏธ ์žˆ๋Š” ๋งฅ๋ฝ์„ ์ถ”๊ฐ€ํ•˜๋ผ.

9. ๋ถˆํ•„์š”ํ•œ ๋งฅ๋ฝ์„ ์—†์• ๋ผ.

 

 

 

## Function : ํ•œ ๊ฐ€์ง€๋งŒ ํ•˜์ž.

1. ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด๋ผ. (SRP)

- ํ•œ ๊ฐ€์ง€๋งŒ ํ•ด๋ผ.

- ํ•จ์ˆ˜ ๋‚ด๋ถ€๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ชผ๊ฐค ์ˆ˜ ์žˆ๋‹ค๋ฉด ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

- ์ถ”์ƒํ™” ์ˆ˜์ค€์ด ํ•œ ๋‹จ๊ณ„์”ฉ ๋‚ฎ์•„์ ธ์•ผ ํ•œ๋‹ค.. => ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด์ง€?

  => ๋ฐ˜๋ณตํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ํ•จ์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

```

if (!Optional.ofNullable(service.getTest().execute().body()).isPresent())

```

 

 

 

2. Switch๋ฌธ

- ์™ ๋งŒํ•˜๋ฉด ์“ฐ์ง€ ๋ง์•„๋ผ.

- ๋ฌธ์ œ์  

 1) ํ•จ์ˆ˜๊ฐ€ ๊ธธ๋‹ค.

 2) ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 3) SRP๋ฅผ ์œ„๋ฐ˜ํ•œ๋‹ค.

 4) OCP๋ฅผ ์œ„๋ฐ˜ํ•œ๋‹ค.

- ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

1) Switch๋ฅผ ์“ธ ๋•Œ๋Š” Controller, Service๋‹จ์ด ์•„๋‹ˆ๋ผ ๊ฝ๊ฝ์ˆจ๊ฒจ์„œ ์‚ฌ๋žŒ๋“ค์ด ๋ชป๋ณด๊ฒŒ ํ•œ๋‹ค.

  => ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•œ๋‹ค.

 

3. ํ•จ์ˆ˜์˜ ์ธ์ˆ˜ ์ข…๋ฅ˜์™€ ๊ฐœ์ˆ˜

- ์ตœ๋Œ€ํ•œ ์—†๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. => 1~2๊ฐœ๊ฐ€ ์ ๋‹นํ•˜๋‹ค.

- ์ธ์ˆ˜๋Š” input ๊ด€๋ จ (requestbody, requestparam, ๊ณ ๊ฐ์ž…๋ ฅ๊ฐ’) ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

 

4. ๋ช…๋ น๊ณผ ์กฐํšŒ๋ฅผ ๊ตฌ๋ถ„ํ•ด๋ผ.

 

5. ์˜ค๋ฅ˜์ฝ”๋“œ๋ณด๋‹ค ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ! ( if else๋กœ ์˜ค๋ฅ˜์ฒ˜๋ฆฌ ํ•˜์ง€๋ง์•„๋ผ!! )

- Try-Catch ๋ฌธ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์ข€ ๋” ํ˜„๋ช…ํ•˜๋‹ค.

- Try-Catch VS throws ?

--- try-catch๋Š” ์™ ๋งŒํ•˜๋ฉด Controller์—์„œ ์‚ฌ์šฉ

--- throws๋Š” ์™ ๋งŒํ•˜๋ฉด Service์—์„œ ์‚ฌ์šฉ

--- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ Service์˜ ํ•จ์ˆ˜๋“ค์ด ํ•ฉ์ณ์ ธ์„œ ์‹คํ–‰๋œ ๊ฒฐ๊ณผ๋“ค์„ ๊ฐ€์ง€๊ณ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋•Œ๋ฌธ์— ํ•œ ๊ณณ์— ๋ชจ์œผ์ž.

     => ์ด๊ฑด ๋‹ต์ด ์—†๋‹ค.

 

 

## ๋ฆฌํŒฉํ† ๋ง

- ๋ฉค๋ฒ„๊ฐ์ฒด๋ฅผ private์œผ๋กœ ์„ ์–ธํ–ˆ์œผ๋‚˜ getter๋กœ ์ ‘๊ทผํ•œ๋‹ค. => ์€๋‹‰ํ™” ์œ„๋ฐ˜.

- ๋‚ด๋ถ€ ๊ตฌํ˜„์ด ๋…ธ์ถœ๋˜๊ณ  ์žˆ๋‹ค.

- getter, setter๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

- public์œผ๋กœ ํ–‰์œ„๋ฅผ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์บก์Šํ™”

- ์™ธ๋ถ€์— ๋…ธ์ถœ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)

- ๋‚ด๋ถ€ ๊ตฌํ˜„์€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋“ค์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ. => ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜์–ด ์ง์ ‘์ ์œผ๋กœ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฒŒํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

  -- ๋งˆ์Œ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , ๋ณ€๊ฒฝํ•  ๊ฒƒ๋“ค์ด ๋งŽ์•„์ง„๋‹ค.

- public์€ ์ƒ์„ฑ์ž์™€ ํ–‰์œ„

 

- ๋‚ด๋ถ€์˜ ๊ตฌํ˜„ : ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์ˆจ๊ธฐ๊ณ  ์ง์ ‘์ ์œผ๋กœ ๋‹ค๋ค„์ง€๋Š” ๊ฒƒ๋“ค์€ private. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ์š”์ฒญํ–ˆ์„ ๋•Œ ์‘๋‹ตํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ, getter์™€ setter๊ฐ€ ๋ช…๋ฐฑํ•˜๊ฒŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ.)

---> getter, setter๋ฅผ ์จ๋„ ๋˜๋Š” ๊ฒฝ์šฐ๋Š” DTO