ν•¨μˆ˜

soo-hyeonΒ·2021λ…„ 2μ›” 1일
0

파이썬

λͺ©λ‘ 보기
11/15

파이썬 ν•¨μˆ˜μ˜ ꡬ쑰

πŸ”‘ 파이썬 ν•¨μˆ˜μ˜ κ΅¬μ‘°λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

def ν•¨μˆ˜λͺ…(λ§€κ°œλ³€μˆ˜) :
    <μˆ˜ν–‰ν•  λ¬Έμž₯1>
    <μˆ˜ν–‰ν•  λ¬Έμž₯2>

defλŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•˜λŠ” μ˜ˆμ•½μ–΄μ΄λ©°, ν•¨μˆ˜ 이름은 ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” μ‚¬λžŒμ΄ μž„μ˜λ‘œ λ§Œλ“€ 수 μžˆλ‹€. ν•¨μˆ˜ 이름 λ’€ κ΄„ν˜Έ μ•ˆμ˜ λ§€κ°œλ³€μˆ˜λŠ” 이 ν•¨μˆ˜μ— μž…λ ₯으둜 μ „λ‹¬λ˜λŠ” 값을 λ°›λŠ” λ³€μˆ˜μ΄λ‹€. μ΄λ ‡κ²Œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•œ λ‹€μŒ if, while, forλ¬Έ λ“±κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ ν•¨μˆ˜μ—μ„œ μˆ˜ν–‰ν•  λ¬Έμž₯을 μž…λ ₯ν•œλ‹€.

μ˜ˆμ‹œ

def add(a, b) :
    return a + b
a = 3
b = 4
c = add(a, b)
print(c)

μ—¬κΈ°μ—μ„œ return은 ν•¨μˆ˜μ˜ 결괏값을 λŒλ €μ£ΌλŠ” λͺ…령어이닀.

λ§€κ°œλ³€μˆ˜μ™€ 인수

πŸ”‘ λ§€κ°œλ³€μˆ˜(parameter)와 인수(arguments)λŠ” ν˜Όμš©ν•΄μ„œ μ‚¬μš©λ˜λŠ” ν—·κ°ˆλ¦¬λŠ” μš©μ–΄μ΄λ―€λ‘œ 잘 κΈ°μ–΅ν•΄ λ‘μž. λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜μ— μž…λ ₯으둜 μ „λ‹¬λœ 값을 λ°›λŠ” λ³€μˆ˜λ₯Ό μ˜λ―Έν•˜κ³  μΈμˆ˜λŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ μ „λ‹¬ν•˜λŠ” μž…λ ₯값을 μ˜λ―Έν•œλ‹€.

def add(a, b) :  # a, bλŠ” λ§€κ°œλ³€μˆ˜
    return a+b
    
print(add(3, 4)) # 3, 4λŠ” 인수

μž…λ ₯κ°’κ³Ό 결괏값에 λ”°λ₯Έ ν•¨μˆ˜μ˜ ν˜•νƒœ

πŸ”‘ ν•¨μˆ˜λŠ” λ“€μ–΄μ˜¨ μž…λ ₯값을 λ°›μ•„ μ–΄λ–€ 처리λ₯Ό ν•˜μ—¬ μ μ ˆν•œ 결괏값을 λŒλ €μ€€λ‹€.

πŸ”₯ μž…λ ₯κ°’ --> ν•¨μˆ˜ --> 결괏값

β–½ ν•¨μˆ˜μ˜ ν˜•νƒœλŠ” μž…λ ₯κ°’κ³Ό κ²°κ΄κ°’μ˜ 쑴재 μœ λ¬΄μ— 따라 4κ°€μ§€ μœ ν˜•μœΌλ‘œ λ‚˜λ‰œλ‹€.

일반적인 ν•¨μˆ˜

πŸ“Œ μž…λ ₯값이 있고 결괏값이 μžˆλŠ” ν•¨μˆ˜κ°€ 일반적인 ν•¨μˆ˜μ΄λ‹€.

μ˜ˆμ‹œ)

def add(a, b) :
    result = a + b
    return result
a = add(3, 4)
print(a)


add ν•¨μˆ˜λŠ” 2개의 μž…λ ₯값을 λ°›μ•„μ„œ μ„œλ‘œ λ”ν•œ 결괏값을 λŒλ €μ€€λ‹€.

이처럼 μž…λ ₯κ°’κ³Ό 결괏값이 μžˆλŠ” ν•¨μˆ˜μ˜ μ‚¬μš©λ²•μ„ μ •λ¦¬ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.
⭐ 결괏값을 받을 λ³€μˆ˜ = ν•¨μˆ˜μ΄λ¦„(μž…λ ₯인수1, μž…λ ₯인수2, ...)

μž…λ ₯값이 μ—†λŠ” ν•¨μˆ˜

μ˜ˆμ‹œ)

def say() :
    return 'Hi'
a = say()
print(a)


μœ„ ν•¨μˆ˜λ₯Ό μ“°κΈ° μœ„ν•΄μ„œλŠ” say()처럼 κ΄„ν˜Έ μ•ˆμ— 아무 값도 λ„£μ§€ μ•Šμ•„μ•Ό ν•œλ‹€. 이 ν•¨μˆ˜λŠ” μž…λ ₯값은 μ—†μ§€λ§Œ κ²°κ΄κ°’μœΌλ‘œ HiλΌλŠ” λ¬Έμžμ—΄μ„ λŒλ €μ€€λ‹€. a = say()처럼 μž‘μ„±ν•˜λ©΄ a에 Hi λ¬Έμžμ—΄μ΄ λŒ€μž…λ˜λŠ” 것이닀.

이처럼 μž…λ ₯값이 μ—†κ³  κ²°κ΄κ°’λ§Œ μžˆλŠ” ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같이 μ‚¬μš©λœλ‹€.
⭐ 결괏값을 받을 λ³€μˆ˜ = ν•¨μˆ˜μ΄λ¦„()

결괏값이 μ—†λŠ” ν•¨μˆ˜

μ˜ˆμ‹œ)

def add(a, b) :
    print("%d, %d의 합은 %dμž…λ‹ˆλ‹€." %(a, b, a+b))
add(3, 4)


결괏값이 μ—†λŠ” ν•¨μˆ˜λŠ” ν˜ΈμΆœν•΄λ„ λŒλ €μ£ΌλŠ” 값이 μ—†κΈ° λ•Œλ¬Έμ— μœ„μ™€ 같이 μ‚¬μš©ν•œλ‹€.

μ•„λ§ˆλ„ μ—¬λŸ¬λΆ„μ€ β€˜3, 4의 합은 7μž…λ‹ˆλ‹€.β€™λΌλŠ” λ¬Έμž₯을 좜λ ₯ν•΄ μ£Όμ—ˆλŠ”λ° μ™œ 결괏값이 μ—†λ‹€λŠ” 것인지 μ˜μ•„ν•˜κ²Œ 생각할 것이닀. 이 뢀뢄이 μ΄ˆλ³΄μžλ“€μ΄ ν˜Όλž€μŠ€λŸ¬μ›Œν•˜λŠ” 뢀뢄이기도 ν•œλ° print문은 ν•¨μˆ˜μ˜ ꡬ성 μš”μ†Œ 쀑 ν•˜λ‚˜μΈ <μˆ˜ν–‰ν•  λ¬Έμž₯>에 ν•΄λ‹Ήν•˜λŠ” 뢀뢄일 뿐이닀. 결괏값은 λ‹Ήμ—°νžˆ μ—†λ‹€. 결괏값은 였직 return λͺ…λ Ήμ–΄λ‘œλ§Œ λŒλ €λ°›μ„ 수 μžˆλ‹€.

이λ₯Ό 확인해 보자. λŒλ €λ°›μ„ 값을 a λ³€μˆ˜μ— λŒ€μž…ν•˜μ—¬ 좜λ ₯ν•΄ 보면 결괏값이 μžˆλŠ”μ§€ μ—†λŠ”μ§€ μ•Œ 수 μžˆλ‹€.

def add(a, b) :
    print("%d, %d의 합은 %dμž…λ‹ˆλ‹€." %(a, b, a+b))
a = add(3, 4)
print(a)

a 값은 None이닀. Noneμ΄λž€ 거짓을 λ‚˜νƒ€λ‚΄λŠ” μžλ£Œν˜•μ΄λΌκ³  μ–ΈκΈ‰ν•œ 적이 μžˆλ‹€. add ν•¨μˆ˜μ²˜λŸΌ 결괏값이 없을 λ•Œ a = add(3, 4)처럼 μ“°λ©΄ ν•¨μˆ˜ addλŠ” λ°˜ν™˜ κ°’μœΌλ‘œ a λ³€μˆ˜μ— None을 λŒλ €μ€€λ‹€. 이것을 κ°€μ§€κ³  결괏값이 μžˆλ‹€κ³  μƒκ°ν•˜λ©΄ κ³€λž€ν•˜λ‹€.

즉 결괏값이 μ—†λŠ” ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•œλ‹€.
⭐ ν•¨μˆ˜μ΄λ¦„(μž…λ ₯인수1, μž…λ ₯인수2, ...)

μž…λ ₯값도 결괏값도 μ—†λŠ” ν•¨μˆ˜

μ˜ˆμ‹œ)

def say() :
    print('Hi')
say()

μž…λ ₯ 인수λ₯Ό λ°›λŠ” λ§€κ°œλ³€μˆ˜λ„ μ—†κ³  return문도 μ—†μœΌλ‹ˆ μž…λ ₯값도 결괏값도 μ—†λŠ” ν•¨μˆ˜μ΄λ‹€.

이 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 방법은 단 ν•œ 가지이닀.
즉 μž…λ ₯값도 결괏값도 μ—†λŠ” ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•œλ‹€.
⭐ ν•¨μˆ˜μ΄λ¦„()

λ§€κ°œλ³€μˆ˜ μ§€μ •ν•˜μ—¬ ν˜ΈμΆœν•˜κΈ°

πŸ”‘ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ λ§€κ°œλ³€μˆ˜λ₯Ό μ§€μ •ν•  μˆ˜λ„ μžˆλ‹€.

μ˜ˆμ‹œ)

def add(a, b) :
    return a+b
result = add(a=3, b=7)
print(result)

result2 = add(b=5, a=3)
print(result2)

μž…λ ₯값이 λͺ‡ κ°œκ°€ 될지 λͺ¨λ₯Ό λ•ŒλŠ” μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ?

πŸ”‘ μž…λ ₯값이 μ—¬λŸ¬ 개일 λ•Œ κ·Έ μž…λ ₯값을 λͺ¨λ‘ 더해 μ£ΌλŠ” ν•¨μˆ˜λ₯Ό 생각해 보자. ν•˜μ§€λ§Œ λͺ‡ κ°œκ°€ μž…λ ₯될지 λͺ¨λ₯Ό λ•ŒλŠ” μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ? μ•„λ§ˆλ„ λ‚œκ°ν•  것이닀. νŒŒμ΄μ¬μ€ 이런 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 방법을 μ œκ³΅ν•œλ‹€.

def ν•¨μˆ˜μ΄λ¦„(*λ§€κ°œλ³€μˆ˜) :
    <μˆ˜ν–‰ν•  λ¬Έμž₯>

일반적으둜 λ³Ό 수 μžˆλŠ” ν•¨μˆ˜ ν˜•νƒœμ—μ„œ κ΄„ν˜Έ μ•ˆμ˜ λ§€κ°œλ³€μˆ˜ 뢀뢄이 *λ§€κ°œλ³€μˆ˜λ‘œ λ°”λ€Œμ—ˆλ‹€.

μ—¬λŸ¬ 개의 μž…λ ₯값을 λ°›λŠ” ν•¨μˆ˜ λ§Œλ“€κΈ°

λ‹€μŒ 예λ₯Ό 톡해 μ—¬λŸ¬ 개의 μž…λ ₯값을 λͺ¨λ‘ λ”ν•˜λŠ” ν•¨μˆ˜λ₯Ό 직접 λ§Œλ“€μ–΄ 보자. 예λ₯Ό λ“€μ–΄ add_many(1, 2)이면 3을, add_many(1,2,3)이면 6을, add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)이면 55λ₯Ό λŒλ €μ£ΌλŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ 보자.

def add_many(*args) :
    result = 0
    for i in args :
        result = result + i
    return result
    
result = add_many(1, 2, 3)
print(result)

μœ„μ—μ„œ λ§Œλ“  add_many ν•¨μˆ˜λŠ” μž…λ ₯값이 λͺ‡ κ°œμ΄λ“  상관이 μ—†λ‹€. *args처럼 λ§€κ°œλ³€μˆ˜ 이름 μ•žμ— *을 뢙이면 μž…λ ₯값을 μ „λΆ€ λͺ¨μ•„μ„œ νŠœν”Œλ‘œ λ§Œλ“€μ–΄ μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€. λ§Œμ•½ add_many(1, 2, 3)처럼 이 ν•¨μˆ˜λ₯Ό μ“°λ©΄ argsλŠ” (1, 2, 3)이 되고, add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)처럼 μ“°λ©΄ argsλŠ” (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)이 λœλ‹€. μ—¬κΈ°μ—μ„œ *argsλŠ” μž„μ˜λ‘œ μ •ν•œ λ³€μˆ˜ 이름이닀. *pey, *python처럼 아무 μ΄λ¦„μ΄λ‚˜ 써도 λœλ‹€.

μž…λ ₯값을 λ”•μ…”λ„ˆλ¦¬λ‘œ λ§Œλ“€κΈ°

πŸ”‘ **kwargs처럼 λ§€κ°œλ³€μˆ˜ 이름 μ•žμ— **을 뢙이면 λ§€κ°œλ³€μˆ˜ kwargsλŠ” λ”•μ…”λ„ˆλ¦¬κ°€ 되고 λͺ¨λ“  key=value ν˜•νƒœμ˜ 결괏값이 κ·Έ λ”•μ…”λ„ˆλ¦¬μ— μ €μž₯λœλ‹€.

예제)

def print_kwargs(**kwargs) :
    print(kwargs)
print_kwargs(a=1)
print_kwargs(name='foo', age=3)

ν•¨μˆ˜μ˜ 결괏값은 μ–Έμ œλ‚˜ ν•˜λ‚˜μ΄λ‹€

λ‹€μŒ μ˜ˆμ‹œλ₯Ό 보자.

def add_and_mul(a, b) :
    return a+b, a*b
    
result = add_and_mul(3, 4)
print(result)

결괏값은 a+b와 a*b 2개인데 결괏값을 λ°›μ•„λ“€μ΄λŠ” λ³€μˆ˜λŠ” result ν•˜λ‚˜λ§Œ μ“°μ˜€μœΌλ‹ˆ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šμ„κΉŒ? λ‹Ήμ—°ν•œ μ˜λ¬Έμ΄λ‹€. ν•˜μ§€λ§Œ 였λ₯˜λŠ” λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έ μ΄μœ λŠ” ν•¨μˆ˜μ˜ 결괏값은 2κ°œκ°€ μ•„λ‹ˆλΌ μ–Έμ œλ‚˜ 1κ°œλΌλŠ” 데 μžˆλ‹€. add_and_mul ν•¨μˆ˜μ˜ 결괏값 a+b와 a*bλŠ” νŠœν”Œκ°’ ν•˜λ‚˜μΈ (a+b, a*b)둜 λŒλ €μ€€λ‹€.

즉 κ²°κ΄κ°’μœΌλ‘œ (7, 12)λΌλŠ” νŠœν”Œ 값을 κ°–κ²Œ λ˜λŠ” 것이닀.

λ§Œμ•½ 이 ν•˜λ‚˜μ˜ νŠœν”Œ 값을 2개의 κ²°κ΄κ°’μ²˜λŸΌ λ°›κ³  μ‹Άλ‹€λ©΄ λ‹€μŒκ³Ό 같이 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ λœλ‹€.

result1, result2 = add_and_mul(3, 4)

μ΄λ ‡κ²Œ ν˜ΈμΆœν•˜λ©΄ result1, result2 = (7, 12)κ°€ λ˜μ–΄ result1은 7이 되고 result2λŠ” 12κ°€ λœλ‹€.

또 λ‹€μŒκ³Ό 같은 의문이 생길 μˆ˜λ„ μžˆλ‹€.

def add_and_mul(a, b) :
    return a+b
    return a*b
result = add_and_mul(3, 4)
print(result)


μœ„μ™€ 같이 return문을 2번 μ‚¬μš©ν•˜λ©΄ 2개의 결괏값을 λŒλ €μ£Όμ§€ μ•Šμ„κΉŒ? ν•˜μ§€λ§Œ νŒŒμ΄μ¬μ—μ„œ μœ„μ™€ 같은 ν•¨μˆ˜λŠ” μ°Έ 어리석은 ν•¨μˆ˜μ΄λ‹€.

μœ„μ—μ„œ λ³Ό 수 μžˆλ“―μ΄ 두 번째 return문인 return a*bλŠ” μ‹€ν–‰λ˜μ§€ μ•Šμ•˜λ‹€. λ”°λΌμ„œ 이 ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό μ™„μ „νžˆ λ™μΌν•˜λ‹€.

def add_and_mul(a, b) :
    return a+b

πŸ’₯ 즉 ν•¨μˆ˜λŠ” return문을 λ§Œλ‚˜λŠ” μˆœκ°„ 결괏값을 λŒλ €μ€€ λ‹€μŒ ν•¨μˆ˜λ₯Ό λΉ μ Έλ‚˜κ°€κ²Œ λœλ‹€.

return의 또 λ‹€λ₯Έ μ“°μž„μƒˆ

πŸ”‘ νŠΉλ³„ν•œ 상황일 λ•Œ ν•¨μˆ˜λ₯Ό λΉ μ Έλ‚˜κ°€κ³  μ‹Άλ‹€λ©΄ return을 λ‹¨λ…μœΌλ‘œ μ¨μ„œ ν•¨μˆ˜λ₯Ό μ¦‰μ‹œ λΉ μ Έλ‚˜κ°ˆ 수 μžˆλ‹€. λ‹€μŒ 예λ₯Ό 보자.

def say_nick(nick) :
    if nick == "바보" :
        return
    print("λ‚˜μ˜ 별λͺ…은 %s μž…λ‹ˆλ‹€." %nick)
    
say_nick('μ•Όν˜Έ')
say_nick('바보')


μœ„ ν•¨μˆ˜λŠ” '별λͺ…'을 μž…λ ₯으둜 전달받아 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. 이 ν•¨μˆ˜ μ—­μ‹œ λ°˜ν™˜ κ°’(결괏값)은 μ—†λ‹€.

λ§Œμ•½μ— μž…λ ₯κ°’μœΌλ‘œ '바보'λΌλŠ” 값이 λ“€μ–΄μ˜€λ©΄ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜μ§€ μ•Šκ³  ν•¨μˆ˜λ₯Ό μ¦‰μ‹œ λΉ μ Έλ‚˜κ°„λ‹€.

이처럼 return으둜 ν•¨μˆ˜λ₯Ό λΉ μ Έλ‚˜κ°€λŠ” 방법은 μ‹€μ œ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 자주 μ‚¬μš©ν•œλ‹€.

λ§€κ°œλ³€μˆ˜μ— μ΄ˆκΉƒκ°’ 미리 μ„€μ •ν•˜κΈ°

μ˜ˆμ‹œ)

def say_myself(name, old, man=True): 
    print("λ‚˜μ˜ 이름은 %s μž…λ‹ˆλ‹€." % name) 
    print("λ‚˜μ΄λŠ” %dμ‚΄μž…λ‹ˆλ‹€." % old) 
    if man: 
        print("λ‚¨μžμž…λ‹ˆλ‹€.")
    else: 
        print("μ—¬μžμž…λ‹ˆλ‹€.")
        
say_myself("λ°•μ‘μš©", 27)
say_myself("λ°•μ‘μš©", 27, True)

μœ„ μ˜ˆμ‹œμ—μ„œ 2κ°€μ§€ 방법은 λͺ¨λ‘ λ™μΌν•œ κ²°κ³Όλ₯Ό 좜λ ₯ν•œλ‹€λŠ”κ²ƒμ„ λ³Ό 수 μžˆλ‹€.

ν•˜μ§€λ§Œ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μ— μ΄ˆκΉƒκ°’μ„ μ„€μ •ν•  λ•Œ μ£Όμ˜ν•  것이 ν•˜λ‚˜ μžˆλ‹€. λ§Œμ•½ μœ„μ—μ„œ λ³Έ say_myself ν•¨μˆ˜λ₯Ό λ‹€μŒκ³Ό 같이 λ§Œλ“€λ©΄ μ–΄λ–»κ²Œ 될까?

def say_myself(name, man=True, old): 
    print("λ‚˜μ˜ 이름은 %s μž…λ‹ˆλ‹€." % name) 
    print("λ‚˜μ΄λŠ” %dμ‚΄μž…λ‹ˆλ‹€." % old) 
    if man: 
        print("λ‚¨μžμž…λ‹ˆλ‹€.") 
    else: 
        print("μ—¬μžμž…λ‹ˆλ‹€.")

say_myself("λ°•μ‘μš©", 27)

이전 ν•¨μˆ˜μ™€ 바뀐 뢀뢄은 μ΄ˆκΉƒκ°’μ„ μ„€μ •ν•œ λ§€κ°œλ³€μˆ˜μ˜ μœ„μΉ˜μ΄λ‹€. 결둠을 미리 λ§ν•˜λ©΄ 이것은 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  λ•Œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

였λ₯˜ λ©”μ‹œμ§€λ₯Ό 보면 λ‹€μŒκ³Ό κ°™λ‹€.
SyntaxError: non-default argument follows default argument

μœ„ 였λ₯˜ λ©”μ‹œμ§€λŠ” μ΄ˆκΉƒκ°’μ„ μ„€μ •ν•΄ 놓은 λ§€κ°œλ³€μˆ˜ 뒀에 μ΄ˆκΉƒκ°’μ„ μ„€μ •ν•΄ 놓지 μ•Šμ€ λ§€κ°œλ³€μˆ˜λŠ” μ‚¬μš©ν•  수 μ—†λ‹€λŠ” λœ»μ΄λ‹€. 즉 λ§€κ°œλ³€μˆ˜λ‘œ (name, old, man=True)λŠ” λ˜μ§€λ§Œ (name, man=True, old)λŠ” μ•ˆ λœλ‹€λŠ” 것이닀.

πŸ”₯ μ΄ˆκΈ°ν™”μ‹œν‚€κ³  싢은 λ§€κ°œλ³€μˆ˜λ₯Ό 항상 λ’€μͺ½μ— λ†“λŠ” 것을 μžŠμ§€ 말자.

0개의 λŒ“κΈ€