• toc {:toc}

Data Design

  • 데이터(Data) : 정보λ₯Ό 컴퓨터가 μ²˜λ¦¬ν•  수 μžˆλ„λ‘ κ°€κ³΅ν•œ 것

  • λ°μ΄ν„°λŠ” ν”„λ‘œκ·Έλž˜λ° μ„Έκ³„μ—μ„œμ˜ λͺ…사이닀.

    • μ‘°μž‘λ  수 μžˆλŠ” 객체, 처리될 수 μžˆλŠ” 정보이닀.
  • Data Abstraction : λ°μ΄ν„°μ˜ κ΅¬ν˜„μœΌλ‘œλΆ€ν„° 데이터 νƒ€μž…μ˜ 논리적인 μ†μ„±μ˜ 뢄리

  • Logical Property : What을 μ˜λ―Έν•œλ‹€. κ°€λŠ₯ν•œ 값이 무엇인지, ν•„μš”ν•œ 연산이 무엇인지

  • Implementation : Howλ₯Ό μ˜λ―Έν•œλ‹€. C++μ—μ„œ μ–΄λ–»κ²Œ κ΅¬ν˜„ν•  것인지, μ–΄λ–»κ²Œ μ‚¬μš©λ  것인지

  • Data Encapsulation : 데이터λ₯Ό μ‚¬μš©ν•˜λŠ” ν”„λ‘œκ·Έλž¨μœΌλ‘œλΆ€ν„° λ°μ΄ν„°μ˜ ν‘œν˜„μ„ 뢄리

  • Low-levelμ—μ„œ μ΄μ§„μˆ˜λ‘œμ˜ ν‘œν˜„μ„ μΊ‘μŠν™”ν•˜μ—¬ high-level둜 ν‘œν˜„ν•œλ‹€.

  • ADT(Abstract Data Type)

  • 속성(λ²”μœ„μ™€ μ—°μ‚°)이 λͺ…μ‹œλœ 데이터 νƒ€μž…μ΄λ‹€.

  • νŠΉμ • κ΅¬ν˜„ 방식과 λ…λ¦½μ μœΌλ‘œ ν†΅ν‹€μ–΄μ„œ 데이터 νƒ€μž…μ„ λͺ…μ‹œν•˜λŠ” κ°œλ…μ μΈ 것을 μ˜λ―Έν•œλ‹€.

Data Structure

  • 자료ꡬ쑰(Data Structure) : κ°œλ³„ 데이터 μš”μ†Œλ₯Ό μ €μž₯ν•˜κ³  λ˜μ°ΎλŠ” 연산을 ν•  수 μžˆλŠ” νŠΉμ§•μ΄ μžˆλŠ” 데이터 μš”μ†Œμ˜ λͺ¨μŒ

  • ADT κ°œλ…μ„ λ°”νƒ•μœΌλ‘œ μ‹€μ œ κ΅¬ν˜„μ„ 톡해 λ§Œλ“€μ–΄μ§„λ‹€.

  • Features of Data Structures

    • ꡬ성 μš”μ†Œλ“€λ‘œ 뢄해될 수 μžˆλ‹€.
    • μš”μ†Œμ˜ ꡬ성은 μš”μ†Œμ— 접근에 λŒ€ν•΄ 영ν–₯을 μ€€λ‹€.
    • μš”μ†Œμ˜ ꡬ성과 μš”μ†Œμ˜ μ ‘κ·Ό 방식은 λ‘˜ λ‹€ μΊ‘μŠν™”λ  수 μžˆλ‹€.
  • Data from 3 different levels

    • Application level : μ‹€μ œ 데이터λ₯Ό λͺ¨λΈλ§ν•œλ‹€.
    • Logical level : λ²”μœ„μ™€ 연산에 λŒ€ν•΄ 좔상적인 κ°œλ…μ„ κ°–λŠ”λ‹€.
    • Implementation level : ꡬ체적으둜 μ–΄λ–»κ²Œ 데이터λ₯Ό μ§€λ‹ˆλŠ” ꡬ쑰λ₯Ό ν‘œν˜„ν•˜κ³  연산을 λ§Œλ“€ 것인지λ₯Ό μ •μ˜ν•œλ‹€.
  • Basic ADT Operation

    • Constructor : ADT의 μƒˆλ‘œμš΄ μΈμŠ€ν„΄νŠΈ 객체λ₯Ό λ§Œλ“ λ‹€.
    • Transformer : μΈμŠ€ν„΄μŠ€μ˜ 데이터 값을 λ°”κΎΈκ±°λ‚˜ μΆ”κ°€ν•œλ‹€.
    • Observer : μΈμŠ€ν„΄μŠ€μ˜ 데이터λ₯Ό λ³€ν™”ν•˜λŠ” 것 없이 데이터λ₯Ό λ³Ό 수 μžˆλ„λ‘ ν•œλ‹€.
    • Iterator : λ°μ΄ν„°μ˜ λͺ¨λ“  κ΅¬μ„±μš”μ†Œλ₯Ό 순차적으둜 μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•œλ‹€.
  • Built-in type(int, float)의 경우 machine-level μ—°μ‚°μ˜ 관점에 맞게 κ΅¬ν˜„λ˜μ—ˆλ‹€.

Composite Data Type

  • Composite Data Type

  • ν•˜λ‚˜μ˜ λ³€μˆ˜ μ΄λ¦„μœΌλ‘œ κ°œλ³„ 데이터 μš”μ†Œμ˜ λͺ¨μŒμ„ μ €μž₯ν•œ ꡬ쑰

  • κ°œλ³„ 데이터 μš”μ†Œμ— μ ‘κ·Ό κ°€λŠ₯

    • Unstructed(Custom) : class와 struct 같이 미리 κ΅¬μ„±λ˜μ–΄ μžˆμ§€ μ•Šμ€ ꡬ쑰
    • Structed(Built-in) : array와 같이 κ°œλ³„ 데이터 μš”μ†Œμ— μ ‘κ·Όν•˜λŠ” 방법을 미리 ꡬ성해놓은 ꡬ쑰
  • C++ Built-In Data Types

    • Simple
      • Integral
        • char
        • short
        • int
        • long
        • enum
      • Floating
        • float
        • double
        • long double
    • Composite
      • array
      • struct
      • union
      • class
    • Address
      • pointer
      • reference

Records

  • Records at the Logical Level

  • Record(Class, Struct) : μœ ν•œν•œ 데이터 λͺ¨μŒ, λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ κ΅¬μ„±λœ unstructed composite data type 이닀.

  • Member selection operator (period .) : record type λ³€μˆ˜μ˜ 멀버에 μ ‘κ·Όν•˜κΈ° μœ„ν•œ μ‹λ³„μžμ΄λ‹€.

    • ex) myCar.year
  • Records at the Application Level

    • 객체λ₯Ό λ§Œλ“œλŠ” 것에 μœ μš©ν•˜λ‹€.
      • 객체에 λŒ€ν•œ λ‹€μ–‘ν•œ νƒ€μž…μ˜ 데이터λ₯Ό λͺ¨μ•„λ‘˜ 수 μžˆλ‹€.
      • 전체 객체λ₯Ό ν•˜λ‚˜μ˜ μ΄λ¦„μœΌλ‘œ μ°Έμ‘°ν•  수 μžˆλ‹€.
      • 객체의 λ‹€μ–‘ν•œ 멀버듀을 μ°Έμ‘°ν•  수 μžˆλ‹€.
    • λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ •μ˜ν•œ 자료 ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” 것에 μœ μš©ν•˜λ‹€.
  • Records at the Implementation Level

    • κ΅¬ν˜„μ„ ν•˜λ €λ©΄ 데이터에 λŒ€ν•œ λ©”λͺ¨λ¦¬ μ…€ μ˜ˆμ•½μ΄ ν•„μš”ν•˜λ‹€.
    • μ ‘κ·Ό ν•¨μˆ˜κ°€ μ •ν•΄μ Έμ•Ό ν•œλ‹€.
    • Base addressλŠ” λ©”λͺ¨λ¦¬ 첫 번째 μ…€μ˜ μ£Όμ†Œλ‘œ μ •ν•΄μ§„λ‹€.
    • 멀버에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ λ©”λͺ¨λ¦¬ μœ„μΉ˜λ₯Ό ν¬ν•¨ν•œ member-length-offset table을 κ°€μ§„λ‹€.

One-Dimensional Array

  • One-Dimensional Array at the Logical Level

  • Array : μœ ν•œν•œ 크기, λ™μΌν•œ 데이터 νƒ€μž…μœΌλ‘œ κ΅¬μ„±λœ structed composite data type이닀.

  • μš”μ†Œλ“€μ€ μƒλŒ€μ μΈ μœ„μΉ˜λ₯Ό κ°€μ§€κ³  μžˆμ–΄ 직접적인 접근이 κ°€λŠ₯ν•˜λ‹€.

  • Array의 μ—°μ‚° 및 μž‘λ™μ€ μ„ μ–Έκ³Ό 인덱슀λ₯Ό ν™œμš©ν•˜μ—¬ μˆ˜ν–‰λœλ‹€.

  • Implementation Level

  • Index = BaseAddress + Index * SizeOfElement

  • λ™μΌν•œ 데이터 νƒ€μž…, μžλ£Œν˜•μ„ κ°–κΈ° λ•Œλ¬Έμ— μš”μ†Œ ν•˜λ‚˜μ˜ μžλ£Œν˜• 크기λ₯Ό κ³±ν•΄μ£Όλ©΄ 인덱슀의 μœ„μΉ˜λ₯Ό μ„€μ •ν•  수 μžˆλ‹€.

  • μΈλ±μŠ€λŠ” λ°˜λ“œμ‹œ integral type(char, short, int, long, enum)이어야 ν•œλ‹€.

  • μΈλ±μŠ€λŠ” 항상 0λΆ€ν„° μ‹œμž‘ν•œλ‹€.

  • λ°°μ—΄ 자체λ₯Ό ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λ‘œ μ£Όκ±°λ‚˜ λ°˜ν™˜κ°’μœΌλ‘œ 받을 수 μ—†λ‹€.

    • 이λ₯Ό μœ„ν•΄ 포인터λ₯Ό μ‚¬μš©ν•œλ‹€.

Two-Dimensional Array

  • Two-Dimensional Array at the Logical Level

  • Array와 λ™μΌν•˜λ‚˜, 두 차원이 μ •λ ¬λœ μƒνƒœμ΄λ‹€.

  • Array μ—°μ‚° 및 μž‘λ™μ€ μ„ μ–Έκ³Ό 인덱슀의 쌍(ν–‰, μ—΄)을 톡해 μˆ˜ν–‰λœλ‹€.

  • λ©”λͺ¨λ¦¬ μƒμ—μ„œ two-dimensional arrayλŠ” 각 열을 μŒ“μ•„ 놓은 κ²ƒμ²˜λŸΌ κ΅¬μ„±λœλ‹€.

C++ class data type

  • Class : μœ ν•œν•œ 데이터 μš”μ†Œμ™€ ν•¨μˆ˜λ₯Ό μΊ‘μŠν™”ν•œ unstructed composite type이닀.

  • 클래슀 νƒ€μž…μ˜ λ³€μˆ˜λ“€μ€ νŠΉμ • 클래슀의 객체 ν˜Ήμ€ μΈμŠ€ν„΄μŠ€λΌκ³  λ§ν•œλ‹€.

  • 클래슀의 객체λ₯Ό μ‚¬μš©ν•˜κ³  μ„ μ–Έν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λŠ” ν΄λΌμ΄μ–ΈνŠΈλΌκ³  λΆ€λ₯Έλ‹€.

  • ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œλŠ” 클래슀 객체듀을 λ‹€λ£¨λŠ” public member function을 μ‚¬μš©ν•œλ‹€.

  • Sending a messageλŠ” public member function을 ν˜ΈμΆœν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

  • Scope Resolution Operator (::)

  • C++ ν”„λ‘œκ·Έλž¨μ€ λ‹€μ–‘ν•œ 클래슀 νƒ€μž…μ„ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λ‹€μ–‘ν•œ 클래슀 μ•ˆμ— μžˆλŠ” 멀버 ν•¨μˆ˜μ˜ 이름이 λ™μΌν•œ κ²½μš°κ°€ 생길 수 μžˆλ‹€.

  • Member selection operator(.)이 ν•΄λ‹Ή 클래슀의 멀버 ν•¨μˆ˜ ν˜ΈμΆœμ„ κ²°μ •ν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

  • Implementation νŒŒμΌμ—μ„œλŠ” 클래슀λ₯Ό λͺ…μ‹œν•˜κΈ° μœ„ν•΄ 멀버 ν•¨μˆ˜μ˜ 이름 μ•žμ— scope resolution operatorκ°€ μ‚¬μš©λœλ‹€.

Object-Oriented Programming

  • 3κ°€μ§€ 곡톡 ꡬ쑰 : class, object, inheritance

  • κ°μ²΄λŠ” 객체 μ§€ν–₯ μ‹œμŠ€ν…œμ—μ„œ 기본적인 λŸ°νƒ€μž„

  • ν΄λž˜μŠ€λŠ” 객체의 ꡬ쑰λ₯Ό μ •μ˜ν•œλ‹€.

  • ν΄λž˜μŠ€λŠ” 상속에 μ˜ν•΄ μ •μ˜λœ ν•˜μœ„ κ΄€κ³„λ‘œ κ΅¬μ„±λœλ‹€.

  • Inheritance(상속) : μ‘΄μž¬ν•˜λŠ” 클래슀λ₯Ό μ „λ¬Έν™”ν•œ μƒˆλ‘œμš΄ 클래슀λ₯Ό λ§Œλ“€ 수 있게 ν•œλ‹€.

  • μƒˆλ‘œμš΄ ν΄λž˜μŠ€λŠ” νŒŒμƒ 클래슀, μžμ‹ 클래슀라 λΆ€λ₯΄κ³ , μ‘΄μž¬ν•˜λŠ” ν΄λž˜μŠ€λŠ” κΈ°λ³Έ 클래슀, λΆ€λͺ¨ 클래슀라고 λΆ€λ₯Έλ‹€.

  • 상속을 톡해 이미 κ²€μ¦λœ 클래슀λ₯Ό μž¬μ‚¬μš©ν•  수 있고, ν•„μš”λ‘œ ν•˜λŠ” 속성을 νŒŒμƒ ν΄λž˜μŠ€μ™€ κ³΅μœ ν•  수 μžˆλ‹€.

  • Polymorphism(λ‹€ν˜•μ„±) : 상속 κ³„μΈ΅μ—μ„œ λ©”μ†Œλ“œ 이름을 λ³΅μ œν•˜κ³  λ©”μ†Œλ“œκ°€ 적용된 객체λ₯Ό μœ„ν•΄ μ ν•©ν•œ λ©”μ†Œλ“œλ₯Ό μ μš©ν•˜λŠ” 것을 λ§ν•œλ‹€.

  • Overloading : ν•˜λ‚˜μ˜ 클래슀 λ‚΄μ—μ„œ 같은 μ΄λ¦„μ˜ λ©”μ†Œλ“œλ₯Ό μ—¬λŸ¬ 개 μ€‘λ³΅ν•˜μ—¬ μ •μ˜ν•œλ‹€.

  • Overriding : 같은 μ΄λ¦„μ˜ λ©”μ†Œλ“œλ₯Ό 각 클래슀의 λ§₯락에 맞게 μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•œλ‹€.

  • Exception

  • μ˜ˆμ™Έ 사항은 ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ λ°œμƒν•˜λŠ” 비정상적인 상황이닀.

  • μ˜ˆμ™Έ 사항 관리

    • 였λ₯˜ 쑰건을 μ •μ˜ν•œλ‹€.
    • κ°€λŠ₯ν•œ 였λ₯˜λ₯Ό ν¬ν•¨ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.(try)
    • 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€λ©΄ μ‹œμŠ€ν…œμ— μ•Œλ¦°λ‹€.(throw)
    • μ‹œμŠ€ν…œμ— 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€λŠ” μ‹ ν˜Έκ°€ λ“€μ–΄μ˜¨λ‹€λ©΄ 였λ₯˜λ₯Ό μ²˜λ¦¬ν•œλ‹€.(catch)