[ํ์ด์ฌ/Python] ๊ธฐ์ด ๋ฌธ๋ฒ
๊ธ ์์ฑ์: maprk
ํ์ด์ฌ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ผ ํ๋ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ์ ๋ฆฌํ ๋ฌธ์์ ๋๋ค. ๋น ์ง ๋ด์ฉ์ด ์์ ์๋ ์์ผ๋ ๋ ๊ณต๋ถํ๊ณ ์ถ์ผ๋ฉด ์๋ฃ๋ฅผ ์ฐพ์๋ณด์ธ์.
01. ํ์ด์ฌ ์ธ์ด ํน์ง
- ํ์ด์ฌ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋ฌ๋์ปค๋ธ(Learning Curve)๊ฐ ๋ฎ๋ค. ์ฝ๊ฒ ๋งํด์ ๋น ๋ฅด๊ฒ ์ต๋ํ ์ ์๋ ์ธ์ด์ด๋ค.
- ํ์ด์ฌ์ ์คํฌ๋ฆฝํธ ์ธ์ด(Script Language)์ด๋ค.
- ์ปดํ์ผ(Compile) ๊ณผ์ ์ด ํ์ํ์ง ์์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ํ์ธํ๊ณ ์์ ํ๋ฉด์ ์์ฝ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
- ์ปดํ์ผ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ๊ฒ
- ๋์ ํ์ดํ(Dynamic Typing)์ด๋ค.
- ๋ณ์์ ์๋ฃํ์ ์ง์ ํ์ง ์๊ณ ๋จ์ํ ์ ์ธํ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ฐ์ ์ง์ ํ ์ ์๋ค.
- ๊ทธ๋ฌ๋ ํ์ ์ ์์ ์ฑ์ด ์ค์ํ ์๋ฒ ๊ฐ๋ฐ์์๋ ์ ์ ํ์ดํ(Static Typing)์ผ๋ก ๋ฐ๊พธ์ด์ ๊ฐ๋ฐ ์งํํ๋ ๊ฒ์ด ์ข๋ค.
- ๊ฐ๊ฒฐํ๊ณ ์ฌ์ด ๋ฌธ๋ฒ์ ๊ฐ์ง๊ณ ์๋ค.
- ๋น ๋ฅธ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๊ฐ์ง๋ค.
์์ ๊ฐ์ ์ด์ ์ด์ธ์๋ ํ์ด์ฌ์ ์ฃผ๋ก AI ๊ฐ๋ฐ์ ๋ง์ด ์ฐ์ด์ง๋ง, ์์ฆ์ ์๋ฒ ๊ฐ๋ฐ์๋ ์์ฃผ ์ฐ์ธ๋ค.
02. ๋ฐ์ฝ๋ ์ดํฐ(Decorator)
- ๋ฐ์ฝ๋ ์ดํฐ๋ ์ฅ์ํ๋ค, ๊พธ๋ฏธ๋ค๋ผ๋ ๋ป์ ๊ฐ์ง decorate์ er(or)์ ๋ถ์ธ ๋ง์ธ๋ฐ ์ฅ์ํ๋ ๋๊ตฌ ์ ๋๋ก ์ดํดํ ์ ์๋ค.
- ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๊ธฐ์กด์ ๋ง๋ค์ด์ง ํจ์๊ฐ ๋ค๋ฅธ ๊ณณ์์ ์ด๋ฏธ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์ ๋(๋ณ๊ฒฝ์ด ์ด๋ ค์ด ๊ฒฝ์ฐ) ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ํ์ํ ๋ด์ฉ์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- ๋ฐ์ฝ๋ ์ดํฐ๋ ์ค๋ณต ์ฝ๋๋ฅผ ์ฌํ์ฉํ๋ ๊ณผ์ ์ ์ฌ์ฉํ๋ค๊ณ ์ดํดํ ์ ์๋ค.
def decorator(func):
def excute():
print("decorator excute.")
func()
return excute()
@decorator
def test1():
print("test1.")
@decorator
def test2():
print("test2.")
@decorator
def test3():
print("test3.")
>> decorator excute.
>> test1.
>> decorator excute.
>> test2.
>> decorator excute.
>> test3.
03. ํด๋์ค(Class)
- ํ์ด์ฌ์ ํด๋์ค๋ ์๋ฐ์ฒ๋ผ ์์์ด ๊ฐ๋ฅํ๋ค.
- `class ํด๋์ค์ด๋ฆ(์์ํ ํด๋์ค๋ช ):
- ํด๋์ค๋ ๊ฐ์ฒด์งํฅ์์ ์ค์ํ ๋ฌธ๋ฒ์ด๋ ์์งํ๋ ๊ฒ์ด ์ข๋ค.
- ํ์ด์ฌ๋ ํด๋์ค๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ์ฒด์งํฅ์ ์ค๊ณ๊ฐ ๊ฐ๋ฅํ๋ค.
class Cal:
def __init__(self, a, b):
self.a = a
self.b = b
def add(self) -> int:
return self.a + self.b
def sub(self) -> int:
return self.a + self.b
def mul(self) -> int:
return self.a * self.b
def div(self) -> int:
return self.a / self.b
cal1 = Cal(2, 1)
print(cal1.a)
print(cal1.b)
print(cal1.add())
print(cal1.sub())
>> 2
>> 1
>> 3
>> 1
- ์ธ์คํด์ค ์์ ์ ์ง์นญํ ๋๋ self ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
- def __init__ ํจ์๋ ์์ฑ์ ์ญํ ์ ์ํํ๋ค.
04. ์ถ์ํด๋์ค(Abstract Class)/์ถ์๋ฉ์๋(Abstact Method)
- ํ์ด์ฌ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ถ์ํด๋์ค, ์ธํฐํ์ด์ค ๋ ๊ฐ ๋ค ์กด์ฌํ๋ค.
- ์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค์ ๋ํ์ ์ธ ์ฐจ์ด๋ก๋ ์ธํฐํ์ด์ค๋ ์ถ์๋ฉ์๋๋ง ๊ฐ์ง ์ ์๋ค.
import abc
class AbstractClass:
def __init__(self, a, b)
self.a = a
self.b = b
def add() -> int:
return self.a + self.b
@abc.abstractmethod
def sub() -> int:
...
class InterfaceClass(abc.ABC):
@abc.abstractmethd
def add() -> int:
...
class ImplementInterfaceClass(InterfaceClass):
def add() -> int:
return 2 + 3
- ์ธํฐํ์ด์ค ์ถ์ํ๋ ๋์ ์์กด์ฑ ์ฃผ์
์ ์์ด์ ์ค์ํ๋ค.
- ์๋ฅผ ๋ค์ด, ๊ฐ์ฅ ๋ฎ์ ๊ณ์ธต์ธ database์ adapter/interface/mapper ๋ฑ ํต์ ์ ์ฌ์ฉํ๋ค.
- ์ฆ, ๋น์ฆ๋์ค ๋ก์ง์ด ๊ตฌํ์ฒด ์ฝ๋์ ์์กดํ์ง ์๋๋ก ํ๋ค.
05. ํ์ (Type)
- ํ์ด์ฌ์ ๋์ ํ์ดํ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ํ์ ์ ์ธ์ด ์ค์ํ์ง ์์ ์ ์๋ค.
- ๊ทธ๋ฌ๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ํ์ ์ด ์ค์ํ๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋๋ค.
- ํนํ ์์ฆ ๋ง์ ์ํคํ ์ฒ(Architecture)๊ฐ MSA๋ก ๋์ด์๊ธฐ ๋๋ฌธ์, ์ธ์ด์ ํ๋ ์์ํฌ์ ๋ํ ์์ ๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋์ฑ ๋ ํ์ ์ ๋ง์ถ ํ์๊ฐ ์๋ค.
from Typing import List, Dict, Union, Optional
_T = TypeVar("_T")
@dataclass
class Type:
string_v: str
int_v: int
list_v: List
dict_v: Dict[str, str]
union_v: Union[int, str]
optional_v: Optional[int, str]
generic_v: _T
- dict: ํค(Key), ๊ฐ(Value)๋ก ์ด๋ฃจ์ด์ง ์๋ฃํ -> ํค์ ์ค๋ณต์ ํ๋ฝํ์ง ์๋๋ค.
- union: ์ ์ธ๋ ์๋ฃํ์ด ์ฌ ์ ์๋ค. -> ํฉ์งํฉ
- optional: ์์ ์๋ ์๊ณ ์์ ์๋ ์๋ค. -> ์์ผ๋ฉด None ์ฒ๋ฆฌ
- generic: ์ด๋ค ํ์ ์ด๋ ์ฌ ์ ์๋ค. -> ๋คํ์ฑ์์ ์ค์
728x90
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.