Notice
Recent Posts
Recent Comments
Link
Β«   2025/05   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

KH_C++

μƒμ„±μž(Constructor), μ†Œλ©Έμž(Destructor) λ³Έλ¬Έ

C++

μƒμ„±μž(Constructor), μ†Œλ©Έμž(Destructor)

kanghou 2022. 11. 24. 11:49

μƒμ„±μž(Constructor)

🎈 μƒμ„±μžλž€ κ°μ²΄κ°€ μƒμ„±λ˜λ©΄ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” κ²ƒμœΌλ‘œ μƒμ„±μžκ°€ μ •μ˜λ˜μ–΄ μžˆλ‹€λ©΄ ν•΄λ‹Ή μƒμ„±μžκ°€ ν˜ΈμΆœλœλ‹€.

μƒμ„±μžμ™€ μ†Œλ©ΈμžλŠ” 클래슀 객체가 생성 및 μ†Œλ©Έλ  λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ΄λ‹€. μƒμ„±μžμ™€ μ†Œλ©ΈμžλŠ” λ°˜ν™˜ ν˜•μ‹μ΄ μ—†λ‹€λŠ” 것이 νŠΉμ§•μ΄λ‹€.


μƒμ„±μž κ³Όμ •

μƒμ„±μžλŠ” public μ—μ„œ λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°€μ§€κ³  μƒμ„±λœλ‹€.

1) 클래슀의 이름과 ν•¨μˆ˜μ˜ 이름이 λ™μΌν•˜λ‹€.

2) λ°˜ν™˜ν˜•μ΄ μ„ μ–Έλ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©°, μ‹€μ œλ‘œ λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€.

μ΄λŸ¬ν•œ μœ ν˜•μ˜ ν•¨μˆ˜λ₯Ό κ°€λ¦¬μΌœ μƒμ„±μžλΌκ³  ν•˜λ©°, 객체 μƒμ„±μ‹œ λ”± ν•œλ²ˆλ§Œ ν˜ΈμΆœλœλ‹€.

void ShowInfo() λŠ” κ°μ²΄λ©€λ²„λ“€μ˜ 값을 좜λ ₯ν•œλ‹€.

그리고 λ©”μΈν•¨μˆ˜μ—μ„œ Point2D p1; 이라고 μ„ μ–Έν•˜κ²Œ 되면 μ„ μ–Έκ³Ό λ™μ‹œμ— 멀버가 μ΄ˆκΈ°ν™”κ°€ λ©λ‹ˆλ‹€.

컴파일 ν•˜κ²Œλ˜λ©΄ λ‹€μŒκ³Ό 같이 좜λ ₯λœλ‹€.

λ‹€μŒκ³Ό 같이 10,20이 클래슀λ₯Ό μ„ μ–Έκ³Όν•¨κ»˜ μ΄ˆκΈ°ν™” λœλ‹€.


μƒμ„±μžμ˜ νŠΉμ§•

 

1. μƒμ„±μžμ˜ λͺ©μ μ€ 객체가 생성될 λ•Œ ν•„μš”ν•œ 초기 μž‘μ—…μ„ μœ„ν•¨μ΄λ‹€.

예λ₯Ό λ“€μ–΄ 멀버 λ³€μˆ˜μ˜ 값을 νŠΉμ • κ°’μœΌλ‘œ μ„€μ •ν•˜κ±°λ‚˜, λ©”λͺ¨λ¦¬λ₯Ό 동적 ν• λ‹Ή λ°›κ±°λ‚˜, νŒŒμΌμ„ μ—΄κ±°λ‚˜, λ„€νŠΈμ›Œν¬λ₯Ό μ—°κ²°ν•˜λŠ” λ“± 객체λ₯Ό μ‚¬μš©ν•˜κΈ° 전에 ν•„μš”ν•œ 쑰치λ₯Ό ν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•¨μ΄λ‹€.

 

2. μƒμ„±μž ν•¨μˆ˜λŠ” 였직 ν•œλ²ˆλ§Œ μ‹€ν–‰λœλ‹€.

μƒμ„±μž ν•¨μˆ˜λŠ” 각 κ°μ²΄λ§ˆλ‹€ 객체가 μƒμ„±λ˜λŠ” μ‹œμ μ— 였직 ν•œ 번만 μžλ™μœΌλ‘œ μ‹€ν–‰λœλ‹€. 

 

3. μƒμ„±μž ν•¨μˆ˜μ˜ 이름은 클래슀 이름과 λ™μΌν•˜κ²Œ μž‘μ„±λ˜μ–΄μ•Ό ν•œλ‹€.

이둜 인해 μƒμ„±μžλŠ” λ‹€λ₯Έ 멀버 ν•¨μˆ˜μ™€ μ‰½κ²Œ ꡬ뢄 ν•  수 μžˆλ‹€.

 

4. μƒμ„±μž ν•¨μˆ˜μ˜ μ›ν˜•μ— 리턴 νƒ€μž…μ„ μ„ μ–Έν•˜μ§€ μ•ŠλŠ”λ‹€.

μƒμ„±μžλŠ” ν•¨μˆ˜μ΄μ§€λ§Œ 리턴 νƒ€μž…μ„ μ„ μ–Έν•΄μ„œλŠ” μ•ˆλœλ‹€. void도 μ•ˆλœλ‹€! 

 

5. μƒμ„±μžλŠ” 쀑볡 κ°€λŠ₯ν•˜λ‹€.

μ€‘λ³΅λœ μƒμ„±μž 쀑 ν•˜λ‚˜λ§Œ μ‹€ν–‰λœλ‹€.


μ†Œλ©Έμž(Destructor)

🎈 μ†Œλ©Έμž(Destructor)λŠ” 객체의 수λͺ…이 끝났을 λ•Œ 객체λ₯Ό μ œκ±°ν•˜κΈ° μœ„ν•œ λͺ©μ μœΌλ‘œ μ‚¬μš©λœλ‹€. 객체의 수λͺ…이 끝났을 λ•Œ μžλ™μœΌλ‘œ μ»΄νŒŒμΌλŸ¬κ°€ μ†Œλ©Έμž ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€. 클래슀λͺ…κ³Ό λ™μΌν•˜λ©° '~'기호λ₯Ό μ‚¬μš©ν•œλ‹€.


μ†Œλ©Έμž κ³Όμ •

κ°μ²΄μƒμ„±μ‹œ λ°˜λ“œμ‹œ ν˜ΈμΆœλ˜λŠ” 것이 μƒμ„±μžλΌλ©΄, κ°μ²΄μ†Œλ©Έμ‹œ λ°˜λ“œμ‹œ ν˜ΈμΆœλ˜λŠ” 것이 μ†Œλ©Έμžμ΄λ‹€.

μ†Œλ§μžλŠ” λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°–κ³  μžˆλ‹€.

1) 클래슀의 이름 μ•žμ— '~'κ°€ 뢙은 ν˜•νƒœμ˜ 이름을 κ°–λŠ”λ‹€.

2) μƒμ„±μžμ™€ 같이 λ°˜ν™˜ν˜•μ΄ μ„ μ–Έλ˜μ–΄ μžˆμ§€ μ•ŠλŠ”λ‹€.

3) λ§€κ°œλ³€μˆ˜λŠ” voidν˜•μœΌλ‘œ μ„ μ–Έλ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ˜€λ²„λ‘œλ”©μ΄λ‚˜ λ””ν΄νŠΈ κ°’ 섀정이 λΆˆκ°€λŠ₯ν•˜λ‹€.

객체 λ©€λ²„λ‘œμ¨λŠ” name κ³Ό age κ°€ μžˆλ‹€.

public μ˜μ—­μ—λŠ” μƒμ„±μžλ₯Ό ν†΅ν•˜μ—¬ 이름과 λ‚˜μ΄λ₯Ό μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™” ν•  수 μžˆλ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.

그리고 밑에 λ³΄μ‹œλ©΄ ~Person() μ΄λΌλŠ” μ†Œλ©Έμžκ°€ μžˆμŠ΅λ‹ˆλ‹€.

μœ„ μ½”λ“œμ—μ„œ λ³΄μ΄λŠ” 것과 같이 μ†Œλ©Έμžλ₯Ό μ •μ˜ν•˜λ©΄ λ©λ‹ˆλ‹€.

그럼 ν• λ‹Ήλœ λ©”λͺ¨λ¦¬κ°€ 해체가 λ©λ‹ˆλ‹€.


μ†Œλ©Έμžμ˜ νŠΉμ§•

 

1. μ†Œλ©Έμžμ˜ λͺ©μ μ€ 객체가 μ‚¬λΌμ§ˆ λ•Œ ν•„μš”ν•œ 마무리 μž‘μ—…μ„ μœ„ν•¨μ΄λ‹€.

객체가 μ†Œλ©Έν•  λ•Œ, λ™μ μœΌλ‘œ 할당받은 λ©”λͺ¨λ¦¬λ₯Ό μš΄μ˜μ²΄μ œμ— λŒλ €μ£Όκ±°λ‚˜, 열어놓은 νŒŒμΌμ„ μ €μž₯ν•˜κ³  λ‹«κ±°λ‚˜, μ—°κ²°λœ λ„€νŠΈμ›Œν¬λ₯Ό ν•΄μ œν•˜λŠ” λ“± 객체가 사라지기 전에 ν•„μš”ν•œ 쑰치λ₯Ό ν•˜λ„λ‘ ν•˜κΈ° μœ„ν•¨μ΄λ‹€.

 

2. μ†Œλ©Έμžμ˜ 이름은 클래슀 이름 μ•žμ— ~λ₯Ό 뢙인닀.

Person::~Person() {...}

3. μ†Œλ©ΈμžλŠ” 리턴 νƒ€μž…μ΄ μ—†μœΌλ©° μ–΄λ–€ 값도 λ¦¬ν„΄ν•΄μ„œλ„ μ•ˆλœλ‹€.

μ†Œλ©ΈμžλŠ” μƒμ„±μžμ™€ 같이 리턴 νƒ€μž… 없이 μ„ μ–Έλ˜λ©° μ–΄λ–€ 값도 λ¦¬ν„΄ν•΄μ„œλŠ” μ•ˆ λœλ‹€.

 

4. μ†Œλ©ΈμžλŠ” 였직 ν•œ 개만 μ‘΄μž¬ν•˜μ—¬ λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§€μ§€ μ•ŠλŠ”λ‹€.

μ†Œλ©ΈμžλŠ” μƒμ„±μžμ™€ 달리 ν•œ ν΄λž˜μŠ€μ— ν•œ 개만 μ‘΄μž¬ν•˜λ©° λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§€μ§€ μ•ŠλŠ”λ‹€.

 

5. μ†Œλ©Έμžκ°€ μ„ μ–Έλ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©΄ κΈ°λ³Έ μ†Œλ©Έμž(default destructor)κ°€ μžλ™μœΌλ‘œ μƒμ„±λœλ‹€.

μƒμ„±μžμ™€ 같이 ν΄λž˜μŠ€μ— μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ κΈ°λ³Έ μ†Œλ©Έμžκ°€ μƒμ„±λœλ‹€. 

μ΄λ•Œ κΈ°λ³Έ μ†Œλ©ΈμžλŠ” 아무 일도 ν•˜μ§€ μ•Šκ³  λ‹¨μˆœ λ¦¬ν„΄ν•˜λ„λ‘ λ§Œλ“€μ–΄μ§„λ‹€.


μƒμ„±μž/μ†Œλ©Έμž μ‹€ν–‰ μˆœμ„œ

 

μ§€μ—­ 객체(local object) : ν•¨μˆ˜ λ‚΄μ—μ„œ μ„ μ–Έλœ 객체

μ „μ—­ 객체(global object) : ν•¨μˆ˜ λ°”κΉ₯에 μ„ μ–Έλœ 객체

μ „μ—­ κ°μ²΄λŠ” ν”„λ‘œκ·Έλž¨μ΄ λ‘œλ”©λ  λ•Œ μƒμ„±λ˜μ–΄ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œν• λ•Œ(mainν•¨μˆ˜ μ’…λ£Œμ‹œ) μ†Œλ©Έλ˜κ³ ,

μ§€μ—­ κ°μ²΄λŠ” κ·Έκ°μ²΄κ°€ ν¬ν•¨λœ ν•¨μˆ˜κ°€ 호좜될 λ•Œ μƒμ„±λ˜μ–΄ ν•¨μˆ˜ μ’…λ£Œμ‹œμ— λ°˜ν™˜λ˜μ–΄ μ†Œλ©Έλœλ‹€.

μ „μ—­ κ°μ²΄λ‚˜ μ§€μ—­ 객체 λͺ¨λ‘ μƒμ„±λœ μˆœμ„œμ˜ λ°˜λŒ€μˆœμœΌλ‘œ μ†Œλ©Έ λœλ‹€. μ΄λŠ” stack의 νŠΉμ„±μ΄λ‹€.

Comments