포슀트

🌚 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ - 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)μ—μ„œ μ†Œκ°œλœ ν›„ μ—¬λŸ¬ 언어에 μΆ”κ°€

πŸ’« νƒ€μž… 검사


  • μ—°μ‚°μžμ— ν¬ν•¨λœ ν”Όμ—°μ‚°μžλ“€μ΄ ν˜Έν™˜ κ°€λŠ₯ν•œ νƒ€μž…μΈμ§€λ₯Ό ν™•μΈν•˜λŠ” ν–‰μœ„
  • ν˜Έν™˜ κ°€λŠ₯ νƒ€μž… (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
  • 정적 νƒ€μž… 검사
    • λ³€μˆ˜λ“€μ— λŒ€ν•œ νƒ€μž… 바인딩이 정적이면 νƒ€μž… κ²€μ‚¬λŠ” 항상 μ •μ μœΌλ‘œ κ°€λŠ₯
    • μž₯점
      • 컴파일 μ‹œμ μ— νƒ€μž… 였λ₯˜λ₯Ό λ°œκ²¬ν•˜λ―€λ‘œ λΉ„μš©μ΄ μ κ²Œλ“ λ‹€.
    • 단점
      • μœ μ—°μ„±μ΄ λΆ€μ‘±
  • 동적 νƒ€μž… 검사(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 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.