πŸ’¬About Type

κΉ€μ„Έμ€€Β·2020λ…„ 11μ›” 18일
0

Concept Log

λͺ©λ‘ 보기
1/2

κ°•νƒ€μž… vs μ•½νƒ€μž…

μ•„λ–€ μ–Έμ–΄μ—μ„œ ν˜•λ³€ν™˜μ΄ 일어날 λ•Œ

κ°•νƒ€μž… μ–Έμ–΄λŠ” 암묡적인 ν˜• λ³€ν™˜μ„ ν—ˆμš©ν•˜μ§€ μ•Šκ³  ( νƒ€μž… 검사λ₯Ό ν†΅κ³Όν•˜μ§€ λͺ»ν•œ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 자체λ₯Ό λ§‰λŠ”λ‹€)

μ•½νƒ€μž… μ–Έμ–΄λŠ” ν˜•μ΄ λ‹€λ₯Έ 경우 정해진 룰에 따라 μ•”λ¬΅μ μœΌλ‘œ ν˜• λ³€ν™˜μ„ ν—ˆμš©ν•œλ‹€ (λŸ°νƒ€μž„μ— νƒ€μž… 였λ₯˜λ₯Ό λ§Œλ‚˜λŠ” ν•œμ΄ μžˆλ”λΌλ„ 싀행을 막지 μ•ŠλŠ”λ‹€)

// Javascript
"1" + 1 = "11" // weakly-typed

// Go
var num1 int = 17 
var num2 float32 = 19.2

var sum1 float32 = num1 + num2 // error λ°œμƒ strongly-typed  
var num3 float32 = float32(num1) //intλ₯Ό float32둜 λͺ…μ‹œμ  ν˜•λ³€ν™˜ ν•„μš” 
var sum2 float32 = num3 + num2 //정상 λ™μž‘

정적 νƒ€μž… 검사 vs 동적 νƒ€μž… 검사

정적 νƒ€μž… 검사λ₯Ό ν•˜λŠ” μ–Έμ–΄λŠ” νƒ€μž…(μžλ£Œν˜•)이 μ˜¬λ°”λ₯Έμ§€μ— λŒ€ν•œ 검사λ₯Ό λŸ°νƒ€μž„ 이전(컴파일 μ‹œκ°„)에 μ‹œν–‰ν•œλ‹€.

λ°˜λŒ€λ‘œ 동적 νƒ€μž… 검사λ₯Ό ν•˜λŠ” μ–Έμ–΄λŠ” λŸ°νƒ€μž„ μ‹œμ— νƒ€μž… 검사λ₯Ό μ‹œν–‰ν•œλ‹€.


Gradual Typing (점진적 타이핑)

동적 νƒ€μž… κ²€μ‚¬λ§Œμ„ μˆ˜ν–‰ν•˜λ˜ μ–Έμ–΄μ—μ„œ 정적 νƒ€μž… 검사λ₯Ό λ„μž…ν•˜κ³ μž ν•˜λŠ” μ‹œλ„μ—μ„œ λ‚˜νƒ€λ‚¬λ‹€.

ν”„λ‘œκ·Έλž˜λ¨Έκ°€ λͺ…μ‹œν•œ 일뢀 λΆ€λΆ„λ§Œ 정적 νƒ€μž… 검사λ₯Ό 거치게 ν•˜κ³  λ‚˜λ¨Έμ§€ 뢀뢄은 κ·ΈλŒ€λ‘œ 동적 νƒ€μž… 검사가 이루어진닀.

const areYouCool: boolean = true;
const answer: number = 42;
const typescript: string = "great";
const greetings: string = `
Hello, Readers!
Welcome to TypeScript.
`;
const hasType: Object = {
  TypeScript: true,
  JavaScript: false
};

// Gradual Typing을 μ§€μ›ν•˜λŠ” λŒ€ν‘œμ μΈ μ–Έμ–΄ Typescript의 예제

Pythonμ—μ„œ ν•˜λŠ” 방법

1. Type Annotation

def add(x: int, y: int) -> int:
    return x + y

print(add("this is ", "add function")) # "this is add function" λ¬Έμ œμ—†μ΄ μž‘λ™ν•œλ‹€

μœ„μ™€ 같이 ν•˜λ©΄ Pycharm (JetBrains) μ—λ””ν„°μ—μ„œλŠ” νƒ€μž…μ— λŒ€ν•œ κ²½κ³ λ₯Ό λ„μ›Œμ£ΌκΈ°λ§Œ ν•˜κ³  문제λ₯Ό λ§‰μ•„μ£Όμ§€λŠ” μ•ŠλŠ”λ‹€.

2. mypy

pip install mypyλ₯Ό ν†΅ν•΄μ„œ κ°„λ‹¨ν•˜κ²Œ μ„€μΉ˜ν•˜κ³ 

mypy app.py mypyλ₯Ό 톡해 μœ„ μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œν‚€λ©΄ νƒ€μž…μ„ μ²΄ν¬ν•˜κ³  였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆλ‹€

app.py:5: error: Argument 1 to "add" has incompatible type "str"; expected "int"
app.py:5: error: Argument 2 to "add" has incompatible type "str"; expected "int"

intλ‚˜ strκ³Ό 같은 λ‹¨μˆœν•œ νƒ€μž…μ΄ μ•„λ‹Œ listλ‚˜ tuple에 λŒ€ν•œ νƒ€μž… 검사λ₯Ό μ‚¬μš©ν• λ €λ©΄ typing νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜λ©΄ λ˜μ§€λ§Œ λ‚˜μ€‘μ— μ‚¬μš©ν•˜κ²Œ 될 λ•Œ μžμ„Έν•˜κ²Œ μ•Œμ•„λ³Όλ € ν•œλ‹€.

Reference:
Type Annotation, typing, mypy - 더 λ‚˜μ€ Python μ½”λ“œλ₯Ό μœ„ν•΄


0개의 λŒ“κΈ€