Search
Duplicate

Python Object Oriented Programming

์ƒ์„ฑ์ž
๋ถ„๋ฅ˜
ํŒŒ์ด์ฌ
์ƒ์„ฑ์ผ
2023/02/16 14:02

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
โ—ฆ
๋ณต์žกํ•œ ํด๋กœ์ ธ ํ•จ์ˆ˜๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ