๐ก ๋ณธ ํฌ์คํ ์ ์์ ๋ด์ฉ, ๊ต์ฌ, ChatGPT๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ํ์ต ๊ธฐ๋ก์ ๋๋ค.
๊ธ๊ณผ ๊ทธ๋ฆผ ๋ฑ ๋ชจ๋ ์ฝํ ์ธ ์ ์ ๋ฆฌ ๋ฐ ์์ฑ์ ๋ณธ ๋ธ๋ก๊ทธ์์ ์ง์ ์ ์๋์์ต๋๋ค.
Python ๊ธฐ์ด๋ถํฐ Streamlit ๋ฐ์ดํฐ ์๊ฐํ๊น์ง ์ ๋ฆฌํ๋ ํ์ต ๊ธฐ๋ก์
๋๋ค.
์ด ๊ธ์ '15. [ํ์ด์ฌ] ์ ๋ณด์๋๊ณผ ํด๋์ค ๋ด๋ถ ๊ตฌ์กฐ' ์ ๋๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ๊ฐ์ฒด์ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์์ ์ง์ ์์ ํ์ง ๋ชปํ๋๋ก ๋ณดํธํ๋ ๊ฐ๋ ์ด ์๋ค.
์ด๋ฅผ ์ ๋ณด์๋(Information Hiding) ๋๋ ์บก์ํ(Encapsulation) ๋ผ๊ณ ํ๋ค.
Python์์๋ ํด๋์ค ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ณดํธํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉฐ,
๋ํ์ ์ผ๋ก ์ ๊ทผ ์ ํ ๋ฐฉ์๊ณผ ํด๋์ค ๋ด๋ถ ์์ฑ ๊ตฌ์กฐ(__dict__, __slots__) ๋ฅผ ํตํด ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ ์ ์๋ค.
์ด๋ฒ ๊ธ์์๋ Python์์์ ์ ๋ณด์๋ ๊ฐ๋ ๊ณผ ํด๋์ค ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํด๋ณธ๋ค.
์ ๋ณด์๋(Encapsulation)
์ ๋ณด์๋์ ๊ฐ์ฒด์ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์์ ์ง์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ ํํ๊ณ ,
ํ์ํ ๊ธฐ๋ฅ๋ง ๋ฉ์๋๋ฅผ ํตํด ์ ๊ณตํ๋ ๋ฐฉ์์ด๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ํด๋์ค๋ฅผ ์๊ฐํด๋ณผ ์ ์๋ค.
class Account:
def __init__(self, owner, balance):
self.owner = owner
self.balance = balance
์ด ๊ฒฝ์ฐ ์ธ๋ถ์์ ์์ฑ์ ์ง์ ์ ๊ทผํ ์ ์๋ค.
acc = Account("Alice", 10000)
acc.balance = -5000
์ด์ฒ๋ผ ๊ฐ์ฒด์ ์ํ๊ฐ ์๋ชป๋ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์๋ค.
๊ทธ๋์ ๊ฐ์ฒด์งํฅ์์๋ ๋ณดํต ๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ดํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ ๊ทผ ์ ํ ๋ฐฉ์
Python์์๋ ์์ฑ ์ด๋ฆ ์์ ์ธ๋์ค์ฝ์ด๋ฅผ ๋ถ์ฌ ์ ๊ทผ ์์ค์ ํํํ ์ ์๋ค.
public
๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์์ฑ์ public์ด๋ค.
self.balance
์ธ๋ถ์์ ์์ ๋กญ๊ฒ ์ ๊ทผํ ์ ์๋ค.
protected
์์ฑ ์ด๋ฆ ์์ ์ธ๋์ค์ฝ์ด ํ๋(_) ๋ฅผ ๋ถ์ธ๋ค.
self._balance
์ด๋ ๋ด๋ถ์์ ์ฌ์ฉํ๋ ์์ฑ์ด๋ผ๋ ์๋ฏธ์ ๊ด๋ก์ด๋ฉฐ, ์์ ํ ์ ๊ทผ์ด ์ฐจ๋จ๋๋ ๊ฒ์ ์๋๋ค.
private
์ธ๋์ค์ฝ์ด ๋ ๊ฐ(__)๋ฅผ ์ฌ์ฉํ๋ฉด name mangling์ด ์ ์ฉ๋๋ค.
self.__balance
์๋ฅผ ๋ค์ด ๋ค์ ์ฝ๋๋ฅผ ๋ณด์.
class Account:
def __init__(self, balance):
self.__balance = balance
์ธ๋ถ์์ ์ง์ ์ ๊ทผํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
acc = Account(10000)
print(acc.__balance)
ํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ ์ฅ๋๋ค.
_ํด๋์ค์ด๋ฆ__์์ฑ์ด๋ฆ
์ฆ ์ค์ ๋ก๋ ๋ค์์ฒ๋ผ ์ ๊ทผํ ์ ์๋ค.
print(acc._Account__balance)
Python์ private์ ์์ ํ ์ ๊ทผ ์ ํ์ด๋ผ๊ธฐ๋ณด๋ค ๋ด๋ถ ์ฌ์ฉ์ ๊ถ์ฅํ๋ ๋ฐฉ์์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
dict
Python ๊ฐ์ฒด๋ ๋ด๋ถ์ ์ผ๋ก ์์ฑ์ ๋์ ๋๋ฆฌ ํํ๋ก ์ ์ฅํ๋ค.
์ด ๊ตฌ์กฐ๋ฅผ ํ์ธํ ๋ __dict__ ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ํด๋์ค๋ฅผ ๋ณด์.
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
s = Student("Matt", 90)
print(s.__dict__)
์ถ๋ ฅ ์์
{'name': 'Alice', 'score': 90}
์ฆ ๊ฐ์ฒด์ ์์ฑ์ ๋ด๋ถ์ ์ผ๋ก ๋์ ๋๋ฆฌ ํํ๋ก ๊ด๋ฆฌ๋๋ค.
slots
__dict__ ๊ตฌ์กฐ๋ ์ ์ฐํ์ง๋ง, ๋ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์๋ค.
์ด๋ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ด __slots__์ด๋ค.
class Student:
__slots__ = ("name", "score")
def __init__(self, name, score):
self.name = name
self.score = score
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ฒด๋ ๋ฏธ๋ฆฌ ์ ์๋ ์์ฑ๋ง ์ฌ์ฉํ ์ ์๋ค.
s = Student("Matt", 90)
s.age = 20
์ ์ฝ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ฆ __slots__์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์๋ค.
- ํ์ฉ๋ ์์ฑ๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์
- ์์ฑ ๊ตฌ์กฐ ์ ํ
์ ๋ณด์๋๊ณผ ํด๋์ค ๊ตฌ์กฐ
์ ๋ฆฌํ๋ฉด Python์์ ํด๋์ค ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
| ๊ตฌ๋ถ | ์ค๋ช |
| public | ๊ธฐ๋ณธ ์ ๊ทผ ๋ฐฉ์ |
| protected | _name ๊ด๋ก |
| private | __name name magling |
| __dict__ | ๊ฐ์ฒด ์์ฑ ์ ์ฅ ๊ตฌ์กฐ |
| __slots__ | ์์ฑ ๊ตฌ์กฐ ์ ํ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ |
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ฉด Python ๊ฐ์ฒด๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๋์ง ํ์ ํ ์ ์๋ค.
์ ๋ฆฌ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ ๋ณด์๋์ ๊ฐ์ฒด์ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ณ ์์ ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๊ธฐ ์ํ ์ค์ํ ๊ฐ๋ ์ด๋ค.
Python์์๋ ์์ ํ ์ ๊ทผ ์ ํ์ ์ ๊ณตํ์ง๋ ์์ง๋ง,
์ธ๋์ค์ฝ์ด ๊ท์น๊ณผ name mangling์ ํตํด ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
๋ํ ๊ฐ์ฒด ์์ฑ์ ๋ด๋ถ์ ์ผ๋ก __dict__์ ์ ์ฅ๋๋ฉฐ,
__slots__์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ์์ฑ ๊ตฌ์กฐ๋ฅผ ์ ํํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ผ ์ ์๋ค.
์ด๋ฌํ ๊ฐ๋ ์ ์ดํดํ๋ฉด Python ํด๋์ค์ ๋ด๋ถ ๋์์ ๋ ๊น์ด ์ดํดํ ์ ์๋ค.
๋ค์ ๊ธ์์๋ ํด๋์ค์์ ์ฌ์ฉํ๋ class method์ static method์ ์ฐจ์ด๋ฅผ ์ดํด๋ณธ๋ค.
'Python & SQL > Python Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 17. [ํ์ด์ฌ] ํด๋ก์ ์ ๋ฐ์ฝ๋ ์ดํฐ (2) | 2026.03.08 |
|---|---|
| 16. [ํ์ด์ฌ] class methos vs static method (2) | 2026.03.08 |
| 14. [ํ์ด์ฌ] ์คํ์ ๋ฉ์๋์ ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ (2) | 2026.03.08 |
| 13. [ํ์ด์ฌ] ์์๊ณผ ํ์ ํ์ธ (0) | 2026.03.08 |
| 12. [ํ์ด์ฌ] ํด๋์ค์ ๊ฐ์ฒด (0) | 2026.03.08 |