Java ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ - 4๋ ํน์ง & 5๋ ์์น(SOLID) ์์ฝ
์ด ์์์ Java ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ์ธ 4๋ ํน์ง๊ณผ 5๋ ์ค๊ณ ์์น(SOLID)์ ์ฝ๊ณ ์น์ ํ๊ฒ ์ค๋ช
ํฉ๋๋ค. ๊ฐ์ฒด์งํฅ์ด๋ ํ์ค ์ธ๊ณ์ ์ฌ๋ฌผ์ด๋ ๊ฐ๋
์ โ๊ฐ์ฒดโ๋ผ๋ ๋จ์๋ก ๋ณด๊ณ , ์ด ๊ฐ์ฒด๋ค์ด ์๋ก ์ํธ์์ฉํ๋ฉฐ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ด์์. ์์์ ์บก์ํ, ์์, ๋คํ์ฑ, ์ถ์ํ๋ผ๋ 4๋ ํน์ง๊ณผ, SRP, OCP, LSP, ISP, DIP๋ผ๋ 5๋ ์์น์ ์ฐจ๊ทผ์ฐจ๊ทผ ์๋ ค์ค๋๋ค.
๋ชฉ์ฐจ
1.
2.
3.
4.
5.
6.
7.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋
์๊ฐ [00:00:00]
โข
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object Oriented Programming, OOP)์ด๋ ํ๋ก๊ทธ๋จ์ โ๊ฐ์ฒดโ๋ค์ ๋ชจ์์ผ๋ก ๋ณด๋ ๋ฐฉ๋ฒ์ด์์.
โข
ํ์ค ์ธ๊ณ์ ์ฌ๋ฌผ์ด๋ ๊ฐ๋
์ ๊ฐ์ฒด๋ก ๋ง๋ค๊ณ , ์ด ๊ฐ์ฒด๋ค์ด ์๋ก ์ํธ์์ฉํ๋ฉฐ ํ๋ก๊ทธ๋จ์ ์์ฑํฉ๋๋ค.
โข
์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ฌ๋ฆฌ, ๊ฐ์ฒด์งํฅ์ ์ฝ๋ ์ฌ์ฌ์ฉ๊ณผ ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ ๋๊ท๋ชจ ์ํํธ์จ์ด์ ์ ํฉํด์.
์บก์ํ - ๋ฐ์ดํฐ์ ์ฝ๋๋ฅผ ํ๋๋ก ๋ฌถ๊ณ ์จ๊ธฐ๊ธฐ [00:02:31]
โข
์บก์ํ๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ(์์ฑ)์ ๊ธฐ๋ฅ(ํ์)์ ํ๋๋ก ๋ฌถ๊ณ , ๋ด๋ถ ๋ด์ฉ์ ์ธ๋ถ์์ ์ง์ ์ ๊ทผํ์ง ๋ชปํ๊ฒ ์จ๊ธฐ๋ ๊ฒ์ ๋งํด์.
โข
์๋ฅผ ๋ค์ด, ๊ฐ๊ธฐ์ฝ์ ๋จน์ ๋ ์ฝ ์์ ๋ญ๊ฐ ๋ค์ด์๋์ง ๋ชฐ๋ผ๋ ๊ฐ๊ธฐ ์ฆ์ ์ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์์.
โข
Java์์๋ย private,ย protected,ย publicย ๊ฐ์ ์ ๊ทผ ์ ์ด์(์ ๊ทผ ์ ํ์)๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ ๋ณดํธ์ ์ ๊ทผ ๋ฒ์๋ฅผ ์กฐ์ ํฉ๋๋ค.
โข
์ง์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ง ์๊ณ , ๋ฉ์๋๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก๋ง ๋ค๋ฃจ๊ฒ ํด์ ๋ฐ์ดํฐ๊ฐ ์๋ชป ๋ณ๊ฒฝ๋๋ ๊ฑธ ๋ง์์.
์์ - ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ฅ์ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๊ธฐ [00:07:22]
โข
์์์ ๊ธฐ์กด์ ๋ง๋ ํด๋์ค(๋ถ๋ชจ ํด๋์ค)์ ๋ณ์์ ๋ฉ์๋๋ฅผ ์ ํด๋์ค(์์ ํด๋์ค)๊ฐ ๋ฌผ๋ ค๋ฐ์ ์ฌ์ฌ์ฉํ๋ ๊ฐ๋
์ด์์.
โข
์:ย Animalย ํด๋์ค๊ฐย eat()ย ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ,ย Dogย ํด๋์ค๊ฐย Animal์ ์์๋ฐ์ย eat()์ ๊ทธ๋๋ก ์ฐ๋ฉด์ย bark()ย ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ด์.
โข
ํ์ค์ โ์๋น ๊ฐ ์์์๊ฒ ์ ์ฐ์ ๋ฌผ๋ ค์ฃผ๋ ๊ฒโ๊ณผ ๋น์ทํด์.
โข
Java๋ ํด๋์ค์ ๋ค์ค ์์(์ฌ๋ฌ ๋ถ๋ชจ๋ก๋ถํฐ ์์๋ฐ๊ธฐ)์ ์ง์ํ์ง ์์ง๋ง, ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ค์ค ๊ตฌํ์ ๊ฐ๋ฅํฉ๋๋ค.
๋คํ์ฑ - ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ๋ค์ํ ํํ๋ก ๋์ํ๊ธฐ [00:11:36]
โข
๋คํ์ฑ์ ํ๋์ ๋ฉ์๋๋ ํด๋์ค๊ฐ ์ฌ๋ฌ ํํ๋ก ๋์ํ๋ ์ฑ์ง์ด์์.
โข
๋ํ์ ์ธ ์๊ฐ ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ(๊ฐ์ ์ด๋ฆ, ๋ค๋ฅธ ๋งค๊ฐ๋ณ์)๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ(๋ถ๋ชจ ๋ฉ์๋๋ฅผ ์์์ด ์ฌ์ ์)์
๋๋ค.
โข
์:ย add(int a, int b),ย add(double a, double b)ย ๊ฐ์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํ๋ ๊ฒ.
โข
๋คํ์ฑ ๋๋ถ์ ์ฝ๋๊ฐ ๋ ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํด์ ธ์.
์ถ์ํ - ๋ณต์กํ ๋ด์ฉ์ ๊ฐ๋จํ ์ค๊ณ๋ก ํํํ๊ธฐ [00:15:42]
โข
์ถ์ํ๋ ๋ณต์กํ ์์คํ
์์ ๊ผญ ํ์ํ ํต์ฌ ๊ฐ๋
๊ณผ ๊ธฐ๋ฅ๋ง ๋ฝ์๋ด์ด ์ค๊ณํ๋ ๊ฒ์ ๋งํด์.
โข
Java์์๋ ์ถ์ ํด๋์ค(abstract class)์ ์ธํฐํ์ด์ค(interface)๋ก ๊ตฌํํฉ๋๋ค.
โข
์ถ์ ํด๋์ค๋ ์คํ ์ฝ๋ ์์ด ๋ฉ์๋์ โ์ํโ๋ง ์ ์ํ๊ณ , ์ด๋ฅผ ์์๋ฐ์ ํด๋์ค๊ฐ ๊ตฌ์ฒด์ ์ผ๋ก ๊ตฌํํด์ผ ํด์.
โข
์ธํฐํ์ด์ค๋ ๋ชจ๋ ๋ฉ์๋๊ฐ ์ถ์ ๋ฉ์๋๋ก, ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ํ ํด๋์ค๊ฐ ๊ตฌํํ ์ ์์ด ๋ค์ค ์์ ํจ๊ณผ๋ฅผ ๋
๋๋ค.
โข
์: ๋ฆฌ๋ชจ์ปจ(์ธํฐํ์ด์ค)์ โ์ฑ๋ ์ฌ๋ฆฌ๊ธฐโ ๊ธฐ๋ฅ๋ง ์ ์ํ๊ณ , ์ค์ TV(๊ตฌํ ํด๋์ค)๊ฐ ๊ทธ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
SOLID 5๋ ์์น ์๊ฐ์ ๊ฐ๋จ ์ค๋ช
[00:23:36]
โข
๊ฐ์ฒด์งํฅ ์ค๊ณ์์ ์ข์ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ 5๊ฐ์ง ์์น์
๋๋ค.
1.
SRP (๋จ์ผ ์ฑ
์ ์์น)
โข
ํ ํด๋์ค๋ ํ๋์ ์ฑ
์๋ง ๊ฐ์ ธ์ผ ํด์. ๋๋ฌด ๋ง์ ์ผ์ ํ๋ฉด ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ ธ์.
2.
OCP (๊ฐ๋ฐฉ-ํ์ ์์น)
โข
๊ธฐ๋ฅ ํ์ฅ์๋ ์ด๋ ค ์์ด์ผ ํ๊ณ , ๊ธฐ์กด ์ฝ๋๋ ์์ ํ์ง ์๋๋ก ๋ซํ ์์ด์ผ ํด์.
3.
LSP (๋ฆฌ์ค์ฝํ ์นํ ์์น)
โข
์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค๋ก ๋์ฒดํด๋ ํ๋ก๊ทธ๋จ์ด ๋ฌธ์ ์์ด ๋์ํด์ผ ํด์.
4.
ISP (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
โข
ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กดํ๋ฉด ์ ๋ผ์. ์ธํฐํ์ด์ค๋ฅผ ์๊ณ ๋ช
ํํ๊ฒ ๋๋๋ ๊ฒ ์ข์์.
5.
DIP (์์กด๊ด๊ณ ์ญ์ ์์น)
โข
๊ตฌ์ฒด์ ์ธ ํด๋์ค๊ฐ ์๋, ์ถ์ํ(์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค)์ ์์กดํด์ผ ํด์. ๊ทธ๋์ผ ์ ์ฐ์ฑ์ด ๋์์ง๋๋ค.
โข
์ด ์์น๋ค์ ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ด ์ข์ ์ํํธ์จ์ด ์ค๊ณ์ ๊ธฐ๋ณธ์
๋๋ค.
๋ง๋ฌด๋ฆฌ ์์ฝ [00:30:52]
โข
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์บก์ํ, ์์, ๋คํ์ฑ, ์ถ์ํ๋ผ๋ 4๋ ํน์ง์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํด์.
โข
๊ทธ๋ฆฌ๊ณ SOLID 5๋ ์์น์ ์งํค๋ฉด ์ข์ ์ค๊ณ๊ฐ ๊ฐ๋ฅํด์ ธ์, ๋ณ๊ฒฝ ์๊ตฌ๊ฐ ์๊ฒจ๋ ์ต์ํ์ ์ํฅ๋ง ์ฃผ๋ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์ด์.
โข
์์ผ๋ก ์ฝ๋ฉ ์ค์ต๊ณผ ํ๋ก์ ํธ์์ ์ด ๊ฐ๋
๋ค์ ์ ์ฉํ๋ฉฐ ๋ ๊น๊ฒ ๋ฐฐ์ฐ๊ฒ ๋ ๊ฑฐ์์.
์ด ์์์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ ๊ฐ๋
๋ถํฐ ์ค๊ณ ์์น๊น์ง ์น์ ํ๊ฒ ์ค๋ช
ํด, Java ๊ฐ๋ฐ์๋ผ๋ฉด ๊ผญ ์์์ผ ํ ํต์ฌ ๋ด์ฉ์ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ๋์์ค๋๋ค!