DAY 6
๐ย ์ค๋ ์ฝ์ ๋ฒ์ : 3์ฅ, ํจ์ ~
<aside>
๐ ์ฑ
์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ์ ์จ๋ณด์ธ์.
</aside>
- ์๊ฒ ๋ง๋ค์ด๋ผ
- ํจ์๋ ํ ๊ฐ์ง๋ฅผ ํด์ผ ํ๋ค. ๊ทธ ํ๊ฐ์ง๋ฅผ ์ ํด์ผ ํ๋ค. ๊ทธ ํ ๊ฐ์ง๋ง์ ํด์ผ ํ๋ค.
โ ๊ธฐ๋ฅ ๋จ์๋ก ํจ์๋ฅผ ์ธ๋ถํ
- ํจ์ ๋น ์ถ์ํ ์์ค์ ํ๋๋ก
โโ์์์ ์๋๋ก ์ฝ๋ ์ฝ๊ธฐ: ๋ด๋ ค๊ฐ๊ธฐ ๊ท์นโ์ ์ง์ ํด๋ณด๊ธฐ!!
- ์ผ๊ด์ฑ ์๋ ์์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ!
โ ํ์
์์๋ ํจ์๋ช
์์ฑ์ ๋ํ ๋ณ๋์ ๋ฃฐ ๋๋ ์ง์์ ์ธ ์ํต์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
- ํจ์ ์ธ์(์ต์ ์ ์
๋ ฅ ์ธ์๊ฐ ์๋ ๊ฒ!)
- ๋จํญ ํ์ ํจ์
โ โํจ์ ์ด๋ฆ์ ์ง์ ๋๋ (1)์ธ์์ ์ง๋ฌธ ๋์ง๋ ๊ฒฝ์ฐ (2)์ธ์๋ฅผ ๋ณํํ์ฌ ๋ฆฌํดํ๋ ๊ฒฝ์ฐ ๋ฅผ ๋ถ๋ช
ํ ๊ตฌ๋ฌธํ๊ณ ์ผ๊ด์ ์ธ ๋ฐฉ์์ผ๋ก ๋ ํ์์ ์ฌ์ฉํ๋ผโ
โ โ์ด๋ฒคํธ ํจ์ ํ์์ ์ฝ๋์ ๋ช
ํํ ๋๋ฌ๋๋๋ก ์ด๋ฆ๊ณผ ๋ฌธ๋งฅ์ ์ฃผ์ํด์ ์ ํํ๋ผ.โ
โ โ์๊ธฐ ์ธ์๋ ๊ฐ๊ธ์ ๋จํญ ํ์์ ํผํ๋ผโ
<aside>
๐ค ์ค๋ ์ฝ์ ์๊ฐ์? ๋ ์ค๋ฅด๋ ์๊ฐ์ ๊ฐ๋ณ๊ฒ ์ ์ด๋ณด์ธ์
</aside>
- ํ์คํ ์๊ตฌ์ฌํญ์ ์ ํํ ํ์
ํ๊ณ ํ๋ก์ธ์ค๋ฅผ ์ ์ ๋ฆฝ ํ ์๋ก ํจ์ ๋ผ์ธ ์๋ ์ค์ด๋๋ ๊ฒ ๊ฐ๋ค. ๋น์ฅ ๊ณผ๊ฑฐ์ ๋ ์์ ๋ง ํด๋ ๋ง๊ฐ์ ์ซ๊ฒจ ๊ธํ๊ฒ ์ง ์์ค์ผ์๋ก ํจ์ ํฌ๊ธฐ๊ฐ ์ ์ ๋์ด๋ฌ์๋ค(๋ถํ์ํ if๊ฐ ๋์ด๋๊ธฐ ์์...). ์์ผ๋ก ํจ์ ๋ด ์ฝ๋๊ฐ ๋์ด๋๋ ๊ฒ์ ์ธ์ ๋ ๊ฒฝ๊ณ์ฌ์ ๊ฐ์ง๋ฉฐ, ๊ธฐ๋ฅ๋จ์๋ก ์ธ๋ถํ ํ ์ ์๋๋ก ๋
ธ๋ ฅํด์ผ๊ฒ ๋ค.
- ํจ์ ์ธ์ ๋ถ๋ถ์ ๊ฒฝ์ฐ, ๊ทผ๋ ์งํํ๋ Legacy ์์ค ๋ฆฌํฉํ ๋ง ์์
๊ณผ ๋ง๋ฟ๋ ๋ด์ฉ์ด์ฌ์ ๋์ฑ ๊ณต๊ฐ์ด ๊ฐ๋ค. ๊ธฐ์กด Legacy์์๋ ๊ฐ๋ฐ ํ๊ฒฝ์์์ ์ ์ฐ์ฑ์ ์ํด ๋ค์ํ ์ธ์๋ฅผ deafult ๊ฐ๊ณผ ํจ๊ป ์ ์ํ์์ผ๋, ํ์ค์ ์ธ์๋ค์ ์ ํํ ๊ฐ ์๋ฏธ๋ฅผ ํ์
ํ์ง ๋ชปํ์ฑ ์ค๊ตฌ๋๋ฐฉํ๊ฒ ์ฐ์ฌ์ ธ ํผ๋์ ์ผ๊ธฐ์์ผฐ๋ค. ํด๋น Legacy ๋งค์๋๋ ์ ๋ง ํ์ํ ์ธ์ 2๊ฐ๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ ์ ๋ถ ์ ๊ฑฐํ๋ค.
- ์ฑ
์ ๋์จ ๊ฐ๋
๋ค์ ์ค๋ฌด์ ์ ๋๋ก ๋ฐ์ํ๊ธฐ ์ํด, ๊ทธ๊ฐ ์๊ฒ ์์์จ์จ SRP/OCP/์ถ์ํ ๊ฐ์ ๊ฐ๋
๋ค์ ํ๋ ์์ํฌ(Spring boot) ์์ด๋ ๊ตฌํ(AOP/DI) ํ ์ ์๋๋ก ์ ๋ฆฌํด์ผ ๊ฒ ๋ค.
<aside>
๐ ๊ถ๊ธํ ๋ด์ฉ์ด ์๊ฑฐ๋, ์ ์ดํด๋์ง ์๋ ๋ด์ฉ์ด ์๋ค๋ฉด ์ ์ด๋ณด์ธ์.(๋๋ ์ค์ค๋ก์ ๊ณผ์ )
</aside>
- ํจ์์ ์ถ์ํ๋ ์ด๋์ ๋๊น์ง ํด์ผ ํ๋๊ฐ?
โ ํจ์์ ์ถ์ํ ์์ค์ ๋ฌด์กฐ๊ฑด ๋ฎ์ถ๋ ๊ฒ์ด ๋ง๋ฅ ์ข์๊น?โ ๋ผ๋ ์๋ฌธ์ด ์๊ฒผ๋ค. ๊ธฐ๋ฅ์ด ๋ณต์กํ ํจ์์ ์ถ์ํ๋ฅผ ํ๋ฉด ํ ์๋ก ๊ทธ๋งํผ ์ธ๋ถํ๋ ํจ์์ ์๊ฐ ๋์ด๋ ๊ฒ์ด๊ณ , ์ค์ ์
๋ฌด ์์๋ ๋๋ ค ์ญ์ผ๋ก ์ด๋ ค์์ด ๋ฐ์ํ์ง ์์๊น? DB ๊ฐ์ ๊ฒฝ์ฐ๋ ์ ๊ทํ ๋จ๊ณ๋ฅผ ๋์ผ ์๋ก ์ข๋ค๊ณ ์ด๋ก ์ ์ผ๋ก๋ ๋ฐฐ์ ์ง๋ง, ์ค์ ๋ก๋ ์ฑ๋ฅ ๋ฐ ์ ์ง๋ณด์์ ์ด์ ๋ก ๊ณ ๋ํ๋ ์ ๊ทํ ํ
์ด๋ธ์ ๋ณด๊ธฐ๋ ์ฝ์ง ์์ ๊ฒ์ฒ๋ผ ๋ง์ด๋ค(์ธ๋ํค๋ ๋ง์ฐฌ๊ฐ์ง...). ์ด๋ถ๋ถ์ ๋ํด์๋ ์ข๋ ๊ณ ๋ฏผ์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
- ํจ์์ธ์-๋ชฉ๋ก 3-7 StringBuffer ๊ด๋ จํ์ฌ
โ ์ฑ
์์๋ StringBuffer๋ฅผ ๊ฐ๋
์ฑ์ ์ํด ์ธ์คํด์ค๋ก ์ ์ธํ์ฌ ์ฌ์ฉํ์๋๋ฐ, ๋ง์ฝ Spring boot์์ Bean ์ผ๋ก ๋ฑ๋กํ ํด๋์ค์์ ์์ฒ๋ผ ๋ฐ๋ผํ ๊ฒฝ์ฐ ์ฐ๋ ๋ ๊ฐ์ญ์ ์ํ ๊ฐ ์ค์ผ์ด ๋์ง ์๋๋ก ์ฃผ์ ํ์. (Bean ์ผ๋ก ๋ฑ๋กํ ํด๋์ค์ Scope๋ฅผ ์ฑ๊ธํค์ด ์๋ prototype+proxyMode๋ก ๋ฐ๊พธ๊ฑฐ๋, Bean์ผ๋ก ๋ฑ๋ก ์ํ๊ฑฐ๋ ํด์ Thread-safe ํ๊ฒ ์์
ํ์)
- ๋งค๊ฐ๋ณ์? ์ธ์?
โ ๊ทธ๋์ ์ธ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ๋ถ ์ํ๊ณ ์ฌ์ฉํด ์๋๋ฐ... ์ฑ
์ ์ฝ์ผ๋ฉด์ ์ ํํ ๊ฐ๋
์ ์ ๋ฆฌ
(1) ๋งค๊ฐ๋ณ์(parameter): ํจ์์ ์ ๋ฌ๋ ๊ฐ์ ๋ฐ๋ ๋ณ์
โ int userInfo(int userNumber, String userName) {} //userNumber, userName์ด ๋งค๊ฐ๋ณ์
(2) ์ธ์(argumnet): ์ ๋ฌ๋๋ ๊ฐ
โ int result = userInfo(1234, โDoritoryโ); //1234, โDoritoryโ๋ ์ธ์
- ์ถ์ํ ์๋ฏธ ์ ๋ฆฌ ํ์
โ ์ฐธ๊ณ ์๋ฃ
: https://velog.io/@pyro/ํจ์์-Abstraction-Level
: https://sosimhan-dev.tistory.com/4
- OCP ๊ฐ๋
์ฌ์ ๋ฆฌ ํ์ (Framework ์์ด๋ DI๋ฅผ ํตํ ๊ตฌํ์ด ๋๋๋ก)
โ ์ฐธ๊ณ ์๋ฃ
: https://dublin-java.tistory.com/48