๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ OOP(Object-Oriented Programming) ์ด๋?
1. OOP ์ ์
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ผ๋ ๋
๋ฆฝ์ ์ธ ๋จ์๋ก ๊ตฌ์กฐํํ๊ณ , ์ด ๊ฐ์ฒด๋ค์ด ์ํธ์์ฉํ๋ฉฐ ๋์ํ๋๋ก ์ค๊ณํ๋
ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค. - ๊ฐ์ฒด๋ ์์ฑ(๋ฐ์ดํฐ)๊ณผ ๋ฉ์๋(๋์)๋ฅผ ํฌํจํ๋ฉฐ, ํ์ค ์ธ๊ณ์ ์ฌ๋ฌผ์ด๋ ๊ฐ๋ ์ ์ฝ๋๋ก ๋ชจ๋ธ๋ง ํ๊ธฐ์ ์ ํฉํ๋ค.
- OOP๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ, ํ์ฅ์ฑ, ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ๋ฐ์ ์ค์ ์ ๋๋ค.
์ฃผ์ ํน์ง
1. ๊ฐ์ฒด(Object)
- ์ ์: ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ ๋จ์๋ก, ์์ฑ๊ณผ ๋ฉ์๋์ ์งํฉ์ฒด์ด๋ค.
ํ์ค ์ธ๊ณ์ ์ฌ๋ฌผ(ex. ์๋์ฐจ, ๋๋ฌผ)์ ์ํํธ์จ์ด์ ์ผ๋ก ํํํ ๊ฒ์. - ์์:
class Car:
def __init__(self, brand, color):
self.brand = brand
self.color = color
my_car = Car("Toyota", "Red")
print(my_car.brand) # Toyota
2. ํด๋์ค(Class)
- ์ ์: ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ค๊ณ๋(= ์ฒญ์ฌ์ง)๋ผ ํ ์ ์์.
๊ฐ์ฒด์ ์์ฑ๊ณผ ๋์(๋ฉ์๋)์ ์ ์ํจ. - ํน์ง: ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
class Animal:
def __init__(self, species):
self.species = species
dog = Animal("Dog")
cat = Animal("Cat")
2. OOP์ 4๊ฐ์ง ํน์ฑ
์บก์ํ(Encapsulation)
- ์ ์: ๋ฐ์ดํฐ(์์ฑ)์ ๋ฐ์ดํฐ๋ฅผ ๋์ํ๋ ๋ฉ์๋(ํจ์)๋ฅผ ํ๋์ ํด๋์ค๋ก ๋ฌถ๋ ๊ฒ์ด๋ค.
์ธ๋ถ์์ ๋ด๋ถ ๊ตฌํ์ ์จ๊ธฐ๊ณ ๊ฐ์ฒด ๋ด๋ถ์ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ ํํ๋ ๋ฐฉ์์. - ์ฅ์ :
- ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ์ฆ๊ฐํจ
- ๊ฐ์ฒด์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์๋ค
- ์ธ๋ถ์์ ํด๋์ค ๋ด๋ถ์ ํน์ ๋ฐ์ดํฐ์ ์ง์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํ์ฌ ์๋ชป๋ ์ฌ์ฉ์ ๋ฐฉ์งํจ
- ์์:
class Person:
def __init__(self, name, age):
self.__name = name # ๋น๊ณต๊ฐ ์์ฑ
self.__age = age # ๋น๊ณต๊ฐ ์์ฑ
def get_name(self): # ์ ๊ทผ ๋ฉ์๋
return self.__name
def set_age(self, age): # ์์ ๋ฉ์๋
if age > 0:
self.__age = age
else:
print("Invalid age!")
p = Person("Alice", 25)
print(p.get_name()) # Alice
p.set_age(30)
์์(Inheritance)
- ์ ์: ์์ ํด๋์ค(๋ถ๋ชจ ํด๋์ค)์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค(์์ ํด๋์ค)๊ฐ ๋ฌผ๋ ค๋ฐ์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์.
- ์ฅ์ :
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
- ์์ ํด๋์ค์ ๊ธฐ๋ฅ์ ํ์ฅํ๊ฑฐ๋ ์์ ํ์ฌ ๋ ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ ์์ฑํ ์ ์์
- ๊ณ์ธต ๊ตฌ์กฐ๋ก ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ ์ ์์ด ํ๋ก๊ทธ๋จ ๊ตฌ์กฐํ๊ฐ ์ฝ๋ค
- ์์:
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal): # Animal์ ์์๋ฐ์
def speak(self): # ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
print("Dog barks")
d = Dog()
d.speak() # Dog barks
๋คํ์ฑ(Polymorphism)
- ์ ์: ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์์ ๋ค๋ฅด๊ฒ ๋์ํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ์ค๋ฒ๋ก๋ฉ์ด ์ฃผ์ํ ๋คํ์ฑ ๊ตฌํ ๋ฐฉ๋ฒ์. - ์ฅ์ :
- ๋์ผํ ์ธํฐํ์ด์ค๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌ ๊ฐ๋ฅํจ
- ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ด ๋์์ง๋ค
- ์์:
class Shape:
def draw(self):
print("Drawing a shape")
class Circle(Shape):
def draw(self): # ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
print("Drawing a circle")
class Square(Shape):
def draw(self): # ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
print("Drawing a square")
def render(shape):
shape.draw()
render(Circle()) # Drawing a circle
render(Square()) # Drawing a square
์ถ์ํ(Abstraction)
- ์ ์: ๊ฐ์ฒด์ ์ฃผ์ ํน์ง๋ง ๋ํ๋ด๊ณ ๋ณต์กํ ๋ด๋ถ ๊ตฌํ์ ์จ๊ธฐ๋ ๊ฒ์ด๋ค.
์ธํฐํ์ด์ค๋ฅผ ํตํด ํ์ํ ๊ธฐ๋ฅ๋ง ์ ๊ณตํจ. - ์ฅ์ :
- ๋ถํ์ํ ์ ๋ณด๋ฅผ ์จ๊ธฐ๊ณ ์ค์ํ ์ ๋ณด๋ง ๋ ธ์ถํ์ฌ ๋ณต์ก์ฑ์ ์ค์ธ๋ค
- ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ํจ์จ์ฑ์ด ์ฆ๊ฐํจ
- ์์:
from abc import ABC, abstractmethod
class Animal(ABC): # ์ถ์ ํด๋์ค
@abstractmethod
def sound(self): # ์ถ์ ๋ฉ์๋
pass
class Cat(Animal):
def sound(self):
print("Meow")
class Dog(Animal):
def sound(self):
print("Woof")
animals = [Cat(), Dog()]
for animal in animals:
animal.sound()
์ ๋ฆฌ ๐งน
- ์บก์ํ: ๋ฐ์ดํฐ์ ๋ฉ์๋๋ฅผ ๋ฌถ๊ณ ์ธ๋ถ์ ์ ๊ทผ์ ์ ํ์ํจ๋ค
- ์์: ์์ ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ฌ์ฌ์ฉํ๋ค
- ๋คํ์ฑ: ๋์ผํ ๋ฉ์๋์ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํ ์ ์๋ค
- ์ถ์ํ: ํ์ํ ๊ธฐ๋ฅ๋ง ๋ ธ์ถ์ํค๊ณ ๋ด๋ถ ๊ตฌํ์ ์จ๊ธธ ์ ์๋ค
OOP ๋ฐฐ์ฐ๋ฉด์ ๋๋ ์ :
๋ ์ ๋ ๊ฒ ์ด๋ ค์ด๊ฑธ ์ฝ๋ฉํ ์ ์์ผ๋ ค๋,,?^^,,
'[SPARTA] AI 9 (24.11 ~ 25.03) ๐๐ปโโ๏ธ > Python ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250106] ์ฌ๊ทํจ์ ์ ๋ฆฌ (0) | 2025.01.06 |
---|---|
[250106] count() ์ Counter() ์ ์ฐจ์ด์ (0) | 2025.01.06 |
[250103] ๋ฐ์ฝ๋ ์ดํฐ๋? (0) | 2025.01.03 |
[250102] instance method, class method, static method์ ํน์ง๊ณผ ์ฐจ์ด์ (1) | 2025.01.02 |
[241227] sqrt() ์ pow() ๊ฐ๋ ์ ๋ฆฌ (2) | 2024.12.27 |