์ด ์˜์—ญ์„ ๋ˆ„๋ฅด๋ฉด ์ฒซ ํŽ˜์ด์ง€๋กœ ์ด๋™
ํ•ดํ”ผํ•˜๊ฐœ ๋ธ”๋กœ๊ทธ์˜ ์ฒซ ํŽ˜์ด์ง€๋กœ ์ด๋™

ํ•ดํ”ผํ•˜๊ฐœ

ํŽ˜์ด์ง€ ๋งจ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๊ธฐ

[ํŒŒ์ด์ฌ/Python] ๊ธฐ์ดˆ ๋ฌธ๋ฒ•

ํ•ดํ”ผํ•˜๊ฐœ

[ํŒŒ์ด์ฌ/Python] ๊ธฐ์ดˆ ๋ฌธ๋ฒ•

  • 2024.01.23 20:29
  • ๐Ÿ“š Language/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

๋‹ค๋ฅธ ๊ธ€

๋‹ค๋ฅธ ๊ธ€ ๋” ๋‘˜๋Ÿฌ๋ณด๊ธฐ

์ •๋ณด

ํ•ดํ”ผํ•˜๊ฐœ ๋ธ”๋กœ๊ทธ์˜ ์ฒซ ํŽ˜์ด์ง€๋กœ ์ด๋™

ํ•ดํ”ผํ•˜๊ฐœ

  • ํ•ดํ”ผํ•˜๊ฐœ์˜ ์ฒซ ํŽ˜์ด์ง€๋กœ ์ด๋™

๋ฉ”๋‰ด

  • About Me
  • Guest Book

๊ฒ€์ƒ‰

์นดํ…Œ๊ณ ๋ฆฌ

  • ๐Ÿ‘จโ€๐Ÿ’ป development (4)
    • ๐Ÿ“š Language (1)
      • java (0)
      • python (1)
    • ๐Ÿ’ฟ Server-Framework (0)
      • intro (0)
      • spring (0)
    • ๐Ÿ—๏ธ Infra (0)
      • intro (0)
      • kubernetes (0)
      • docker (0)
    • ๐Ÿ“– Algorithm (1)
      • concept (1)
      • problem-solving (0)
    • ๐Ÿ“ข etc (2)
      • talk (2)

์•„์นด์ด๋ธŒ

์ •๋ณด

maprk์˜ ํ•ดํ”ผํ•˜๊ฐœ

ํ•ดํ”ผํ•˜๊ฐœ

maprk

๋‚˜์˜ ์™ธ๋ถ€ ๋งํฌ

  • Github
  • LinkedIn

๋ธ”๋กœ๊ทธ ๊ตฌ๋…ํ•˜๊ธฐ

  • ๊ตฌ๋…ํ•˜๊ธฐ
  • RSS ํ”ผ๋“œ

๋ฐฉ๋ฌธ์ž

  • ์ „์ฒด ๋ฐฉ๋ฌธ์ž
  • ์˜ค๋Š˜
  • ์–ด์ œ

ํ‹ฐ์Šคํ† ๋ฆฌ

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ์ด ๋ธ”๋กœ๊ทธ ๊ด€๋ฆฌํ•˜๊ธฐ
  • ๊ธ€์“ฐ๊ธฐ
Powered by Tistory / Kakao. ยฉ maprk. Designed by Fraccino.

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.