μžλ°” ν”„λ‘œκ·Έλž˜λ° = 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

 

OOP
Object Oriented Programming
객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

 

 

 

κ°μ²΄λž€ 말 κ·ΈλŒ€λ‘œ λŒ€μƒμ„ λ‚˜νƒ€λ‚΄λŠ” 단어

예λ₯Ό λ“€μ–΄, μ‚¬λžŒ 개인 ν•œ λͺ… ν•œ λͺ…을 λͺ¨λ‘ 객체라 ν•  수 있고, μ±… ν•œ ꢌ ν•œ κΆŒμ„ 객체라 ν•  수 μžˆλ‹€.

 

클래슀

μ‚¬λžŒλ“€μ€ 일반적으둜 같은 속성듀을 κ°–κ³  μžˆλŠ”λ°, μ—¬κΈ°μ„œ μ†μ„±μ΄λž€ 눈, μ½”, μž…, 손, 발, λ“±μ˜ 신체듀을 μ˜λ―Έν•œλ‹€.

μ‚¬λžŒκ°™μ€ 객체듀이 κ³΅ν†΅μ μœΌλ‘œ κ°–λŠ” 속성듀을 λͺ¨μ•„μ„œ μ •μ˜λ‚΄λ¦° 것을 클래슀라고 ν•œλ‹€.

 

 

 

객체 = λΆ•μ–΄λΉ΅

클래슀 = λΆ•μ–΄λΉ΅ ν‹€

 

 

 


 

oopν•˜λ©΄ μžλ™μœΌλ‘œ 4가지 속성이 λ– μ˜¬λΌμ•Ό ν•œλ‹€.

 

OOP 속성

1. μΊ‘μŠν™” Encapsulation

μΊ‘μŠν™”λž€ ν•˜λ‚˜μ˜ 객체에 λŒ€ν•΄ κ·Έ 객체가 νŠΉμ •ν•œ λͺ©μ μ„ μœ„ν•΄ ν•„μš”ν•œ λ³€μˆ˜λ‚˜ λ©”μ†Œλ“œλ₯Ό ν•˜λ‚˜λ‘œ λ¬ΆλŠ” 것을 μ˜λ―Έν•œλ‹€.

 

λ”°λΌμ„œ 클래슀λ₯Ό μš°λ¦¬κ°€ λ§Œλ“€ λ•Œ ν›—λ‚  μ΄ν΄λž˜μŠ€μ—μ„œ λ§Œλ“€μ–΄μ§„ 객체가 νŠΉμ •ν•œ λͺ©μ μ„ 가지고 μ‚¬μš©ν•΄μ•Όν•  λ³€μˆ˜μ™€ κ·Έ λ³€μˆ˜λ₯Ό 가지고 νŠΉμ •ν•œ μ•‘μ…˜ 즉 λ©”μ„œλ“œ λ˜λŠ” ν•¨μˆ˜λ₯Ό κ΄€λ ¨μ„± 있게 ν΄λž˜μŠ€μ— κ΅¬μ„±ν•΄μ•Όν•œλ‹€.

 

예λ₯Ό λ“€μžλ©΄, μ€ν–‰μ΄λΌλŠ” ν΄λž˜μŠ€λŠ” μž”κ³ λΌλŠ” λ³€μˆ˜κ°€ 있고 κ·Έ μž”κ³ λ₯Ό μ‘°νšŒν•˜κ±°λ‚˜, μž”κ³ λ₯Ό μˆ˜μ •ν•  수 μžˆλŠ” λ©”μ„œλ“œλ“±μ΄ μžˆλ‹€κ³  μΉ˜λŠ” 것이닀. 

근데 μΊ‘μŠν™”λ₯Ό ν•˜λŠ” μ€‘μš”ν•œ λͺ©μ μ€ λ°”λ‘œ μ •λ³΄μ˜ 은닉화이닀.  μž”κ³ λΌλŠ” λ³€μˆ˜κ°€ λ§Œμ•½ public 으둜 μ„ μ–Έλ˜μ–΄μžˆλ‹€κ³  치자. 200λ§Œμ›μΈ λ‚˜μ˜ μž”κ³ κ°€ λˆ„κ΅°κ°€ 접근에 μ˜ν•΄ 0원이 λ μˆ˜λ„ μžˆλŠ” 것이닀. λ”°λΌμ„œ μž”κ³ λΌλŠ” λ³€μˆ˜λ₯Ό λ°”λ‘œ μ ‘κ·Όν•  수 없도둝 private둜 μ„ μ–Έν•˜κ³  데이터λ₯Ό λ³΄ν˜Έν•˜λŠ” 것이닀.

 

μ΄λ ‡κ²Œ 보호된 λ³€μˆ˜λŠ” getterλ‚˜ setterλ“±μ˜ λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œλ§Œ κ°„μ ‘μ μœΌλ‘œ 접근이 κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” 것이 λ°”λ‘œ μΊ‘μŠν™”μ˜ μ€‘μš”ν•œ λͺ©μ μ΄λ‹€.

 

 

 

2. 좔상화 Abstraction

μΆ”μƒμ μœΌλ‘œ 생각해 일단 ν°ν‹€μ˜ 클래슀λ₯Ό κ΅¬ν˜„ν•˜κ³  거기에 μ΅œμ†Œ μ΄λŸ¬ν•œ 곡톡적인 μš”μ†Œλ‚˜ ν•„μˆ˜μ μΈ μš”μ†ŒλŠ” λ“€μ–΄κ°”μœΌλ©΄ ν•˜λŠ” λ°”λž¨μ—μ„œ λ§Œλ“  것이 μΆ”μƒν΄λž˜μŠ€μ΄λ‹€.

 

이 κ³Όμ •μ—μ„œ 곡톡적인 μš”μ†Œλ‚˜ νŠΉμ§•μ„ μΆ”μΆœν•˜λŠ” 과정이 좔상화 인것 κ°™λ‹€. 

 

 

예λ₯Ό λ“€μžλ©΄, λ²€μΈ ,μ•„μš°λ””,μ†Œλ‚˜νƒ€,ν‹°μ½”,밴틀리 λ“±λ“± μš°λ¦¬κ°€ μƒκ°ν•˜λŠ” μ—¬λŸ¬μ’…λ₯˜μ˜ μžλ™μ°¨μ΄ μžˆλ‹€. 이것을 λ‹€ ν΄λž˜μŠ€ν™”ν•˜κ³  λ³€μˆ˜μ™€ λ©”μ„œλ“œ 등을 κ°œλ³„μ μœΌλ‘œ λ§Œλ“œλŠ” 것은 무λͺ¨ν•œ 짓이닀. (κ±°λ‘μ ˆλ―Έν•˜κ³  λ§ν•˜λ©΄ ν™•μž₯μ„±λ•Œλ¬Έμ— 좔상화할 ν•„μš”κ°€ μžˆλ‹€.)

 

λ”°λΌμ„œ 방금 λ‚˜μ—΄ν•œ μžλ™μ°¨λ“€μ˜ 곡톡적인 μš”μ†Œλ‚˜ νŠΉμ§•μ„ μΆ”μΆœν•˜λŠ” 과정인 좔상화λ₯Ό 거쳐 μš”μ†Œλ₯Ό 끄집어 λ‚΄λ©΄, 바퀴,배기톡,ν•Έλ“€,μ°¨λ¬Έ,유리창,λ“± ν•„μˆ˜μ μΈ λΆ€ν’ˆμ΄ 있고 λ°”ν€΄λŠ” κ΅΄λŸ¬κ°€μ•Όν•˜λ©°, 핸듀은 쒌우둜 λŒμ•„κ°€μ•Όν•˜κ³  

 

차문은 μ—΄λ €μ•Όν•œλ‹€λŠ” 곡톡적인 ν–‰λ“± 즉 μ–΄λ–€ μ°¨λ“  ν•„μˆ˜μ μœΌλ‘œ ν•„μš”ν•œ λ©”μ„œλ“œκ°€ μΆ”μΆœλœλ‹€. 

 

 

 

3. λ‹€ν˜•μ„± Polymorphism

λ‹€ν˜•μ„±μ€ 상속을 톡해 κΈ°λŠ₯을 ν™•μž₯ν•˜κ±°λ‚˜ λ³€κ²½ν•˜λŠ” 것을 κ°€λŠ₯ν•˜κ²Œ ν•΄μ€€λ‹€. 이λ₯Ό 톡해 μ½”λ“œμ˜ μž¬μ‚¬μš©, μ½”λ“œκΈΈμ΄ κ°μ†Œκ°€ λ˜μ–΄ μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•˜λ„λ‘ λ„μ™€μ£ΌλŠ” κ°œλ…μ΄λ‹€.

 

μ‰½κ²Œ 같은 λ™μž‘μ΄μ§€λ§Œ λ‹€λ₯Έκ²°κ³Όλ¬Όμ„ λ‚˜μ˜¬λ•Œ 이λ₯Ό λ‹€ν˜•μ„±μ΄λΌκ³  μƒκ°ν•˜λ©΄ λœλ‹€.

 

크게 μžλ°”ν”„λ‘œκ·Έλž˜λ° 객체지ν–₯μ—μ„œ λ‹€ν˜•μ„±μ˜ κ°œλ…μ„ λ…Ήμ—¬λ‚΄λŠ” 방법은 두가지인데, λ°”λ‘œ

μ˜€λ²„λΌμ΄λ”©(Overriding) κ³Ό μ˜€λ²„λ‘œλ”©(Overloading) 이닀.

μ˜€λ²„λΌμ΄λ”©μ€ λΆ€λͺ¨ν΄λž˜μŠ€μ—μ„œ 상속받은 μ„œλΈŒν΄λž˜μŠ€ 즉 μžμ‹ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ν΄λž˜μŠ€,즉 μƒμœ„ν΄λž˜μŠ€μ—μ„œ λ§Œλ“€μ–΄μ§„ λ©”μ„œλ“œλ₯Ό μžμ‹ μ˜ μž…λ§›λŒ€λ‘œ λ‹€μ‹œ μž¬μ°½μ‘°ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것을 λ§ν•œλ‹€.

μ˜€λ²„λ‘œλ”©μ€ ν•˜λ‚˜μ˜ 클래슀 μ•ˆμ—μ„œ κ°™μ€μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ 각 λ©”μ„œλ“œλ§ˆλ‹€ λ‹€λ₯Έ μš©λ„λ‘œ μ‚¬μš©λ˜λ©° κ·Έ 결과물도 λ‹€λ₯΄κ²Œ κ΅¬ν˜„ν•  수 있게 λ§Œλ“œλŠ” κ°œλ…μΈλ° μ˜€λ²„λ‘œλ”©μ΄ κ°€λŠ₯ν•˜λ €λ©΄ λ©”μ„œλ“œλΌλ¦¬ 이름은 κ°™μ§€λ§Œ λ§€κ°œλ³€μˆ˜μ˜ κ°―μˆ˜λ‚˜ λ°μ΄ν„°νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ μ˜€λ²„λ‘œλ”©μ΄ μ μš©λ˜μ–΄ λ©”μ„œλ“œ 이름이 같아도 
문법 μ—λŸ¬κ°€ λ‚˜μ§€μ•ŠλŠ”λ‹€..

 

 

 

4. 상속성, μž¬μ‚¬μš© Inheritance

상속은 객체지ν–₯의 꽃이라고 ν•  수 μžˆλ‹€. μƒμ†μ΄λž€ κΈ°μ‘΄ μƒμœ„ν΄λž˜μŠ€μ— κ·Όκ±°ν•˜μ—¬ μƒˆλ‘­κ²Œ ν΄λž˜μŠ€μ™€ ν–‰μœ„λ₯Ό μ •μ˜ν•  수 있게 λ„μ™€μ£ΌλŠ” κ°œλ…μ΄λ‹€.

 

κΈ°μ‘΄ν΄λž˜μŠ€μ— κΈ°λŠ₯을 가져와 μž¬μ‚¬μš©ν•  μˆ˜μžˆμœΌλ©΄μ„œλ„ λ™μ‹œμ— μƒˆλ‘­κ²Œ λ§Œλ“  ν΄λž˜μŠ€μ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  수 있게 λ§Œλ“€μ–΄ μ€€λ‹€.

 

* μžλ°”μ—μ„  상속은 단일상속밖에 지원이 μ•ˆλœλ‹€.

κ·ΈλŸ¬λ‚˜ 닀쀑상속이 ν•„μš”ν•  순 μžˆλ‹€κ³  μΈμ •ν•˜μ—¬ λŒ€λΉ„μ±…μœΌλ‘œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 닀쀑상속(κ΅¬ν˜„) ν•  수 μžˆκ²Œν•΄μ„œ μž„μ‹œμ μΈ 닀쀑 상속에 λŒ€ν•œ ν™œλ‘œλŠ” λš«μ–΄μ€¬λ‹€. κ·Έλ ‡μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€μ˜ μ‘΄μž¬μ΄μœ κ°€ 닀쀑상속을 μ§€μ›ν•˜κΈ° μœ„ν•¨μ΄λ‹€ 라고 μƒκ°ν•˜λ©΄ μ•ˆλœλ‹€.

+ Recent posts