OOP | ๊ฐ์ฒด
๐ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
- Procedural Programming | ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ
- Object-Oriented Programming | ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- Functional-Programming | ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- Event-Driven-Programming | ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ
๐ซ Q
- OOP์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
- OOP์ ๋ํ ์์ ๋ก์ด ์๊ฒฌ
- ํด๋์ค ์ธ๋ถํ(๋จ์ผ์ฑ ์์์น)์ ๋ํ ์์ ๋ก์ด ์๊ฒฌ
- ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ์ค๋ฒ๋ก๋ฉ ์ ์
๐ซ OOP
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (Object Oriented Programming)
- ๊ฐ์ฒด์ ํด๋์ค๋ฅผ ์ค์ฌ์ผ๋ก ์ฝ๋๋ฅผ ๊ตฌ์ฑ. (๊ธฐ๋ณธ ๋จ์/๋ธ๋ก)
- (์ฌ์ฌ์ฉ -> ์ฝ๋ ์ค๋ณต ์ต์ํ -> ๊ฐ๊ฒฐํ ์ฝ๋, ๋ณ๊ฒฝ ์ต์ํ) -> ์ ์ง๋ณด์, ํ์ฅ์ฑ ์ฉ์ด
์ SW ๊ฐ๋ฐ์ ์ํด์๋ ์ฒ์๋ถํฐ ๋ชจ๋ ๊ฒ์ ๊ฐ๋ฐํด์ผโฆ
-> ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ?
-> ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
Like ์ปดํจํฐ
๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํด์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์.
- ์ปดํจํฐ
- ๋ถํ ํ๋ํ๋๋ฅผ ์์ ๋ค์ด ๋ง๋ค์ง ์๊ณ ๋ค๋ฅธ ์ ์ฒด์ ๋ถํ์ ๊ตฌ์ ํ์ฌ ์กฐ๋ฆฝ
- ๋ถํ์ด ๊ณ ์ฅ๋๋ฉด ํด๋น ๋ถํ๋ง ๊ณ ์น๊ฑฐ๋ ๊ต์ฒด
๐ซ Object
๊ฐ์ฒด Object
:
์ํ์ ๋์์ ๊ฐ์ง, ์ค์ฌํ๋ ๋์(๋ฌผ์ฒด, ๊ฐ๋
๋ฑ ์ธ์งํ ์ ์๋ ๋ชจ๋ ๊ฒ).
- ์์ฑ
State
: ๊ฐ์ฒด์ ํน์ง, ์ํ (๋ฐ์ดํฐ) -> ๋ณ์Variable
- ํ๋
Behavior
: ๊ฐ์ฒด์ ๋์, ๊ธฐ๋ฅ, ํ์ (์๊ณ ๋ฆฌ๋ฌ) -> ํจ์Function
ํด๋์ค Class
:
๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๊ตฌํํ๋ ์ฝ๋ ๋ธ๋ก (ํํ Templete
, ์ฒญ์ฌ์ง Blueprint
).
์ด๋ค ์ข
๋ฅ์ ๋ชจ๋ ๊ฐ์ฒด์๊ฒ ๊ณตํต์ ์ธ ๋ณ์์ ํจ์๋ฅผ ์ ์.
์ธ์คํด์ค Instance
:
ํด๋์ค๋ก๋ถํฐ ๋ง๋ค์ด์ง๋ ๊ฐ์ฒด
์ฌ๋ฌ ์ธ์คํด์ค๊ฐ ํ์ํ ๊ฒฝ์ฐ (๊ฐ์ฒด ์งํฅ์์๋) -> ๊ฐ์ ํด๋์ค๋ก๋ถํฐ ์์ฑ
์ธ์คํด์ค๋ค์ ํ๋์ ํจ์ ๊ณต์ , ๋ณ์๋ ๊ฐ๊ฐ ๊ฐ์ง๊ณ ์์.
๐ซ OOP์ ์์
๐ซง ์ถ์ํ
- ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ๊ฐ๊ฒฐํ๊ณ ๋ช ํํ๊ฒ ํํํ๊ธฐ ์ํด,
- ์ธ๋ถ ์ฌํญ๋ค์ ์ ๊ฑฐ,
๋ณธ์ง
(๊ณตํต์ ์ธ ํน์ฑ์ด๋ ๊ธฐ๋ฅ)์ ๊ฐ์กฐ - -> ํ๋ก๊ทธ๋จ์ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ฉฐ ๊ด๋ฆฌํ๊ธฐ ํธํ๊ฒ.
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()