์ฝ๋ - ํจ์บ ์์ ์ฝ๋ ์ฐธ๊ณ
1. ๊ฐ์ฒด์งํฅ vs ์ ์ฐจ์งํฅ ๊ฐ๋จํ ๋น๊ต
ํ์ด์ฌ์ OOP (๊ฐ์ฒด์งํฅ) ์ธ์ด์ด๋ค.
๊ฐ์ฒด์งํฅ๊ณผ ์ ์ฐจ์งํฅ์ ๋์ ๋ฐ๋ผ ์ฅ์ ๊ณผ ๋จ์ ์ด ์๋ค.
๊ฐ์ฒด์งํฅ์ ์ฌ์ฉํจ์ผ๋ก์จ ์ฝ๋์ ์ฌ์ฌ์ฉ๊ณผ ์ฝ๋ ์ค๋ณต์ ๋ฐฉ์งํ ์ ์๋ค.
์ ์ฐจ์งํฅ์ ์์์๋ถํฐ ์๋๋ก ์คํํ๋ค. ์คํ์๋๊ฐ ๋น ๋ฅด์ง๋ง ์ ์ง๋ณด์ , ๊ฐ์ ์ํค๋ ์์ ์ด ์ด๋ ต๋ค. ๊ทธ๋์ ์์๊ฐ ๋ฐ๋๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉฐ, ๋๋ฒ๊น ๋ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์๋ค.
ํ์ง๋ง ๋ฌด์กฐ๊ฑด ๊ฐ์ฒด์งํฅ์ด ์ข์ ๊ฒ์ ์๋๋ค. ๋น ๋ฅธ ์๋๋ฅผ ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ๋จ์ํ๊ณ ๋ชฉ์ ์ด ๋ช ํํ ๊ฒฝ์ฐ์๋ ์ ์ฐจ์งํฅ์ด ์ ๋ฆฌํ๋ค๊ณ ํ๋ค.
2. ๊ฐ์ฒด์งํฅ ์ธ์ด ํ์ด์ฌ - ํด๋์ค ์ฌ์ฉํ๊ธฐ
๋ง์ฝ ํ์์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์ฝ๋๋ฅผ ์ง์ผ ํ๋ค๊ณ ํ์ ๋, ๋ฒํธ, ํ๋ ์ ํฌํจํ๋ค๊ณ ํ๋ฉด , ํ์๋ง๋ค ๋ฐ๋ก ๋ณ์๋ฅผ ์ ์ธํด์ฃผ์ด์ผ ํ๋ค. ์ด๋ ๊ฒ ๋ฆฌ์คํธ ๊ตฌ์กฐ๋ก ์ง ๋ค๋ฉด ๋ฐ๋ณต๋๋ ์ฝ๋๋ ๋ง์์ง๊ณ , ์ ์ง๋ณด์๊ฐ ์ฝ์ง ์๋ค. ๋ฐ๋ผ์ class๋ฅผ ์ด์ฉํ์ฌ ์์ฑ์ ํด๋ณด๋๋ก ํ๋ค.
class Student():
def __init__(self, name, number, grade, details):
self._name = name
self._number = number
self._grade = grade
self._details = details
def __str__(self):
return 'str : {} - {}'.format(self._name, self._number)
### str ์ด ์์ ๋ ์ด๊ฒ์ด ํธ์ถ ๋จ
def __repr__(self):
return 'repr : {} - {}'.format(self._name, self._number)
Student ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ name, number, grade, details๋ฅผ ๊ธฐ์ ํด ์ฃผ์ด์ผ ํ๋ค.
__str__ ์ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํ๋ฉด ํธ์ถ์ด ๋๋ ํจ์์ด๋ค. __repr__ ์ ๋น์ทํ๋ฐ , __str__์ด ์์ผ๋ฉด ์ด ํจ์๊ฐ ํธ์ถ๋๋ค.
- ๊ฐ์ฒด ์์ฑ
student1 = Student('Kim', 1, 1, {'gender' : 'Male', 'score1' : 95, 'score2' : 88})
student2 = Student('Lee', 2, 2, {'gender' : 'Female', 'score1' : 77, 'score2' : 92})
ํ์ ๋๋ช ์ ๊ฐ์ฒด๋ฅผ ์์ฑํด ์ค๋ค.
- ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋์ ๋๋ฆฌ ํํ๋ก ๋ณด๊ธฐ
print(student1.__dict__)
print(student2.__dict__)
- __str__, __repr__ ํธ์ถ
students_list = []
students_list.append(student1)
students_list.append(student2)
students_list.append(student3)
for x in students_list:
print(repr(x))
print(x) # ์ง์ ํ str์ด ๋์ด
ํ๋ฒ์ ์ถ๋ ฅํ๊ธฐ ์ํด ๊ฐ์ฒด๋ฅผ ๋ฆฌ์คํธ์ ๋ฃ์ด์ฃผ๊ณ , for๋ฌธ์ผ๋ก ์ถ๋ ฅํด์ค๋ค. ๊ทธ๋ฅ ์ถ๋ ฅ์ ํ๋ฉด str์ด ๋์ค๊ณ , repr์ ํธ์ถํ๊ณ ์ถ๋ค๋ฉด repr(๊ฐ์ฒด)๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.