π νλ‘κ·Έλλ° μΈμ΄ - Data Type
π« λ°μ΄ν° νμ - Data Type
λ°μ΄ν° κ°μ λͺ¨μ
κ³Ό κ·Έ κ°μ λνμ¬μ μ μ μ°μ°
λ€μ μ§ν©i.e.
int
- λ°μ΄ν° κ°μ λͺ¨μ: -2,147,483,648 ~ 2,147,483,647
- μ μλ μ°μ°: +, -, * , /, β¦
𫧠νλ‘κ·Έλλ° μΈμ΄κ° μ΄λ€ νμ μ μ 곡νλκ°?
- νλ‘κ·Έλλ° μμ
μ μ©μ΄νκ² μνν μ μλ μ λλ₯Ό κ²°μ νλ μ€μν μμ
- μ€μΈκ³μ μν κ°μ²΄λ€κ³Ό μ 맀μΉλλ λ°μ΄ν° νμ λ€μ λ§μ΄ μ 곡νλ κ²μ΄ μ€μ
- μ΄κΈ° μμ£Ό μ μ μμ λ°μ΄ν° νμ
λ§ μ 곡
- i.e. μ΄κΈ° Fortran, μ°κ²° 리μ€νΈμ νΈλ¦¬λ₯Ό ν¬μΈν° μμ΄ λ°°μ΄μ μ΄μ©νμ¬ κ΅¬μΆ
μκ°μ΄ νλ¦μ λ°λΌΒ λ°μ΄ν° νμ μ λν κ°λ μ κ³μ λ°μ
- i.e. ALGOL 60
- μ¬μ©μ μ μ νμ
μ 곡
- νλ‘κ·Έλλ¨Έκ° νμμ λ°λΌμ λ°μ΄ν° ꡬ쑰λ₯Ό μ€κ³νλ κ²μ νμ©
- κΈ°λ³Έ νμ κ³Ό μ μ°ν ꡬ쑰 μ μ μ°μ°μ μ 곡
- νμ μ λν΄ μλ―Έ μλ μ΄λ¦ μ¬μ©μ κ°λ μ±μ ν₯μ
- νμ κ²μ¬ νμ© λ° νλ‘κ·Έλ¨μ μμ μ λμ
- ν₯ν μΆμ λ°μ΄ν° νμ μ μν₯
- μ¬μ©μ μ μ νμ
μ 곡
𫧠νλ‘κ·Έλλ° μΈμ΄μ νμ μμ€ν
- νμ μ΄ μΈμ΄μ κ° μμ μ΄λ»κ² μ°κ΄λλμ§λ₯Ό μ μ, νμ λλ±μ±κ³Ό νμ νΈνμ±μ κ·μΉμ ν¬ν¨
- μν
- μ€λ₯ νμ§
- νλ‘κ·Έλ¨ λͺ¨λνλ₯Ό μν μ§μ
- λ¬Έμν
- νλ‘κ·Έλ¨μμ νμ μ μ μΈμ κ·Έ λ°μ΄ν°μ κ΄ν μ 보λ₯Ό λ¬Έμν νλ κ²
𫧠ꡬ쑰νλ λ°μ΄ν° νμ
- λͺ
λ Ήν μΈμ΄μμ μ 곡λλ ꡬ쑰ν λ°μ΄ν° νμ
-> λ°°μ΄κ³Ό λ μ½λ
- νμ
μ°μ°μ νΉμ ꡬμ±μ(Constructor)μ ν¨κ» μ¬μ©
- Cμ κ²½μ° λ°°μ΄μ {}κ³Ό ν¬μΈν° *, ꡬ쑰체λ struct λ₯Ό μ¬μ©
- μ°μ λ°°μ΄(Map, Dictionary)μ κ²½μ° ν¨μν νλ‘κ·Έλλ° μΈμ΄(LISP)μμ μκ°λ ν μ¬λ¬ μΈμ΄μ μΆκ°
- νμ
μ°μ°μ νΉμ ꡬμ±μ(Constructor)μ ν¨κ» μ¬μ©
π« νμ κ²μ¬
- μ°μ°μμ ν¬ν¨λ νΌμ°μ°μλ€μ΄ νΈν κ°λ₯ν νμ μΈμ§λ₯Ό νμΈνλ νμ
- νΈν κ°λ₯ νμ
(Compatible type)
- μ°μ°μμ μν΄μ μ λ²νκ±°λ, μ»΄νμΌλ¬-μμ± μ½λ(λλ ν΄μκΈ°)μ μν΄μ μ λ²ν νμ μΌλ‘ 묡μμ μΌλ‘ λ³νλλ κ²μ΄ μΈμ΄ κ·μΉμ νμ©λλ νμ
- κ°μ νλ³ν(Coercion, 묡μμ νλ³ν)
- μ°μ°μ μ°Έμ¬ν λ μ»΄νμΌλ¬λ μΈν°ν리ν°κ° μ λ²ν νμ
μΌλ‘Β νμ κ°μ λ‘(μ묡μ μΌλ‘)Β λ³νμν€λ νμ
- μ) int + float μμ int νμ float νμΌλ‘ λ³ν νΉμ λ°°μ λ¬Έμμ int νμ floatνμΌλ‘ λ³ν
- μ) coercion.c, CoercionExam.java
- κ°μ νλ³νμ λλλ‘ μ λ’°μ±μ μ½νμν΄
- Fortran, C, C++μ μλΉν λ§μ κ°μ νλ³νμ νμ©
- μ) strong_type_coercion.c
- Ada, ML, F#μ κ°μ νλ³νμ΄ κ±°μ μκ±°λ μμ
- Java, C#μΒ κ°μ νλ³νμ λ°μ λ νμ©
- μ) CoercionExam.java
- Fortran, C, C++μ μλΉν λ§μ κ°μ νλ³νμ νμ©
- μ°μ°μ μ°Έμ¬ν λ μ»΄νμΌλ¬λ μΈν°ν리ν°κ° μ λ²ν νμ
μΌλ‘Β νμ κ°μ λ‘(μ묡μ μΌλ‘)Β λ³νμν€λ νμ
- μ μ νμ
κ²μ¬
- λ³μλ€μ λν νμ λ°μΈλ©μ΄ μ μ μ΄λ©΄ νμ κ²μ¬λ νμ μ μ μΌλ‘ κ°λ₯
- μ₯μ
- μ»΄νμΌ μμ μ νμ μ€λ₯λ₯Ό λ°κ²¬νλ―λ‘ λΉμ©μ΄ μ κ²λ λ€.
- λ¨μ
- μ μ°μ±μ΄ λΆμ‘±
- λμ νμ
κ²μ¬(Dynamic Type Checking)
- μ€νμκ°μ νμ κ²μ¬κ° κ°λ₯ν μΈμ΄
- μ) JavaScript, Python, Ruby λ±μ λμ νμ λ°μΈλ©μ΄ λλ―λ‘ λμ λ°μΈλ©λ§ νμ©
- μ₯μ
- μ μ°μ±μ΄ μ¦κ°
- λ¨μ
- μ€λ₯λ₯Ό μ€μκ°μ νμ κ°λ₯νλ―λ‘ νμ κ²μ¬ λΉμ©μ΄ λ§μ΄ λ λ€.
- μ€λ₯λ₯Ό μ΄λνκΈ° μ½κ³ κ°λ μ±μ μ½νμν΄
- κ° νμ
- κ° νμ
μΈμ΄(Strong type language)
- νλ‘κ·Έλλ° μΈμ΄μ νμ
μ€λ₯κ° νμ κ°μ§λλ μΈμ΄
- λͺ¨λ νΌμ°μ°μμ νμ μ΄ μ»΄νμΌ μμ νΉμ μ€ν μμ μ νμ μ΄ κ²°μ λμ΄μΌ ν¨
- λ³μλ€μ μλͺ»λ μ¬μ©μ κ°μ§ν΄ λμΌλ‘ μμ μ±μ μ¦λ
- μ) StrongType.java
- Ada, ML, F#, Java, C# λ±μ κ° νμ
μΈμ΄μ μν¨
- Java, C#μ λͺ μμ νμ μΊμ€ν μ νμ©νλ©° μ΄λ μ€λ₯λ₯Ό λΌ μ μμ
- C/C++λ κ°νμ
μΈμ΄κ° μλ(Weak type language)
- 곡μ©μ²΄μ κ²½μ° νμ κ²μ¬λ₯Ό νμ§ μμ
- νλ‘κ·Έλλ° μΈμ΄μ νμ
μ€λ₯κ° νμ κ°μ§λλ μΈμ΄
- κ°μ νλ³ν(Coercion) vs κ° νμ
μΈμ΄
- κ°μ νλ³νμ κ° νμ
μΈμ΄μ νΉμ±μ μ½ν μν¬ μ μμ
- κ°κΈμ λͺ μμ νλ³νμ μν ν κ² - μ) StrongTypeCoercion.java
- νμ κ²μ¬ νλ‘κ·Έλ¨(lint)λ₯Ό μ¬μ©ν κ² - Ubuntu splint
- κ°μ νλ³νμ κ° νμ
μΈμ΄μ νΉμ±μ μ½ν μν¬ μ μμ
μ΄ κΈ°μ¬λ μ μκΆμμ CC BY 4.0 λΌμ΄μΌμ€λ₯Ό λ°λ¦
λλ€.