Python Object Oriented Programming
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ์
โข
Object-Oriented Programming, OOP
โข
๊ฐ์ฒด : ์ค์ํ์์ ์ผ์ข
์ ๋ฌผ๊ฑด
โฆ
์์ฑ(Attribute) ์ ํ๋(Action) ์ ๊ฐ์ง
โข
OOP ๋ ์ด๋ฌํ ๊ฐ์ฒด ๊ฐ๋
์ ํ๋ก๊ทธ๋จ์ผ๋ก ํํ
โฆ
์์ฑ์ ๋ณ์(Variable), ํ๋์ ํจ์(Method) ๋ก ํํ๋จ
โข
ํ์ด์ฌ ์ญ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋จ ์ธ์ด
ex)
โข
์ธ๊ณต์ง๋ฅ ์ถ๊ตฌ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค๊ณ ๊ฐ์
โข
๊ฐ์ฒด ์ข
๋ฅ : ํ, ์ ์, ์ฌํ, ๊ณต
โข
Action
โฆ
์ ์ - ๊ณต์ ์ฐจ๋ค, ํจ์คํ๋ค
โฆ
์ฌํ - ํ์ฌ์ ๋ถ๋ค, ๊ฒฝ๊ณ ๋ฅผ ์ฃผ๋ค
โข
Attribute
โฆ
์ ์ - ์ ์ ์ด๋ฆ, ํฌ์ง์
, ์์ํ
โฆ
ํ - ํ ์ด๋ฆ, ํ ์ฐ๊ณ ์ง, ํ์์ ์ ์
โข
OOP ๋ ์ค๊ณ๋์ ํด๋นํ๋ ํด๋์ค(class) ์ ์ค์ ๊ตฌํ์ฒด์ธ ์ธ์คํด์ค(instance) ๋ก ๋๋๋ค
โฆ
Class - ๋ถ์ด๋นตํ
โฆ
์ธ์คํด์ค - ๋ถ์ด๋นต
Objects in Python
ํ์ด์ฌ naming rule
โข
ex) CamelCase โ ํ์ด์ฌ Class ๋ช
์ ์ฌ์ฉ
โข
ex) snake_case โ ํ์ด์ฌ ํจ์/๋ณ์๋ช
์ ์ฌ์ฉ
Attribute ์ถ๊ฐํ๊ธฐ
โข
Attribute ์ถ๊ฐ๋ __ init __ , self ์ ํจ๊ป
โข
__ init __ ์ ๊ฐ์ฒด ์ด๊ธฐํ ์์ฝํจ์
__ ์๋ฏธ
โข
__ ๋ ํน์ํ ์์ฝ ํจ์๋ ๋ณ์ ๊ทธ๋ฆฌ๊ณ ํจ์๋ช
๋ณ๊ฒฝ(๋งจ๊ธ๋ง)์ผ๋ก ์ฌ์ฉ
โฆ
ex) __ main __ , __ add __ , __ str __ , __eq __
method ๊ตฌํํ๊ธฐ
โข
method(Action) ์ถ๊ฐ๋ ๊ธฐ์กด ํจ์์ ๊ฐ์ผ๋, ๋ฐ๋์ self ๋ฅผ ์ถ๊ฐํด์ผ๋ง class ํจ์๋ก ์ธ์ ๋๋ค
OOP Implementation Example
โข
๊ตฌํ๊ฐ๋ฅํ OOP ๋ง๋ค๊ธฐ - ๋
ธํธ๋ถ
์์ (Inheritance)
โข
๋ถ๋ชจ ํด๋์ค๋ก ๋ถํฐ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ์ ์์ ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฒ
๋คํ์ฑ (Polymorphism)
โข
๊ฐ์ ์ด๋ฆ ๋ฉ์๋์ ๋ด๋ถ ๋ก์ง์ ๋ค๋ฅด๊ฒ ์์ฑ
โข
Dynamic Typing ํน์ฑ์ผ๋ก ์ธํด ํ์ด์ฌ์์๋ ๊ฐ์ ๋ถ๋ชจํด๋์ค์ ์์์์ ์ฃผ๋ก ๋ฐ์ํจ
โข
์ค์ํ OOP์ ๊ฐ๋
๊ทธ๋ฌ๋ ๋๋ฌด ๊น๊ฒ ์ ํ์ X
๊ฐ์์ฑ (Visibility)
โข
๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋ ๋ ๋ฒจ์ ์กฐ์ ํ๋๊ฒ
โข
๋๊ตฌ๋ ๊ฐ์ฒด ์์ ๋ชจ๋ ๋ณ์๋ฅผ ๋ณผ ํ์๊ฐ ์์
โฆ
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๊ฐ ์์๋ก ์ ๋ณด ์์
โฆ
ํ์ ์๋ ์ ๋ณด์๋ ์ ๊ทผํ ํ์๊ฐ ์์
โฆ
๋ง์ฝ ์ ํ์ผ๋ก ํ๋งคํ๋ค๋ฉด? ์์ค์ ๋ณดํธ
self.__items โ Private ๋ณ์๋ก ์ ์ธ, ํ๊ฐ์ฒด๊ฐ ์ ๊ทผ ๋ชปํ๋ค
decorate
โข
First-class objects
โฆ
์ผ๋ฑํจ์ ๋๋ ์ผ๊ธ๊ฐ์ฒด
โฆ
๋ณ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํ ๋น์ด ๊ฐ๋ฅํ ๊ฐ์ฒด
โฆ
ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ์ด ๊ฐ๋ฅ + ๋ฆฌํด๊ฐ์ผ๋ก ์ฌ์ฉ
โ ํ์ด์ฌ์ ํจ์๋ ์ผ๊ธํจ์
โข
Inner function
โฆ
ํจ์ ๋ด์ ๋ ๋ค๋ฅธ ํจ์๊ฐ ์กด์ฌ
โฆ
closures : inner function์ ๋ฆฌํด๊ฐ์ผ๋ก ๋ฐํ
โข
Decorator function
โฆ
๋ณต์กํ ํด๋ก์ ธ ํจ์๋ฅผ ๊ฐ๋จํ๊ฒ