1. Collection Class ¶
컬λ μ
(Collection)μ νΉλ³ν λ°©μμΌλ‘ ꡬμ±λμ΄ μλ μμ κ°μμ λ°μ΄ν° νλͺ©μ μ§ν©μ λ»νλ€.
MFCμμ μ 곡νλ 컬λ μ μ λ€λ£¨λ ν΄λμ€λ κ·Έ ννμ λ°λΌμ ν¬κ² 3κ°μ§λ‘ ꡬλΆν μ μλ€.
MFCμμ μ 곡νλ 컬λ μ μ λ€λ£¨λ ν΄λμ€λ κ·Έ ννμ λ°λΌμ ν¬κ² 3κ°μ§λ‘ ꡬλΆν μ μλ€.
Array | μμκ° λ§€κ²¨μ§ μμλ€μ μ§ν©. μ μ μμΈκ°μ ν΅ν΄ μ κ·Όκ°λ₯ν¨. λ°°μ΄ μ»¬λ μ μ ν¬κΈ°κ° μ λμ μ΄λ, μλκ° λλ¦°λ¨μ μ΄ μλ€. |
List | μμκ° μλ λ°μ΄ν° νλͺ©μ μ§ν©. Doubly-linked list λ‘ κ΅¬νλμ΄ μλ€. λ°μ΄ν°μ μ½μ , μμ κ° λΉ λ₯΄μ§λ§ νλνλμ λ°μ΄ν°λ₯Ό κ²μνλ μλλ λ리λ€. |
Map | μμκ° μλ λ°μ΄ν° νλͺ©μ μ§ν©. ν€κ°μ ν΅ν΄μ κ°κ°μ 컬λ μ μ μ κ·Όνλ€. λ°μ΄ν°μ κ²μμ μ μ©νλ€. κ·Έλ μ§λ§ μμ°¨μ μΈ μ κ·Όμ΄ νμν κ³³μμλ λ°°μ΄μ΄ λ μ’λ€. |
λκ°μ§ ννλ‘ κ΅¬νλμ΄μλ€. 첫λ²μ§Έλ ν¨μν
νλ¦Ώμ μ΄μ©ν ννλ‘ κ΅¬νλμ΄μκ³ , λλ²μ§Έλ ν
νλ¦Ώμ μ¬μ©νμ§ μλ λ°©λ²μΌλ‘ μ λ²μ μ VC++μμ λΆν° μ¬μ©λμ΄μ¨ λ°©μμ΄λ€. νμ¬λ ν
νλ¦Ώμ μ΄μ©ν λ°©λ²μ μ¬μ©νλ κ²μ΄ μ’λ€.
2. type-safe collection class ¶
κ°μ²΄λ€μ 컬λ μ
μ CArray, CList, CMap ν
νλ¦Ώ ν΄λμ€λ€μ μν΄μ μ§μλλ€. κ°μ²΄ ν¬μΈν°μ 컬λ μ
μ
~cpp CTypedPtrArray, CTypedPtrList, CTypedPtrMap
ν΄λμ€λ€μ μν΄μ μ§μλλ€.κ°μ²΄μ 컬λ μ
μ μ μνλ ν
νλ¦Ώ ν΄λμ€λ MFCμ CObjectν΄λμ€μμ νμλλ€. μ΄λ° ν
νλ¦Ώ ν΄λμ€λ κΈ°λ³Έ λ°μ΄ν° νμμ΄λ μ¬μ©μκ° μ μν ν΄λμ€, ꡬ쑰체λ₯Ό ν¬ν¨ν μ΄λ ν μ’
λ₯μ κ°μ²΄λ μ μ₯, κ΄λ¦¬νλ κ²μ΄ κ°λ₯νλ€. μ΄λ° ν΄λμ€λ€μ λ΄λΆμ μΌλ‘ 볡μ¬λ₯Ό νκΈ° λλ¬Έμ 볡μ¬μμ±μλ₯Ό λ§λ€μ΄μΌ νλ€.
3.1. CArray ¶
~cpp CArray<ObjectType, ObjectType&> anArray CArray<μ μ₯λ κ°μ²΄μ νμ, μ¬μ©λλ μΈμμ νμ> anArray첫λ²μ§Έ νμ μΈμλ μ μ₯λ μμμ νμ μ λ§νλ©°, λλ²μ§Έ μΈμλ λ©€λ²ν¨μκ° μ¬μ©νκ²λ μΈμλ₯Ό λ§νλ€.
~cpp SetSize() | λ°°μ΄μ μ΄κΈ° κ°μλ₯Ό μ§μ νλ€. μ§μ νμ§ μμλ λμνμ§λ§ μ΄λμ λμ κ°μ μμΈ‘ν΄μ μ£Όλ©΄, λΆνμν λ§€λͺ¨λ¦¬ μ¬ν λΉμ μμ μ΄ μ€μ΄λ€ μ μλ€. |
~cpp Add(ObjectType) | νΉμ κ°μ²΄λ₯Ό λ°°μ΄μ μ μ₯νλ€. |
~cpp GetAt(index) | μΈλ±μ€λ‘ μ§μ λ λ°°μ΄μ κ°μ²΄λ₯Ό 리ν΄νλ€. |
~cpp operator[index] | GetAt()κ³Ό λμΌνκ² μλνλ©°, built-in λ°°μ΄κ³Ό λμΌν μ¬μ©λ²μ μ 곡νλ€. ~cpp pointArray.SetAt (3, NewPoint)~cpp pointArray[3]=NewPoint |
~cpp Append() | μΈμλ‘ μ λ¬λ λ°°μ΄μ λ°°μ΄μ λ λΆλΆμ μΆκ°νλ€. |
~cpp InsertAt() | μΈμλ‘ μ λ¬λ κ°μ²΄λ₯Ό λ°°μ΄μ νΉμ μΈλ±μ€μ μ½μ νλ€. |
~cpp ConstructElements(), DestructElements()
보쑰ν¨μλ€μ κ°μ²΄λ₯Ό μ½μ
, μμ νλ κ³Όμ μμ μ°μ΄λ 보쑰 ν¨μλ€μ΄λ€.3.2. CList ¶
~cpp CList<ObjectType, ObjectType&> aList CList<μ μ₯λ κ°μ²΄μ νμ, μ¬μ©λλ μΈμμ νμ> aList첫λ²μ§Έ νμ μΈμλ μ μ₯λ μμμ νμ μ λ§νλ©°, λλ²μ§Έ μΈμλ λ©€λ²ν¨μκ° μ¬μ©νκ²λ μΈμλ₯Ό λ§νλ€.
λλ²γ €γ γ γ € μΈμλ‘μ°μ΄λ μ°Έμ‘°νμ ν¬μΈν°νμ΄λ μΌλ° κ°μ²΄ νμ μΌλ‘ λ°κΎΈλ κ²λ κ°λ₯νλ©°, μ΄κ²μ νλ‘κ·Έλλ¨Έμ μλμ λ°λΌ λ€λ₯΄λ€.
~cpp AddHead() | 리μ€νΈμ 첫λ²μ§Έ μμμ κ°μ²΄λ₯Ό μΆκ°νλ€. 리ν΄νμ POSITIONμ΄λ€. |
~cpp AddTail() | 리μ€νΈμ λ§μ§λ§ μμμ κ°μ²΄λ₯Ό μΆκ°νλ€. 리ν΄νμ POSITIONμ΄λ€. |
~cpp GetNext(POSITION) | μ λ¬λ μμΉ λ³μλ₯Ό μ¦κ°μν¨λ€. λ§μ§λ§ κ°μ²΄μμ μ¬μ©λ λμλ NULLμ 리ν΄νλ€. |
~cpp GetPrev() | μμμ =.=;; |
~cpp InsertBefore(POSITION, ObjectType) | λλ²μ§Έ μΈμμ κ°μ²΄λ₯Ό 첫λ²μ§Έ μΈμμ μμΉμ μλΆλΆμ μ½μ νλ€. |
~cpp InsertAfter(POSITION, ObjectType) | μμμ =.=;; |
~cpp SetAt(POSITION, ObjectType) | 첫λ²μ§Έ μΈμμ μμΉμ λλ²μ¬ μΈμμ κ°μ²΄λ₯Ό ν λΉνλ€. POSITION μ μ ν¨μ±μ κ²μ¬ννμ μ¬μ©ν΄μΌνλ€. |
~cpp GetHeadPosition() | 리μ€νΈμ 맨 μ²μμλν POSITIONκ°μ 리ν΄νλ€. |
~cpp GetTailPosition() | 리μ€νΈμ 맨 λ§μ§λ§μλν POSITIONκ°μ 리ν΄νλ€. |
~cpp GetAt() | νΉμ μμΉμ κ°μ²΄λ₯Ό 리ν΄νλ€. |
~cpp Find(ObjectType) | μΈμλ‘ λ°μ κ°μ²΄λ₯Ό κ²μν΄μ κ·Έ μμΉμ POSITIONκ°μ 리ν΄νλ€. μ΄λλ μ€ μμ€μμ λΉκ΅κ° νν΄μ§λ€. |
~cpp FindIndex() | μΈμλ‘ λ°μ int νμ μμΈκ°μ κΈ°μ€μΌλ‘ κ·Έκ³³μ POSITION ννμ κ°μ 리ν΄νλ€. μ΅μ΄ μμλ μΈλ±μ€ 0μ κ°λλ€. |
~cpp GetCount() | 리μ€νΈμ μλ μμμ κ°μλ₯Ό 리ν΄νλ€. |
~cpp RemoveHead() | 리μ€νΈμ κ°μ₯ μ μμ μμ |
~cpp RemoveTail() | 리μ€νΈμ κ°μ₯ λ§μ§λ§ μμ μμ |
~cpp IsEmpty() | 리μ€νΈκ° λΉμ΄μλμ§ κ²μ¬ |
~cpp RemoveAt(POSITION) | νΉμ μμΉμ 리μ€νΈ μμλ₯Ό μμ |
~cpp RemoveAll() | 리μ€νΈμμ μλ μμλ€μκ² ν λΉλμλ€ λ©λͺ¨λ¦¬λ₯Ό ν΄μ νλ€. |
~cpp ConstructElements(), DestructElements(), CompareElements()
보쑰ν¨μλ€μ κ°μ²΄λ₯Ό μ½μ
, μμ , κ²μνλ κ³Όμ μμ μ°μ΄λ 보쑰 ν¨μλ€μ΄λ€.3.3. CMap ¶
~cpp CMap<KeyType, KeyType&, ObjectType, ObjectType&> aMap CMap<ν€ νμ, ν€ μΈμ νμ, μ μ₯λ κ°μ²΄μ νμ, μ¬μ©λλ μΈμμ νμ> aMapλ§΅μ κ°μ²΄μ ν€μ μ‘°ν©μ μ μ₯νλ€. ν€λ λ§΅μ ν λΉλ λ©λͺ¨λ¦¬μ νΉμ λΈλ‘μμ κ°μ²΄κ° μ μ₯λμ΄ μλμ§λ₯Ό κ²°μ νλλ° μ¬μ©λλ€. ν€λ₯Ό λ§΅μμ μνΈλ¦¬μ μ΄λλ μ€λ‘ κ³μ°λ μ μλ μ μλ‘ λ³ννλ κ³Όμ μ ν΄μ€(Hashing)μ΄λΌκ³ νλ€.
ν΄μ±κ³Όμ μ ν΄μκ°μ΄λΌλ μ μλ₯Ό μμ±νλ€. μΌλ°μ μΌλ‘ ν€μ κ·Έλ¦¬κ³ μ°λ κ°μ²΄λ₯Ό λ§΅μμ μ΄λμ μ μ₯ν κ²μΈκ°λ₯Ό κ²°μ νκΈ° μν΄μ κΈ°λ³Έ μ΄λλ μ€μ λν offset μΌλ‘ ν΄μκ°μ΄ μ€μ λλ€.
ν΄μκ³Όμ μμ ν€κ° λ νΉν μμ λ§μ ν΄μκ°μ κ°μ§ λͺ»νλ κ²½μ°λ μ‘΄μ¬νλ€. μ΄ κ²½μ° κ°μ²΄λ λ€λ₯Έ μμλλ μ΄μ μ ν΄μλμ΄ λμΌν κ°μΌλ‘ μ μ₯λ κ°μ²΄μ λ§ν¬λλ€.
~cpp Lookup() | μ§μ λ ν€μ ν΄λΉνλ κ°μ²΄λ₯Ό κ²μνλ€. |
~cpp operator[] | λ°°μ΄κ³Ό λμΌν ννλ‘ μ¬μ©νλ κ²μ΄ κ°λ₯ |
3.4. CTypedPtrList ¶
~cpp CTypedPtrList<BaseClass, Type*> ListName 첫λ²μ§Έ μΈμλ κΈ°λ³Έ ν¬μΈν° 리μ€νΈ ν΄λμ€μΈ CObList, CPtrListμ€μμ μ ν. CObListλ CObjectμ νμ ν΄λμ€λ₯Ό, CPtrListλ void*νμ ν¬μΈν°λ€μ 리μ€νΈλ₯Ό μ§μνλ€.μ 곡λλ λ©€λ² ν¨μλ€μ CListμ μν΄μ μ 곡λλ κ²λ€κ³Ό κ±°μ λΉμ·νλ©°, μ°μ°μ΄ ν¬μΈν°μ λν΄μ νν΄μ§λ€λ κ²μ λ€λ₯Έ μ μ΄λ€.
~cpp GetHead() | 리μ€νΈμ κ°μ₯ μμμλ ν¬μΈν°λ₯Ό 리ν΄. IsEmpty() κ²μ¬ νμ. |
~cpp GetTail() | 리μ€νΈμ λμ μ‘΄μ¬νλ ν¬μΈν°λ₯Ό 리ν΄. IsEmpty() κ²μ¬ νμ. |
~cpp RemoveHead() | 리μ€νΈμ κ°μ₯ μμ μλ ν¬μΈν°λ₯Ό μμ . IsEmpty() κ²μ¬ νμ. |
~cpp RemoveTail() | 리μ€νΈμ κ°μ₯ λμ μλ ν¬μΈν°λ₯Ό μμ . IsEmpty() κ²μ¬ νμ. |
~cpp GetNext(POSITION) | λ νΌλ°μ€ μΈμλ‘ μ λ¬λ POSITIONνμμ λ³μκ° κ°γ €γΉγ £γ λ―Έλ μμΉμ μλ ν¬μΈν°λ₯Ό 리ν΄νλ€. λμ λλ¬νλ©΄ POSITIONμ NULLλ‘ ν λΉ. |
~cpp GetPrev() | μμμ =.=;; |
~cpp GetAt() | νΉμ μμΉμ κ°μ²΄λ₯Ό 리ν΄νλ€. |
CTypedPtrListμ κΈ°λ³Έ ν΄λμ€μΈ CObListλ‘ λΆν° μμλ°μ κ²λ€
~cpp AddHead() | 리μ€νΈμ 첫λ²μ§Έ μμμ κ°μ²΄λ₯Ό μΆκ°νλ€. 리ν΄νμ POSITIONμ΄λ€. |
~cpp AddTail() | 리μ€νΈμ λ§μ§λ§ μμμ κ°μ²΄λ₯Ό μΆκ°νλ€. 리ν΄νμ POSITIONμ΄λ€. |
~cpp RemoveAll() | 리μ€νΈμμ μλ μμλ€μκ² ν λΉλμλ€ λ©λͺ¨λ¦¬λ₯Ό ν΄μ νλ€. |
~cpp GetHeadPosition() | 리μ€νΈμ 맨 μ²μμλν POSITIONκ°μ 리ν΄νλ€. |
~cpp GetTailPosition() | 리μ€νΈμ 맨 λ§μ§λ§μλν POSITIONκ°μ 리ν΄νλ€. |
~cpp SetAt(POSITION, ObjectType) | 첫λ²μ§Έ μΈμμ μμΉμ λλ²μ¬ μΈμμ κ°μ²΄λ₯Ό ν λΉνλ€. POSITION μ μ ν¨μ±μ κ²μ¬ννμ μ¬μ©ν΄μΌνλ€. |
~cpp RemoveAt(POSITION) | νΉμ μμΉμ 리μ€νΈ μμλ₯Ό μμ |
~cpp InsertBefore(POSITION, ObjectType) | λλ²μ§Έ μΈμμ κ°μ²΄λ₯Ό 첫λ²μ§Έ μΈμμ μμΉμ μλΆλΆμ μ½μ νλ€. |
~cpp InsertAfter(POSITION, ObjectType) | μμμ =.=;; |
~cpp Find(ObjectType) | μΈμλ‘ λ°μ κ°μ²΄λ₯Ό κ²μν΄μ κ·Έ μμΉμ POSITIONκ°μ 리ν΄νλ€. μ΄λλ μ€ μμ€μμ λΉκ΅κ° νν΄μ§λ€. |
~cpp FindIndex() | μΈμλ‘ λ°μ int νμ μμΈκ°μ κΈ°μ€μΌλ‘ κ·Έκ³³μ POSITION ννμ κ°μ 리ν΄νλ€. μ΅μ΄ μμλ μΈλ±μ€ 0μ κ°λλ€. |
~cpp GetCount() | 리μ€νΈμ μλ μμμ κ°μλ₯Ό 리ν΄νλ€. |
~cpp IsEmpty() | 리μ€νΈκ° λΉμ΄μλμ§ κ²μ¬ |
4. Talk ¶
- λ΄ κ°μΈμ μΈ μ견μΌλ‘λ STLμ΄ λ μ°κΈ°μ νΈν΄λ³΄μΈλ€. γ
‘.γ
‘; λ¨μ§ MFCμ μ΅μ νλμ΄μ λ§λ€μ΄μ§ λ§νΌ MFCμμλ§ μ‘΄μ¬νλ μ₯μ μ΄ μμλΏμ΄λ€. Serialize κ°μκ±°? - eternalbleu