ํฌ์ŠคํŠธ

๐ŸŒ’ OOP

๐Ÿ’ซ Q


  • OOP์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.
  • OOP์— ๋Œ€ํ•œ ์ž์œ ๋กœ์šด ์˜๊ฒฌ
  • ํด๋ž˜์Šค ์„ธ๋ถ„ํ™”(๋‹จ์ผ์ฑ…์ž„์›์น™)์— ๋Œ€ํ•œ ์ž์œ ๋กœ์šด ์˜๊ฒฌ
  • ์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ์˜ค๋ฒ„๋กœ๋”ฉ ์ •์˜

๐Ÿ’ซ OOP


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

  • ๊ฐ์ฒด์™€ ํด๋ž˜์Šค๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑ. (๊ธฐ๋ณธ ๋‹จ์œ„/๋ธ”๋ก)
  • (์žฌ์‚ฌ์šฉ -> ์ฝ”๋“œ ์ค‘๋ณต ์ตœ์†Œํ™” -> ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ, ๋ณ€๊ฒฝ ์ตœ์†Œํ™”) -> ์œ ์ง€๋ณด์ˆ˜, ํ™•์žฅ์„ฑ ์šฉ์ด

์ƒˆ SW ๊ฐœ๋ฐœ์„ ์œ„ํ•ด์„œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐœ๋ฐœํ•ด์•ผโ€ฆ
-> ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•?
-> ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

Like ์ปดํ“จํ„ฐ
๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์ž.

  • ์ปดํ“จํ„ฐ
    • ๋ถ€ํ’ˆ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ž์‹ ๋“ค์ด ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์—…์ฒด์˜ ๋ถ€ํ’ˆ์„ ๊ตฌ์ž…ํ•˜์—ฌ ์กฐ๋ฆฝ
    • ๋ถ€ํ’ˆ์ด ๊ณ ์žฅ๋‚˜๋ฉด ํ•ด๋‹น ๋ถ€ํ’ˆ๋งŒ ๊ณ ์น˜๊ฑฐ๋‚˜ ๊ต์ฒด

๐Ÿ’ซ Object


๊ฐ์ฒด Object :
์ƒํƒœ์™€ ๋™์ž‘์„ ๊ฐ€์ง„, ์‹ค์žฌํ•˜๋Š” ๋Œ€์ƒ(๋ฌผ์ฒด, ๊ฐœ๋… ๋“ฑ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ).

  • ์†์„ฑ State : ๊ฐ์ฒด์˜ ํŠน์ง•, ์ƒํƒœ (๋ฐ์ดํ„ฐ) -> ๋ณ€์ˆ˜ Variable
  • ํ–‰๋™ Behavior : ๊ฐ์ฒด์˜ ๋™์ž‘, ๊ธฐ๋Šฅ, ํ–‰์œ„ (์•Œ๊ณ ๋ฆฌ๋“ฌ) -> ํ•จ์ˆ˜ Function

ํด๋ž˜์Šค Class :
๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก (ํ˜•ํ‹€ Templete, ์ฒญ์‚ฌ์ง„ Blueprint).
์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ชจ๋“  ๊ฐ์ฒด์—๊ฒŒ ๊ณตํ†ต์ ์ธ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์ •์˜.

์ธ์Šคํ„ด์Šค Instance :
ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฐœ์ฒด
์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ (๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ๋„) -> ๊ฐ™์€ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ
์ธ์Šคํ„ด์Šค๋“ค์€ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜ ๊ณต์œ , ๋ณ€์ˆ˜๋Š” ๊ฐ๊ฐ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.

๐Ÿ’ซ ํŠน์ง•/์š”์†Œ


๐Ÿซง ์ถ”์ƒํ™”

  • ๋ณต์žกํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด,
  • ์„ธ๋ถ€ ์‚ฌํ•ญ๋“ค์€ ์ œ๊ฑฐ, ๋ณธ์งˆ(๊ณตํ†ต์ ์ธ ํŠน์„ฑ์ด๋‚˜ ๊ธฐ๋Šฅ)์„ ๊ฐ•์กฐ
  • -> ํ”„๋กœ๊ทธ๋žจ์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋ฉฐ ๊ด€๋ฆฌํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ.

Like ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ (์ง€๋ฆฌ๋ฅผ ์ถ”์ƒํ™”)

Abstract Class, Interface (์—ญํ• ๊ณผ ๊ตฌํ˜„์˜ ๋ถ„๋ฆฌ)

๐Ÿซง ์ƒ์†

  • ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ์žฌํ™œ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ƒ์„ฑ
    • ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฌผ๋ ค๋ฐ›๊ณ , ์ด๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ์ž์‹ ํด๋ž˜์Šค์—๋งŒ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ด๋ฏธ ์ž‘์„ฑ๋œ/๊ฒ€์ฆ๋œ ํด๋ž˜์Šค ์žฌ์‚ฌ์šฉ, ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑ
  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ -> ์ฝ”๋“œ ์ค‘๋ณต ๊ฐ์†Œ -> ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด

๐Ÿซง ๋‹คํ˜•์„ฑ

  • ์–ด๋–ค ๊ฐ์ฒด์˜ ์†์„ฑ์ด๋‚˜ ๊ธฐ๋Šฅ์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์„ฑ์งˆ
  • ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋ช…, ํ•จ์ˆ˜๋ช… ๋“ฑ์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ ํ•ด์„๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

  • ๋งฅ๋ฝ์— ๋”ฐ๋ผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ, ์„œ๋กœ ๋‹ค๋ฅธ ์†์„ฑ/๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
    • Overloading : ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋‚˜ ํƒ€์ž…์ด ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ.
    • Overriding : ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ ํ•˜๋Š” ๊ฒƒ
  • ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ (์ ‘๊ทผ, ์ฒ˜๋ฆฌ, ์ปจํ…Œ์ด๋„ˆ์— ๋‹ด๊ธฐ)

  • ๊ฐ์ฒด A๊ฐ€ ๊ฐ์ฒด B์˜ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์— ์ง์ ‘ ์ ‘๊ทผํ•œ๋‹ค
  • -> ๊ฐ์ฒด B๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ๊ฐ์ฒด A๋„ ์ˆ˜์ •๋˜์–ด์•ผ ํ•œ๋‹ค -> ์˜์กดํ•œ๋‹ค -> ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’๋‹ค

  • ๊ฐ์ฒด A๊ฐ€ ๊ฐ์ฒด B์˜ ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•œ๋‹ค
  • -> ๊ฐ์ฒด B๊ฐ€ ์ˆ˜์ •๋˜์–ด๋„ ๊ฐ์ฒด A๋Š” ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค -> ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค -> ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ๋‹ค!

๐Ÿซง ์บก์Šํ™”

๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ์™€ ์•Œ๊ณ ๋ฆฌ๋“ฌ์ด ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ , ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์„ ์ œํ•œ

๋ชฉ์  1. ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ์™€ ์•Œ๊ณ ๋ฆฌ๋“ฌ ๋ฌถ๊ธฐ

  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค
  • ์บก์Š๋กœ ์‹ธ์—ฌ ์žˆ์ง€ ์•Š์œผ๋ฉด ๋‚ด์šฉ๋ฌผ์ด ํฉ์–ด์ง€๊ฒŒ ๋˜๊ณ  ๋ณต์šฉํ•˜๊ธฐ ํž˜๋“ค ๊ฒƒ์ด๋‹ค.
  • Like ์บก์Š์•ฝ

๋ชฉ์  2. ์ •๋ณด์€๋‹‰

๊ฐ์ฒด์˜ ์‹ค์ œ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๊ฐ์ถ”๋Š” ๊ฒƒ
By ์ ‘๊ทผ ์ œ์–ด์ž, Getter/Setter

์บก์Š๋กœ ์‹ธ์—ฌ ์žˆ์ง€ ์•Š์œผ๋ฉด ๋‚ด์šฉ๋ฌผ์ด ๋ณดํ˜ธ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค (๋ณ€์งˆ, ์กฐ์ž‘) Like ์บก์Š์•ฝ

  • Data Protection ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ : ์™ธ๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•จ.
    • -> ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค.
  • Data Hiding ๋ฐ์ดํ„ฐ ์€๋‹‰ : ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ˆจ๊น€.
    • ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์•Œ ์ˆ˜ ์—†์œผ๋ฉฐ ๊ฐ์ฒด๊ฐ€ ๋…ธ์ถœ๋˜๋Š” UI/UX๋ฅผ ํ†ตํ•ด์„œ ์ƒํ˜ธ์ž‘์šฉ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • -> ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ˆจ๊ธฐ๊ณ  ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์„ ์ œํ•œํ•˜์—ฌ ๊ฐ์ฒด์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€์—์„œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋ฉด?

์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ˆ˜์ •ํ•˜๋‹ค ๊ณ ์žฅ์ด ๋‚˜๋ฉด, ์›์ž‘์ž๊ฐ€ ๊ณ ์น  ์ˆ˜ ์—†๋‹ค
์ˆ˜์ •ํ•˜์ง€ ์•Š์•„์•ผ ์›์ž‘์ž๊ฐ€ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค

๋‹จ, ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ๋Š” ์–ผ๋งˆ๋“ ์ง€ ์ˆ˜์ •/์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
๊ณต์‹์ ์œผ๋กœ ํ—ˆ์šฉํ•œ ๋ถ€๋ถ„์ด๋‹ˆ๊นŒ

Like ์ „์ž๊ธฐ๊ธฐ

So?

๋‹คํ˜•์„ฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋Š์Šจํ•œ ๊ฒฐํ•ฉ!
(Car.StartEngine(), Car.MoveForward(), Car.OpenWindow()) -> Car.Operate()

๐Ÿ’ซ SOLID


SOLID

๐Ÿ’ซ Ref


์ฐธ๊ณ  : โ€˜โ€™

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.