2022. 6. 26. 12:56ใ๐ฅ CS ์ง์
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)
object-oriented programming
์ด๋ฒ ํฌ์คํ ์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๊ฐ๋ ๊ณผ ํจ๊ป ์์ ๋ฅผ ์ดํด๋ณผ ๊ฒ์ด๋ฉฐ, ์ธ์ด๋ python์ผ๋ก ์งํํ๊ฒ ์ต๋๋ค.
๐ ์ ์
๋จผ์ ๊ฐ์ฒด์ ๋ํ ์ ์๋ถํฐ ๋ด๋ฆฌ๊ฒ ์ต๋๋ค.
๊ฐ์ฒด๋?
์ฝ๊ฒ ๋งํด ํ๋์ ์กด์ฌ์ ๋๋ค.
๋ฌผ๋ฆฌ์ ์ผ๋ก ์กด์ฌํ๋ , ์ถ์์ ์ผ๋ก ์๊ฐํ ์ ์๋ ์์ ์ ์์ฑ์ ๊ฐ์ง๊ณ ๋ค๋ฅธ ์กด์ฌ์ ์๋ณ์ด ๊ฐ๋ฅํ๋ฉด ๊ฐ์ฒด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ฐ์ง๋ฉด ๋ณ์๋ ๊ฐ์ฒด๊ฐ ๋ ์ ์๊ณ , ํจ์๋ ๊ฐ์ฒด๊ฐ ๋ ์ ์์ต๋๋ค. ๋๋ ๋ณ์์ ํจ์๋ฅผ ๋ฌถ์ ๊ฒ๋ ๊ฐ์ฒด๊ฐ ๋ ์ ์์ต๋๋ค. ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒ๋ค์ด ํ๋์ ์กด์ฌ๋ก ๋ฌถ์ด๊ธฐ๋ง ํ๋ค๋ฉด ๊ฐ์ฒด๊ฐ ๋ ์ ์์ต๋๋ค.
ํ์ด์ฌ์ผ๋ก ์๋ฅผ ๋ค๋ฉด, ๋ค์ ๊ฒ๋ค์ด ๋ชจ๋ ๊ฐ์ฒด์ ๋๋ค.
# 1
object = "i am object"
# 2
def object(x):
return x
# 3
class object:
def __init__(self, name):
self.name
def introduce(self) -> None:
print(f"my name is {self.name}")
obj = object("๊ฐ์ผํธ")
๋ฌธ์์ด ๋ณ์(object)๋ ๊ฐ์ฒด์ด๋ฉฐ, ์ ๋ฌ ๋ฐ์ x๋ฅผ ๊ทธ๋๋ก ๋ฆฌํดํ๋ ํจ์(object)๋ ๊ฐ์ฒด์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ name ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์๊ธฐ ์๊ฐํ๋ฉด์ ํ์ฉํ๋ ํจ์๊ฐ ๋ฌถ์ธ์ฒด ์ ์ธ๋ obj๋ ํ๋์ ๊ฐ์ฒด์ ๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๋ฏธ๋ ์ ์ถํ ์ ์์ต๋๋ค.
์ฌ๋ฌ ๊ฐ์ฒด๋ค์ ์ํธ์์ฉ ์์ผ์ ์ฝ๋๋ฅผ ์ง๋ ํ์.
์ฌ๊ธฐ์ ๊ฐ์ฒด๋ ํจ์์ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๊ฐ์ฒด(์ธ์คํด์ค)๋ก ๋ฌถ์ด ์์ฑํ ๊ฒ์ ๋งํฉ๋๋ค. ์์ obj๊ฐ์ ๊ฐ์ฒด์ ๋๋ค. (๋ฐ์ดํฐ+ํจ์)๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฒด๋ค์ ์ํธ์์ฉ ์์ผ์ ํ๋์ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ง๋๋ ๊ฒ์ด ๋ฐ๋ก ๊ฐ์ฒด ์งํฅ์ ํ๋ก๊ทธ๋๋ฐ์ ๋๋ค.
์ฌ์ค ํ๋ ํ๋ก๊ทธ๋๋ฐ์์ ๋๋ฌด ๋น์ฐํ ์๋ฆฌ๋ผ ์์ํ ๋ถ๋ค๋ ๊ณ์ค ๊ฒ๋๋ค.
์ ์ด ๊ฐ๋ ์ ๋ฐ๋ก ๊ณต๋ถํด์ผ ํ์ง?
ํ์ง๋ง ๊ผญ ์์๋ฌ์ผ ํฉ๋๋ค. ์๋ํ๋ฉด ์ง๊ธ ์ฌ๋ฌ๋ถ์ด ์ง๊ณ ์๋ ์ฝ๋๊ฐ ์ค์ ์ ํ ๊ฐ์ฒด ์งํฅ์ ์ด์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ์ฒด ์งํฅ์ ํ๋ก๊ทธ๋๋ฐ์ด ์๊ธฐ ์ , ๋ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ํ๋ฌ๋ค์์ด ์์์ต๋๋ค.
โฑ ์์ฐจ์ ํ๋ก๊ทธ๋๋ฐ(A -> B -> C)
์ด๋ค ํจ์๋ ํด๋์ค ์์ด ๊ทธ์ ์์๋๋ก ์ ์๋ ๋์๋ง์ ์ํํฉ๋๋ค. ํ๋ก๊ทธ๋จ์ ๊ทธ์ ์ ์๋ ๋์์ ์์๋๋ก ์คํํ๋ ์กด์ฌ์ผ ๋ฟ์ ๋๋ค. ํ์ง๋ง ์ด ๊ฒฝ์ฐ, ๋น์ทํ ๋์์ ๊ณ์ ์ ์ํด์ค์ผ ํ๋ฉฐ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ๋ค์ ๋์๊ฐ๋ ๊ฒ์ด ์ด๋ ต์ต๋๋ค. ๋์๊ฐ๋ ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ ธ์ ์คํ๊ฒํฐ ํ๋ก๊ทธ๋๋ฐ์ด ๋์ด ๋ฒ๋ฆฝ๋๋ค.
1. ๊ฐ์ผ๊ตฌ๋ผ๋ ์ฌ๋์ ๋จธ๋ฆฌ 2๊ฐ, ๋ค๋ฆฌ 3๊ฐ, ํ 4๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๊ฒฝ์ฐฐ์ด๋ค.
2. ๊ฐ์ผ๊ตฌ์ ๋ํ ์๊ฐ๋ฅผ ํ๋ผ
3. ์ฌ์ง๊ตฌ๋ผ๋ ์ฌ๋์ ๋จธ๋ฆฌ 2๊ฐ, ๋ค๋ฆฌ 3๊ฐ, ํ 4๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์์ฌ์ด๋ค.
4. ์ฌ์ง๊ตฌ์ ๋ํ ์๊ฐ๋ฅผ ํ๋ผ
โฑ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ(Function)
๋ฐ๋ณต๋๋ ๋์์ ํจ์/ ํ๋ก์์ (return์ด ์๋ ํจ์) ํํ๋ก ๋ชจ๋ํํด์ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ํ์๋ง ํจ์ํ ํ์ฌ ์ํํ ๋ฟ, ๋ณ์์ ๋ฐ์ดํฐ ๊ฐ์ ์๋ฃ๋ ๋ ์ผ์ผ์ด ์ ์ํด์ค์ผ ํ๋ค๋ ๋จ์ ์ด ์์์ต๋๋ค.
1. ๊ฐ์ผ๊ตฌ๋ผ๋ ์ฌ๋์ ๋จธ๋ฆฌ 2๊ฐ, ๋ค๋ฆฌ 3๊ฐ, ํ 4๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๊ฒฝ์ฐฐ์ด๋ค.
2. ๊ฐ์ผ๊ตฌ.์๊ฐํจ์()
3. ์ฌ์ง๊ตฌ๋ผ๋ ์ฌ๋์ ๋จธ๋ฆฌ 2๊ฐ, ๋ค๋ฆฌ 3๊ฐ, ํ 4๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์์ฌ์ด๋ค.
4. ์ฌ์ง๊ตฌ.์๊ฐํจ์()
๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋๋ค.
โฑ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Function)
1. class ์ ์ (์ธ๊ฐ ๋ฐ์ดํฐ, ํจ์, ์ถ๊ฐ ๋ณ์)
2. ๊ฐ์ผ๊ตฌ = class ๊ฐ์ฒด(๊ฒฝ์ฐฐ)
3. ์ฌ์ง๊ตฌ = class ๊ฐ์ฒด(์์ฌ)
5. ๊ฐ์ผ๊ตฌ.์๊ฐํจ์()
6. ์ฌ์ง๊ตฌ.์๊ฐํจ์()
๋จธ๋ฆฌ 2๊ฐ, ๋ค๋ฆฌ 3๊ฐ, ํ 4๊ฐ๋ผ๋ ๋ฐ์ดํฐ์ ์๊ฐ ํจ์๊ฐ ๋ฏธ๋ฆฌ class ๊ฐ์ฒด์ ๋ค์ด์์ต๋๋ค. ๊ฐ์ผ๊ตฌ์ ์ฌ์ง๊ตฌ๋ฅผ ์๊ฐํ ๋ class ๊ฐ์ฒด๋ฅผ ๋ฐ์์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ด์ ํ๋ก๊ทธ๋๋ฐ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ์ ์ํ๊ณ , ํจ์๋ฅผ ๊ณ์ ์ ์ํ ํ์๊ฐ ์๋ ๊ฒ์ ๋๋ค!
์ฌ๋ฌ๋ถ์ ์ด๋ค ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ ๊ณ์ จ๋์? ๋ฐ์ดํฐ๋ฅผ ๋ถํ์ํ๊ฒ ํ๋ํ๋ ์ ์ํ๊ณ ์์ง ์์ผ์ จ๋์? ํจ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ผ์ผ์ด ์ ์ํ์ง ์์ผ์ จ๋์? ๊ฐ๋จํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ฉด ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ํด๋ ๋๊ฒ ์ง๋ง, ๋ณต์กํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ฉด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ ๊ทน ํ์ฉํ์๋ ๊ฒ์ด ๋์๋์ค ๊ฒ๋๋ค.
๐ ํน์ง
1. ์ถ์ํ(Abstraction)
์ปดํจํฐ ๊ณผํ์์ ์ถ์ํ๋ ๋ณต์กํ ์๋ฃ, ๋ชจ๋, ์์คํ ๋ฑ์ผ๋ก๋ถํฐ ํต์ฌ์ ์ธ ๊ฐ๋ ๋๋ ๊ธฐ๋ฅ์ ์ ์ํ ๊ฒ์ ๋งํฉ๋๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ถ์ํ๋ ๋น์ทํ ํน์ง์ ๊ฐ์ง ๋ณ์, ๋ฐ์ดํฐ, ํจ์๋ฅผ ๋ฌถ์ด ํด๋์ค๋ก ์ ์๋ด๋ฆฌ๋ ๊ฒ์ด ๋ฉ๋๋ค.
์ฑ ๊ณผ ๊ด๋ จ๋ ๋ณ์, ํจ์๋ค์ ์ถ์ํํ๋ค๋ฉด ๋ค์ ์ฝ๋๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
class book:
def __init__(self, title, main, price) -> None:
self.title = title
self.main = main
self.price = price
self.like = 5
def introduce(self):
print(f"์ด ์ฑ
์ ์ ๋ชฉ์ {self.title} ์ด๋ฉฐ, ๋ด์ฉ์ {self.main} ์
๋๋ค.")
print(f"์ด ์ฑ
์ ๊ฐ๊ฒฉ์ {self.price} ์
๋๋ค.")
def like(self):
print(f"์ด ์ฑ
์ ํ์ ์ {self.like} ์
๋๋ค.")
์ฑ ๊ณผ ๊ด๋ จ๋ ๋ณ์์ ํจ์๋ค์ ๋ฌถ์ด ํ๋์ book ํด๋์ค๋ก ์ ์ํ์ต๋๋ค.
์ถ์ํ๋ ํด๋์ค๋ฅผ ์ ์ํ๋ ํ์ ๊ทธ ์์ฒด์ ๋๋ค.
์ถ์ํ๋ฅผ ์ ํด๋๋ฉด ๊ฐ์ฒด๋ค์ด ๋ ๋ฆฝ์ ์ธ ์ฑํฅ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์งํ๋ฏ๋ก, ํฅํ์ ์ ์ง๋ณด์์ ์ข์ต๋๋ค.
2. ์บก์ํ(Encapsulation)
ํด๋์ค์ ์ ๋ณด๋ฅผ ์๋ํํ์ฌ, ๊ฐ์ ๊ฐ์ฒด ์์์๋ ์์ง๋๋ฅผ ๋์ด๊ณ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ผ๋ฆฌ๋ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์ ์งํ ์ ์๋๋ก ์ค๊ณํฉ๋๋ค. ๊ฐ์ฒด ๋ด๋ถ์ ๋์ ๊ตฌํ์ด ์ด๋ป๊ฒ ์ด๋ค์ ธ ์๋์ง ๊ฐ์ถ๊ณ , ์ธ๋ถ์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํจ์ผ๋ก์ ๋ค๋ฅธ ๊ฐ์ฒด์์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ๊ฒ ์ ์งํฉ๋๋ค.
์ด๋ฅผ ์ํด ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ค์ private, public ์ธํฐํ์ด์ค๋ฅผ ํด๋์ค์ ์ ์ํฉ๋๋ค. ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋ public๊ณผ ์ธ๋ถ์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์จ๊ฒจ๋๋ private๋ฅผ ๋ง๋ฆ์ผ๋ก์ ์บก์ํ๋ฅผ ํฉ๋๋ค.
๋ค๋ง, python์์๋...
ํ์ด์ฌ์์ ํด๋์ค์ ๊ฐ์ฒด์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ด ์คํ๋์ด ์์ต๋๋ค. ์ด์ ๋ฐ๋ผ ํ์ด์ฌ์ ๋ช ๋ช (naming)์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก๊ทธ๋๋จธ๊ฐ ์์์ private์ public์ ์ค์ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
๋ค์์ ํ๋ผ์ด๋น ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ด์ฉํ ์บก์ํ์ ๋๋ค.
class book:
def __init__(self, name, name2):
self.name = name
self._name2 = 0
์ด๋ฆ์ด _ ๋ก ์์ํ๋ ์ดํธ๋ฆฌ๋ทฐํธ๋ private๋ก ๊ฐ์ฃผํฉ๋๋ค. name์ ์ผ๋ฐ์ ์ธ public์ด์ง๋ง, _name์ private์ด๋ฏ๋ก ์์์ ๊ฑด๋๋ฆฌ์ง ๋ง์์ผ ํฉ๋๋ค.
3. ์์(Inheritance)
๋ถ๋ชจ ํด๋์ค์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์ด์ด๋ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค. ๊ธฐ๋ฅ์ ์ผ๋ถ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ์์ ํด๋์ค์์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค. OOP์์ ๋ถ๋ชจ ํด๋์ค, ์์ ํด๋์ค๋ผ๊ณ ํํํฉ๋๋ค. ์์์ ์ฝ๋์ ์ฌ์ฌ์ฉ ๊ฐ๋ ์ด ์๋ ๊ธฐ๋ฅ์ ํ์ฅ ๊ฐ๋ ์ผ๋ก ์๊ฐํด์ผ ํฉ๋๋ค.
์์์ ์ด์ฉํ๋ฉด ์ฝ๋์ ์ค๋ณต์ ์์ ๊ณ , ํ์ ์ฑ์ ๋์ ๋๋ค. ๊ด์ ์ ๋ฐ๋ผ์ ์บก์ํ์ ์ถ์ํ์ ์ฐ์ฅ์ ์ด๊ธฐ๋ ํฉ๋๋ค. ์์ ํด๋์ค๋ฅผ ๋ฐ๋ก ์ ์ํ๋ ๊ฒ์ด ์๋๋ผ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์๋ฐ์ ์ ์ํจ์ผ๋ก์จ ๋น์ทํ ์ฑ์ง์ ๊ฐ์ง ๊ฒ๋ค๋ผ๋ฆฌ ๋ฌถ์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ค๋ฅธ ์ฑ์ง์ ๊ฐ์ฒด์์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ๋น์ทํ ๊ฐ์ฒด๋ผ๋ฆฌ์ ์์ง๋๋ ๋์ธ ๊ฒ์ด๋ผ ๋ณผ ์ ์์ต๋๋ค.
python์์ ์์์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์์ต๋๋ค.
class book:
def __init__(self, title, main, price) -> None:
self.title = title
self.main = main
self.price = price
self.like = 5
def introduce(self):
print(f"์ด ์ฑ
์ ์ ๋ชฉ์ {self.title} ์ด๋ฉฐ, ๋ด์ฉ์ {self.main} ์
๋๋ค.")
print(f"์ด ์ฑ
์ ๊ฐ๊ฒฉ์ {self.price} ์
๋๋ค.")
def like(self):
print(f"์ด ์ฑ
์ ํ์ ์ {self.like} ์
๋๋ค.")
class fantasy(book):
def __init__(self, title, main, price, place) -> None:
super().__init__(title, main, price)
self.place = place
def introduce_place(self):
print(f"ํํ์ง ์์ค์ธ {self.title} ์ {self.place} ์ ๋ฐฐ๊ฒฝ์ผ๋ก ํผ์ณ์ง๋๋ค.")
print(f"{self.main}์ ๋ํ ๋ด์ฉ์ ๋ค๋ฃจ๋ฉฐ, ๊ด๋๋ฃ๋ {self.price} ์
๋๋ค.")
๋ถ๋ชจ ํด๋์ค๋ book์ด๋ฉฐ, ์์ ํด๋์ค๋ fantasy์ ๋๋ค. ๊ฐ์ book์ด๋ผ๋ ์ฑ์ง ์๋์ ์์ง๋์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์ ๋ฐ์ ๊ฒฝ์ฐ, ๋ถ๋ชจ ํด๋์ค์ ํจ์, ๋ณ์๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
marble = fantasy("์ธํฐ์คํ
๋ผ", "ํํ์ฐ์ฃผ", "21000", "์ฐ์ฃผ ๊ณต๊ฐ")
marble.introduce()
marble.introduce_place()
๊ฒฐ๊ณผ
์ด ์ฑ
์ ์ ๋ชฉ์ ์ธํฐ์คํ
๋ผ ์ด๋ฉฐ, ๋ด์ฉ์ ํํ์ฐ์ฃผ ์
๋๋ค.
์ด ์ฑ
์ ๊ฐ๊ฒฉ์ 21000 ์
๋๋ค.
ํํ์ง ์์ค์ธ ์ธํฐ์คํ
๋ผ ์ ์ฐ์ฃผ ๊ณต๊ฐ ์ ๋ฐฐ๊ฒฝ์ผ๋ก ํผ์ณ์ง๋๋ค.
ํํ์ฐ์ฃผ์ ๋ํ ๋ด์ฉ์ ๋ค๋ฃจ๋ฉฐ, ๊ด๋๋ฃ๋ 21000 ์
๋๋ค.
4. ๋คํ์ฑ(Polymorphism)
ํ๋์ ๋ณ์๋ช , ํจ์๋ช ๋ฑ์ด ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ฏธ๋ก ํด์๋ ์ ์๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ฆ, ์ค๋ฒ๋ผ์ด๋ฉ, ์ค๋ฒ๋ก๋ฉ์ด ๊ฐ๋ฅํจ์ ๋ปํฉ๋๋ค.
์ค๋ฒ๋ก๋ฉ: ๊ฐ์ ์ด๋ฆ์ ํจ์๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ํ๊ณ , ๋งค๊ฐ๋ณ์์ ํ์ ๊ณผ ๊ฐ์๋ฅผ ๋ค๋ฅด๊ฒ ํฉ๋๋ค. ์ ๋ฌ๋๋ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ํธ์ถ๋๋ ํจ์๊ฐ ๋ฌ๋ผ์ง๋๋ค.
์ค๋ฒ๋ผ์ด๋ฉ: ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋์ ๊ฐ์ ์ด๋ฆ, ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ์ ๋๋ค.
๋คํ์ฑ์ ํ์ฉํ๋ฉด ๊ฐ์ ์ด๋ฆ์ ์์ฑ์ ์ ์งํ๊ณ , ๋ฉ์๋ ์ด๋ฆ์ ๋ญ๋นํ์ง ์์ต๋๋ค. ๋ณต์ก์ฑ์ ์ค์ผ ์ ์์ผ๋ฉฐ, ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋๋ ค์ฃผ์ด ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋๋ค.
์์ฝ : ์ถ์ํ๋ก ๋น์ทํ ์ฑ์ง์ ๋ณ์์ ํจ์๋ฅผ ๋ฌถ๊ณ , ์บก์ํ๋ก ์์ง๋๋ฅผ ๋์ ๋๋ค. ์๋ก์ด ๊ฐ์ฒด๋ ์์์ ํตํด ๊ธฐ์กด ๊ฐ์ฒด์ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ผ๋ฉฐ, ๋คํ์ฑ์ ํตํด ๊ธฐ๋ฅ์ ์์ ๋๋ ์ถ๊ฐํ์ฌ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ ์ฅ์ ๊ณผ ๋จ์
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ฑ์ ์ดํด๋ณด์์ต๋๋ค.
OOP๋ ๊ฐ์ฒด ๊ฐ์ ๋ ๋ฆฝ์ฑ์ ๋๋ ท์ด ํ๊ณ , ์ค๋ณต๋๋ ์ฝ๋์ ์์ ์ค์ ๋๋ค. ์ด์ ๋ฐ๋ฅธ ์ฅ๋ด์ ์ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ฅ๋จ์ ์ ๋ณด๋ฉด์ ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฐ๋ ๊ฒ์ด ์ข์์ง ์๊ฐํด๋ณด์๊ธธ ๋ฐ๋๋๋ค.
1. ์ฅ์
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
ํน์ ๊ธฐ๋ฅ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ์ ์ํ๊ธฐ์, ํ์ ๊ธฐ๋ฅ์ด ํ์ํด๋ ๋ค์ ์ ์ํ๋ ๊ฒ์ด ์๋ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋ฉด ๋ฉ๋๋ค. ์ด์ ๋ฐ๋ผ ๋ฏธ๋ฆฌ ์ง๋ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํจ์ผ๋ก์ ์ฌ์ฌ์ฉ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
- ์์ ์ ํฅ์ & ๋ํ ํ๋ก์ ํธ์ ์ ํฉ
ํด๋์ค๋ฅผ ํตํ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ฅผ ํ์ฉํ์ฌ ์ฝ๋๋ฅผ ์ง๊ธฐ์, ๊ธฐ์กด์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ๋นํด ์์ฐ์ฑ ๋ฐ ํจ์จ์ ๋์ผ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํฉ๋๋ค. ํด๋์ค ๋จ์๋ก ๋ชจ๋ํ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋ช ์ด ๊ฐ๋ฐํ ๊ฒฝ์ฐ, ์ ๋ฌด ๋ถ๋ด์ด ์ฝ์ต๋๋ค.
- ์ผ์์ ์ธ ๋ชจ๋ธ๋ง
๊ฐ์ฒด๋ ๊ณง ํ๋์ ์กด์ฌ์ด๋ฉฐ, ์ฐ๋ฆฌ ์ผ์ ๋ํ ๊ฐ์ฒด๋ค์ ํฉ์ ๋๋ค. ์ด๋ฐ ์ธก๋ฉด์์ ๊ฐ์ฒด ์งํฅ์ ์ฌ๊ณ ๋ ์ฐ๋ฆฌ์ ์ด๋ฏธ ๋ฐ์ ํ๋ค๊ณ ๋ ํ ์ ์์ต๋๋ค. ์๊ฐํ๋ ๊ฒ์ ์์ฐ์ค๋ฝ๊ฒ ๊ตฌํํ ์ ์๋ค๋ ์ ์ด ์ฅ์ ์ ๋๋ค.
- ์ ์ง๋ณด์์ ์ฐ์์ฑ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์บก์ํ ํน์ฑ์ ๊ฐ์ง๋๋ค. ํด๋์ค ๋จ์์ ๊ฐ์ฒด๋ค์ ์๋ก ์ํฅ์ ๊ฑฐ์ ์ฃผ๊ณ ๋ฐ์ง ์์ต๋๋ค. ์ด์ ๋ฐ๋ผ A์ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ A๋ง ์ ๊ฒฝ์จ์ ๊ณ ์น๋ฉด ๋จ์ผ๋ก ์ ์ง๋ณด์์ ์ฅ์ ์ ๊ฐ์ง๋๋ค.
2. ๋จ์
- ์ค๊ณ ์ ๋ง์ ์๊ฐ์ด ๋ ๋ค. (๊ฐ๋ฐ ์๋๊ฐ ๋๋ฆฌ๋ค)
๊ฐ ๊ฐ์ฒด๊ฐ ์ด๋ค ์ฑ์ง์ ๊ฐ์ง๊ณ , ์ด๋ค ๊ณผ์ ๋ฅผ ์ํํ๋์ง์ ๋ํ ์ดํด๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ํด์ผ ํฉ๋๋ค. ์ค๊ณ ๋จ๊ณ์์ ๋ง์ ์๊ฐ์ด ์์๋ฉ๋๋ค.
- ์คํ์๋๊ฐ ๋๋ฆฌ๋ค
๊ฐ์ฒด ์งํฅ ์ธ์ด๋ ์ ์ฒด์ ์ผ๋ก ์๋๊ฐ ๋๋ฆฝ๋๋ค. ์ด๋ ํธ์ถ๊ณผ๋ ์ฐ๊ด์ด ์์ต๋๋ค. ๋ฐ๋ก ํ์๋ฅผ ์ ์ํ์ฌ ๋ช ๋ นํ๋ ๊ฒฝ์ฐ, ์ปดํจํฐ๋ ๋ฐ๋ก ๊ณผ์ ๋ฅผ ์ํํฉ๋๋ค. ํ์ง๋ง class๋ก ์ ์ํ๊ณ ๊ทธ ์์์ ๋ ๋ณ์์ ํจ์๋ฅผ ๋ง๋ค ๊ฒฝ์ฐ, ์ด๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด์ผ ํฉ๋๋ค. ๊ฐ์ฒด๊ฐ ํธ์ถ๋ฐ์ผ๋ฉด, (1) ๊ฐ์ฒด ํธ์ถ (2) ์คํ ์ ์ฅ (3) ์ง์ญ ๋ณ์ ์ ์ฅ (4) ์ฝ๋ ์คํ (5) ๋ฐํ ๊ฐ return (6) ํธ์ถ ์ ๋ณด ์ ๊ฑฐ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. ์ด๋ฐ ๋ณต์กํ ๊ณผ์ ์ ํ์์ ์ผ๋ก ๊ฑฐ์ณ์ผ ํ๊ธฐ์ ์๋๋ ์์ฐ์ค๋ฝ๊ฒ ๋๋ ค์ง๋๋ค.
- ์ฝ๋ฉ ๋์ด๋ ์์น
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๋ ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง๊ณ , ์์ํด์ผ ํ๋ ์์๋ค์ด ๋ง์์ง๋ฉด ๋์ด๋๊ฐ ์ฌ๋ผ๊ฐ๋๋ค.
๐ ํต์ฌ ์ง๋ฌธ๋ค
ํฌ์คํ ์ ์ฝ์ ํ, ๋ตํ ์ ์์ด์ผ ํ๋ ์ง๋ฌธ๋ค.
[์ง๋ฌธ] ํด๋์ค์ ์ธ์คํด์ค(๊ฐ์ฒด)๋ ๋ฌด์์ธ๊ฐ์?
[์ง๋ฌธ] ์บก์ํ๊ฐ ๋ฌด์์ธ๊ฐ์?
[์ง๋ฌธ] ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ฅผ ์ฐ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
[์ง๋ฌธ] ๋คํ์ฑ์ ๋ฌด์์ธ๊ฐ์?
[์ง๋ฌธ] ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ ๊ณผ ๊ทธ ์ด์ ๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
'๐ฅ CS ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS ์ง์] Serialization์ ๊ฐ๋ ๊ณผ ์์ (0) | 2022.07.11 |
---|---|
[CS์ง์] ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํ์ฌ (0) | 2022.06.12 |