Search

Java ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - 4๋Œ€ํŠน์ง• & 5๋Œ€์›์น™(SOLID)

Java ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - 4๋Œ€ ํŠน์ง• & 5๋Œ€ ์›์น™(SOLID) ์š”์•ฝ

์ด ์˜์ƒ์€ Java ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ์ธ 4๋Œ€ ํŠน์ง•๊ณผ 5๋Œ€ ์„ค๊ณ„ ์›์น™(SOLID)์„ ์‰ฝ๊ณ  ์นœ์ ˆํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์ด๋ž€ ํ˜„์‹ค ์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์ด๋‚˜ ๊ฐœ๋…์„ โ€˜๊ฐ์ฒดโ€™๋ผ๋Š” ๋‹จ์œ„๋กœ ๋ณด๊ณ , ์ด ๊ฐ์ฒด๋“ค์ด ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด์—์š”. ์˜์ƒ์€ ์บก์Аํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ, ์ถ”์ƒํ™”๋ผ๋Š” 4๋Œ€ ํŠน์ง•๊ณผ, SRP, OCP, LSP, ISP, DIP๋ผ๋Š” 5๋Œ€ ์›์น™์„ ์ฐจ๊ทผ์ฐจ๊ทผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

1.
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋… ์†Œ๊ฐœ [00:00:00]
2.
์บก์Аํ™” - ๋ฐ์ดํ„ฐ์™€ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ  ์ˆจ๊ธฐ๊ธฐ [00:02:31]
3.
์ƒ์† - ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›๊ธฐ [00:07:22]
4.
๋‹คํ˜•์„ฑ - ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ๋™์ž‘ํ•˜๊ธฐ [00:11:36]
5.
์ถ”์ƒํ™” - ๋ณต์žกํ•œ ๋‚ด์šฉ์„ ๊ฐ„๋‹จํ•œ ์„ค๊ณ„๋กœ ํ‘œํ˜„ํ•˜๊ธฐ [00:15:42]
6.
SOLID 5๋Œ€ ์›์น™ ์†Œ๊ฐœ์™€ ๊ฐ„๋‹จ ์„ค๋ช… [00:23:36]
7.
๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ [00:30:52]

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋… ์†Œ๊ฐœ [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 ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๊ผญ ์•Œ์•„์•ผ ํ•  ํ•ต์‹ฌ ๋‚ด์šฉ์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค!