๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) (2023.04.06~2023.04.10) ๋ณธ๋ฌธ

full stack/JAVA

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) (2023.04.06~2023.04.10)

Shinjio 2023. 4. 6. 20:02

ํŒจ๋Ÿฌ๋‹ค์ž„(Paradigm)

์‚ฌ๋žŒ๋“ค์˜ ๊ฒฌํ•ด๋‚˜ ์‚ฌ๊ณ ๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ๊ทœ์ •ํ•˜๋Š” ํ…Œ๋‘๋ฆฌ

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„(Programming Paradigm)

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ ๊ฐ€์ง€๋Š” ์ฒด๊ณ„, ๊ด€์ , ํ‹€

 

๐ŸŽˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํŠธ๋ Œ๋“œ ๋ณ€ํ™”

๐Ÿ“– ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Procedural Programming)

์žฅ์  : ์ ˆ์ฐจ์— ๋”ฐ๋ผ ๊ตฌ์กฐ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅ, ์‹คํ–‰์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค

๋‹จ์  : ๊ฐ๊ฐ์˜ ์ฝ”๋“œ๊ฐ€ ์ˆœ์„œ์— ๋ฏผ๊ฐํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ์ฝ”๋“œ๋ถ„์„์ด ์–ด๋ ค์›€

          ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์ด ๊ณ ์žฅ๋‚˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ๋™์ž‘์ด ์•ˆ๋จ

- ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ˆœ์„œ์— ์ง‘์ค‘ 

- ์‹คํ–‰ ์ˆœ์„œ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ

- ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ž‘์„ฑ

- ํ”„๋กœ๊ทธ๋žจ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด Data and Logic Mixed(๋ณ€์ˆ˜์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋’ค์„ž์ž„) ๋ฌธ์ œ ๋ฐœ์ƒ

 

๐Ÿ“– ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object Oriented Programming)

์žฅ์  : ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๊ณ , ์ฝ”๋“œ ๋ถ„์„๊ณผ ์„ค๊ณ„์˜ ์ „ํ™˜์ด ์‰ฌ์›€(๋ณ€ํ™”์— ์œ ์—ฐํ•จ)

          ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์ด ๊ณ ์žฅ๋‚˜๋„ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์€ ๋™์ž‘

๋‹จ์  : ์„ค๊ณ„์— ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋จ

           ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋žจ๋ฐ๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ์‹คํ–‰์†๋„๊ฐ€ ๋Š๋ฆผ

- ์ ˆ์ฐจ์ง€ํ–ฅ์˜ ๊ฐœ๋… ์œ„์— ๊ฐ์ฒด์˜ ๊ฐœ๋…์„ ๋”ํ•œ๊ฒƒ

 

 

- ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์„ ๋ฌถ์–ด์„œ ์ •๋ฆฌ ํ›„ ๋ณ„๋„๋กœ ์ €์žฅ

- ์‘์ง‘๋„๋ฅผ ๋†’์ด๊ณ  → ๊ด€๋ จ๋œ ๊ฒƒ๋“ค์„ ๋ฌถ๋Š”๋‹ค.

  ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค → ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ (์ฝ”๋“œ๋ผ๋ฆฌ ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ •๋„๊ฐ€ ์ ๋‹ค. ์ ‘๊ทผ์ด ์–ด๋ ต๋‹ค.) 

- ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋“ค์ด ์„œ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Œ์œผ๋กœ์จ ์ƒํ˜ธ ์†Œํ†ต (๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉด์„œ ์„œ๋กœ ์†Œํ†ต)

- Java๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์ค‘์‹ฌ์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์–ธ์–ด

  python์€ ๊ฐ์ฒด์ง€ํ–ฅ๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ๋‹ค๋ฅธ ๊ฒƒ๋„ ํ•  ์ˆ˜ ์žˆ์Œ(ํ•จ์ˆ˜๋„ ๊ฐ€๋Šฅ) → ์œ ์—ฐํ•œ ์–ธ์–ด

 

๐ŸŽˆ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Object Oriented Programming : OOP)

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ๋‹จ์œ„, ์ฆ‰, ๊ฐ์ฒด๋“ค์˜ ๋ชจ์ž„์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ

๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ 

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์˜ˆ : ์˜ํ™”์˜ˆ๋งค์‹œ์Šคํ…œ

๊ฐ์ฒด : ๊ณ ๊ฐ / ๊ทน์žฅ / ์˜ํ™” / ๊ฒฐ์ œ
๊ณ ๊ฐ ๊ฐ์ฒด → ์˜ํ™” ๊ฐ์ฒด : ์˜ํ™” ๋ณด์—ฌ์ค˜ (getMovieinfo ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด) 
๊ณ ๊ฐ ๊ฐ์ฒด → ๊ทน์žฅ ๊ฐ์ฒด : ๊ทน์žฅ ๋ฆฌ์ŠคํŠธ ๋ณด์—ฌ์ค˜
๊ณ ๊ฐ ๊ฐ์ฒด → ๊ฒฐ์ œ ๊ฐ์ฒด : ๊ฒฐ์ œํ•ด์ค˜
๋“ฑ ๊ฐ์ฒด์™€ ๊ฐ์ฒด๋“ค ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ํ”„๋กœ๊ทธ๋žจ

 

๊ฐ์ฒด๋ผ๋ฆฌ ์„œ๋กœ ์ƒํ˜ธ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋งค๊ฐœ์ฒด๊ฐ€ ํ•„์š”. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋งค๊ฐœ์ฒด๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ

 

๐Ÿ“– ํด๋ž˜์Šค(Class)

Blueprint, Definition, Description → ์„ค๊ณ„๋„

๊ฐ์ฒด๋“ค์ด ์–ด๋–ค์‹์œผ๋กœ ๋™์ž‘ํ• ์ง€ ๋ฏธ๋ฆฌ ์ƒ๊ฐํ•ด์•ผ ํ•จ.

ํด๋ž˜์Šค๋Š” Field(์†์„ฑ = ๋ฐ์ดํ„ฐ = ๋ณ€์ˆ˜)๊ณผ ํ–‰๋™(๋ฉ”์„œ๋“œ → ๊ฐ์ฒด์˜ ํ–‰์œ„, ๊ธฐ๋Šฅ + ์ƒ์„ฑ์ž)๋กœ ์ด๋ฃจ์–ด์ง

 

ํ•„๋“œ : ์ถ”์ƒํ™”๋ฅผ ํ•˜๋˜(๊ณตํ†ต์ ์ธ ํŠน์ง•์„ ๊ฐ€์ ธ์˜ค๋˜) ๋„ˆ๋ฌด ์ž์„ธํ•œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€์ ธ์˜ค๋Š” ๊ฑธ ์ง€์–‘

 

ํด๋ž˜์Šค์˜ ๊ตฌ์„ฑ ์˜ˆ(TV)

 

๐Ÿ“– ๊ฐ์ฒด(Object)

created from the class ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ

์„ค๊ณ„๋„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“  ๊ฐ์ฒด 

 

๊ฐ์ฒด(object) vs ์ธ์Šคํ„ด์Šค(instance)
ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šคํ™”๋ผ๊ณ  ํ•˜๋ฉฐ, ์–ด๋–ค ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ฅผ ๊ทธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ํ•จ
์ฆ‰, ๊ฐ์ฒด๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ํฌ๊ด„์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, ์ธ์Šคํ„ด์Šค๋Š” ์–ด๋–ค ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ธ์ง€๋ฅผ ๊ฐ•์กฐํ•˜๋Š” ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

 

vendingMachineSimulator๋กœ ์‹ค์ฒดํ™”์‹œ์ผœ ๋งŒ๋“  ๊ฒƒ →  vm (object)

๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ•
ํด๋ž˜์Šค๋ช… ๋ณ€์ˆ˜๋ช… = new ํด๋ž˜์Šค๋ช…();   ----> ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ›„ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐ ๋ณ€์ˆ˜์— ์ €์žฅ

 

 

๊ฐ์ฒด์™€ ๋ ˆํผ๋Ÿฐ์Šค ๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ

TV ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์ƒ์„ฑ → ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” heap ์˜์—ญ์— ์ €์žฅ
โ€ป ์ด ๋•Œ ์ƒ์„ฑ๋œ ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋Š” heap ๋ฉ”๋ชจ๋ฆฌ์ƒ ๊ฐ๊ฐ์˜ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

heap ์˜์—ญ์˜ TVํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด ์•ˆ์—๋Š” ๋ณ€์ˆ˜๋“ค์ด ์ €์žฅ๋˜์–ด ์žˆ์Œ
๊ฐ์ฒด์˜ heap ์˜์—ญ์ƒ ์ฃผ์†Œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ ˆํผ๋Ÿฐ์Šค ๋ณ€์ˆ˜ tv1์€ stack ์˜์—ญ์— ์ €์žฅ

 

 

๐Ÿ“– ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•

โš™๏ธ ์ถ”์ƒํ™”(Abstract)

๊ฐ์ฒด์—์„œ ๊ณตํ†ต๋œ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋ฒ• → ๊ฐ์ฒด์˜ ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š”๊ฒƒ(๊ณตํ†ต์ ์„ ๋ฝ‘์•„๋‚ด๋Š” ๊ฒƒ)

์ƒ์„ธํ•œ ์ •๋ณด๋Š” ๋ฌด์‹œํ•˜๊ณ  ํ•„์š”ํ•œ ์ •๋ณด๋“ค๋งŒ ๊ฐ„์ถ”๋ ค์„œ ๊ตฌ์„ฑ

 

โš™๏ธ ์บก์Šํ™”(Encapsulation)

๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฌถ์–ด์„œ ์ €์žฅํ•˜๋Š” ๊ฒƒ → ์ถ”์ƒํ™” ํ–ˆ๋˜ ๊ฒƒ์„ ํด๋ž˜์ŠคํŒŒ์ผ์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ

๊ด€๋ จ๋œ ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ , ์‹ค์ œ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๊ฐ์ถ”๋Š” ๊ธฐ๋ฒ•์ด ๋จ(์ •๋ณด์€๋‹‰)

→ ์™œ ๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ ๋„์›€์ด ๋˜์ง€? ์ž๋ฐ”์—์„œ ์ž…๋ ฅ์„ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” Scanner ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ Scanner์˜ ์ฝ”๋“œ์™€ ๊ตฌ์ฒด์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•Œ ํ•„์š”๋Š” ์—†์Œ. ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋งŒ ๋ถˆ๋Ÿฌ์™€์„œ ์“ฐ๋ฉด ๋จ → ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

๋งŒ์ผ์˜ ์ƒํ™ฉ(ํƒ€์ธ์ด ์™ธ๋ถ€์—์„œ ์กฐ์ž‘)์„ ๋Œ€๋น„ํ•ด์„œ ํŠน์ • ์†์„ฑ์ด๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์กฐ์ž‘ํ•  ์ˆ˜ ์—†๋„๋ก ์ˆจ๊ฒจ ๋†“์€๊ฒƒ

ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ์ ‘๊ทผ์ œํ•œ์ž๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ ‘๊ทผ์ œํ•œ์ž๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Œ(public ↔ private) 

 

private ์ ‘๊ทผ์ œํ•œ์ž : ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ์ œํ•œ์ž

 

โš™๏ธ ์ƒ์†(Inheritance)

 

โš™๏ธ ๋‹คํ˜•์„ฑ(Polymorphism)

 

๐Ÿ“– ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

โ–ผ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ค๊ณ„ํ•˜๊ธฐ - ๋ผ์ง€์ €๊ธˆํ†ตํ”„๋กœ๊ทธ๋žจ โ–ผ

 

๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐœ์˜ ์›์น™(S.O.L.I.D ์›์น™)
ํ•„์š”์— ๋”ฐ๋ผ์„œ๋Š” ๋ฌด์‹œํ•  ์ˆ˜๋„ ์žˆ์œผ๋‚˜ ์ง€ํ‚ค๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์ด ํšจ๊ณผ์ ์œผ๋กœ ์ ์šฉ๋  ๊ฒƒ

์ข‹์€ ์„ค๊ณ„๋ž€ ์‹œ์Šคํ…œ์— ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์ด๋‚˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ, ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฒ”์œ„๊ฐ€ ์ ์€ ๊ตฌ์กฐ๋ฅผ ๋งํ•จ. ๊ทธ๋ž˜์„œ ์‹œ์Šคํ…œ์— ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„, ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•˜๊ณ  ์ดํ›„์— ํ™•์žฅ์„ฑ์ด ์žˆ๋Š” ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ. ์ฆ‰, SOLID ๊ฐ์ฒด ์ง€ํ–ฅ ์›์น™์„ ์ ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ํ™•์žฅํ•˜๊ณ  ์œ ์ง€ ๋ณด์ˆ˜ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์ง€๋ฉฐ, ๋ถˆํ”ผ์š”ํ•œ ๋ณต์žก์„ฑ์„ ์ œ๊ฑฐํ•ด ๋ฆฌํŒฉํ† ๋ง์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ž„์œผ๋กœ์จ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์˜ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ. 

SRP(Single Responsibility Principle : ๋‹จ์ผ์ฑ…์ž„์›์น™)
ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์—ญํ• (๊ธฐ๋Šฅ)์„ ํ•˜๋„๋ก
๊ทธ๋ž˜์•ผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ž‘์•„์ง„๋‹ค. 

OCP(Open Closed Principle : ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™)
ํ™•์žฅ์— ์—ด๋ ค์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป
์ถ”์ƒํ™” ์‚ฌ์šฉ์„ ํ†ตํ•œ ๊ด€๊ณ„ ๊ตฌ์ถ• ๊ถŒ์žฅ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ
๋‹คํ˜•์„ฑ๊ณผ ํ™•์žฅ์„ ๊ฐ€๋Šฅ์ผ€ํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์žฅ์ ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์„ค๊ณ„์›์น™

LSP(Liskov Substitution Principle : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)
์„œ๋ธŒ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ๊ธฐ๋ฐ˜(๋ถ€๋ชจ) ํƒ€์ž…์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™
๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋„ ์˜๋„๋Œ€๋กœ ์‹คํ–‰๋˜๋„๋ก ๊ตฌ์„ฑ์„ ํ•ด์ค˜์•ผ ํ•˜๋Š” ์›์น™

ISP(Interface Segregation Principle : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)
์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ๊ฐ ์‚ฌ์šฉ์— ๋งž๊ฒŒ๋” ์ž˜๊ฒŒ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์„ค๊ณ„ ์›์น™
์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ•์กฐ
ํด๋ผ์ด์–ธํŠธ์˜ ๋ชฉ์ ๊ณผ ์šฉ๋„์— ์ ํ•ฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ

DIP(Dependency Inversion Principle : ์˜์กด ์—ญ์ „ ์›์น™)
์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธด๋‹ค๋ฉด, ๊ทธ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ทธ ๋Œ€์ƒ์˜ ์ƒ์œ„ ์š”์†Œ(์ถ”์ƒ ํด๋ž˜์Šค or ์ธํ„ฐํŽ˜์ด์Šค)๋กœ ์ฐธ์กฐํ•˜๋ผ๋Š” ์›์น™

์ฐธ๊ณ ์ž๋ฃŒ ๋งํฌ

 

โš™๏ธ static 

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์คŒ

 

โš™๏ธ ์ƒ์„ฑ์ž (constructor)

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ

์ƒ์„ฑ์ž๋Š” ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜ ์ด์ƒ ์„ ์–ธ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋†“์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑ

 

ํŠน์ง•

1. ๋ฐ˜ํ™˜ํƒ€์ž…์ด ์—†์Œ 

2. ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๊ฐ™์Œ

 

'

\

 

โš™๏ธ ๊ฒŒํ„ฐ ๋ฉ”์„œ๋“œ(getter) & ์„ธํ„ฐ(setter) ๋ฉ”์„œ๋“œ ๋งŒ๋“ค๊ธฐ

๋ฐ์ดํ„ฐ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ๊ฐ ํ•„๋“œ๋Š” private๋กœ ์ ‘๊ทผ์ œํ•œ 

→ Simulator ํด๋ž˜์Šค์—์„œ๋Š” ๊ฐ ํ•„๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ

→ ํ•„๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๊ณ , ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” getter ๋ฉ”์„œ๋“œ์™€ setter ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

 

 

'

โ–ผ ๊ฒŒํ„ฐ ๋ฉ”์„œ๋“œ โ–ผ

๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ํ•„๋“œ์— ์žˆ๋Š” ๊ฐ’์„ ํ™•์ธ

 

 

โ–ผ ์„ธํ„ฐ ๋ฉ”์„œ๋“œ โ–ผ

๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ํ•„๋“œ์— ์žˆ๋Š” ๊ฐ’์„ setting(์ˆ˜์ •)ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ

this → ํ˜„์žฌ์˜ ํด๋ž˜์Šค๋ฅผ ์ง€์นญํ•˜๋Š” ํ‚ค์›Œ๋“œ

 

์ดํด๋ฆฝ์Šค์—์„œ๋Š” ์ž๋™์œผ๋กœ ๊ฒŒํ„ฐ ๋ฉ”์„œ๋“œ์™€ ์„ธํ„ฐ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›

 

 

 

์ดํด๋ฆฝ์Šค์—์„œ๋Š” ์ƒ์„ฑ์ž ๋˜ํ•œ ์ž๋™์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ ์ง€์›

 

์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ๋•Œ 3๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋””ํดํŠธ๋กœ ๋งŒ๋“ฆ

1. simulator - ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ ํƒ๊ถŒ์„ ์ฃผ์–ด ์ž…๋ ฅ๋ฐ›๋Š” ์šฉ๋„

2. data - ์ •๋ณด๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค 

3. system - ๋ฐ์ดํ„ฐ๋ฅผ ๋ˆ„์ ํ•ด์„œ ๋“ฑ๋ก์‹œํ‚ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ค‘๊ฐ„ ํด๋ž˜์Šค

 

๋„์„œ๊ด€๋ฆฌํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ

1. simulator → bookSystem๊ณผ ์†Œํ†ต

 

2. bookSystem → BookData์™€ ์†Œํ†ต

์ƒ์„ฑ๋œ bookData ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ArrayList๋ฅผ ๋งŒ๋“ค๊ณ ,

addBook ๋ฉ”์„œ๋“œ์—์„œ bookData ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ArrayList์— ์ €์žฅ

 

3. booData 

 

์‹คํ–‰๊ฒฐ๊ณผ