GiantStepDEV
article thumbnail

ν΄λž˜μŠ€μ™€ 객체 κ΄€κ³„μ˜ μ˜€ν•΄μ— λŒ€ν•΄μ„œλŠ” 'νŒ©ν„°λ¦¬ λ©”μ†Œλ“œ νŒ¨ν„΄' 글에 μ •λ¦¬ν•˜μ—¬ μ—…λ‘œλ“œ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

ν΄λž˜μŠ€μ™€ 객체의 κ΄€κ³„λŠ” λΆ•μ–΄λΉ΅ν‹€κ³Ό 뢕어빡이 λ§žλ‚˜μ— λŒ€ν•œ 주제
https://developyanggaeng.tistory.com/189
 

[μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 μ§€ν–₯의 원리와 이해] (1) νŒ©ν„°λ¦¬ λ©”μ†Œλ“œ νŒ¨ν„΄ + ν΄λž˜μŠ€μ™€ 객체의

μ„œλ‘  일전에 ν•œ λΈ”λ‘œκ·Έ 글을 μ°Έκ³ ν•˜μ—¬ νŒ©ν„°λ¦¬ λ©”μ†Œλ“œ νŒ¨ν„΄ 글을 μ˜¬λ Έμ—ˆλŠ”λ°.. 사싀 λ‹Ήμ‹œμ— λ‚΄κ°€ μ΄ν•΄ν•˜κΈ°μ—λŠ” 글이 μ–΄λ €μ›Œμ„œ ν•΄λ‹Ή νŒ¨ν„΄μ— λŒ€ν•œ 흐름을 μ΄ν•΄ν•˜κΈ° μ–΄λ €μ› λ‹€. https://developyanggaeng.tist

developyanggaeng.tistory.com

근데 μ €λ ‡κ²Œ ν˜Όμš©ν•΄μ„œ 글을 μž‘μ„±ν•˜λ‹ˆ λ‚˜μ€‘μ— μ°Ύμ•„λ³Ό λ•Œ λΆˆνŽΈν•  것 κ°™μ•„μ„œ

이번 ν¬μŠ€νŒ… λΆ€ν„°λŠ” 주제λ₯Ό ν•˜λ‚˜λ§Œ μ •ν•˜κ³ , 그에 λŒ€ν•΄ μƒμ„Ένžˆ μ •λ¦¬ν•΄λ³΄κ³ μž ν•©λ‹ˆλ‹€.


μΆ”μƒν™”λŠ” λͺ¨λΈλ§

κ·Έλ¦¬ν•˜μ—¬ 첫번째 μ£Όμ œλŠ” 객체지ν–₯ 4λŒ€ νŠΉμ„± 쀑 ν•˜λ‚˜μΈ 좔상화! μž…λ‹ˆλ‹€.

(참고둜 객체지ν–₯ 4λŒ€ νŠΉμ„±μ€ λ‹€λ“€ μ•Œλ‹€μ‹œν”Ό μΊ‘μŠν™”, 상속, 좔상화, λ‹€ν˜•μ„±μ΄λ‹€.)

좔상화?

좔상화! 말만 λ“€μ–΄μ„œλŠ” ν”ΌμΉ΄μ†Œμ˜ μΆ”μƒν™”λ§Œ λ– μ˜€λ¦…λ‹ˆλ‹€.(μ €λ§Œ κ·ΈλŸ΄μ§€λ„

μ§€ν”Όμ§€κΈ°λ©΄ λ°±μ „λ°±μŠΉμ΄λΌλŠ” 말이 μžˆλ“―μ΄ κ°œλ…μ„ μ•Œκ³ μž ν•  λ•ŒλŠ” κ·Έ λ‹¨μ–΄μ˜ 사전적 μ˜λ―ΈλΆ€ν„° μ°Ύμ•„λ³΄λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

좔상 1 ζŠ½θ±‘ 
  • λͺ…사 μ‹¬λ¦¬ μ—¬λŸ¬ κ°€μ§€ μ‚¬λ¬Όμ΄λ‚˜ κ°œλ…μ—μ„œ κ³΅ν†΅λ˜λŠ” νŠΉμ„±μ΄λ‚˜ μ†μ„± λ”°μœ„λ₯Ό μΆ”μΆœν•˜μ—¬ νŒŒμ•…ν•˜λŠ” μž‘μš©.

좜처: 넀이버 ꡭ어사전

μΆ”μƒμ˜ 사전적 의미 쀑 λˆˆμ— λ„λŠ” ꡬ문이 μžˆλŠ”λ°μš”.

"κ³΅ν†΅λ˜λŠ” νŠΉμ„± / κ³΅ν†΅λ˜λŠ” 속성 μΆ”μΆœ"

 

μœ„ 사전적 의미처럼 객체지ν–₯μ—μ„œμ˜ '좔상화'λž€

ꡬ체적인 것을 λΆ„ν•΄ν•΄μ„œ κ΄€μ°°μžκ°€ 관심 μžˆλŠ” νŠΉμ„±λ§Œ κ°€μ§€κ³  μž¬μ‘°ν•© ν•˜λŠ” 것 이라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

그럼 κ΄€μ°°μžκ°€ 관심 μžˆλŠ” νŠΉμ„±λ§Œ κ°€μ§€κ³  μž¬μ‘°ν•© ν•˜λŠ” 것은 μ–΄λ–€ 것을 μ˜λ―Έν•˜λŠ” κ±ΈκΉŒμš”?

객체와 클래슀

μš°λ¦¬κ°€ μ§€λ‚œ μ‹œκ°„μ— 객체와 클래슀의 차이λ₯Ό κ΅¬λΆ„ν•˜λŠ” 법을 μ•Œμ•„λ³΄μ•˜μ—ˆμ£ .

λ³΅μŠ΅ν•  κ²Έ μ•„λž˜ μ§ˆλ¬Έμ— λŒ€λ‹΅ν•˜λŠ” μ‹œκ°„μ„ κ°€μ Έλ³΄μ‹œμ£ .

  • μ‚¬λžŒμ€ κ°μ²΄μΌκΉŒμš” ν΄λž˜μŠ€μΌκΉŒμš”?
  • κΉ€μ—°μ•„λŠ” κ°μ²΄μΌκΉŒμš” ν΄λž˜μŠ€μΌκΉŒμš”?
  • κ°•μ•„μ§€λŠ” κ°μ²΄μΌκΉŒμš” ν΄λž˜μŠ€μΌκΉŒμš”?

정닡은 μ‚¬λžŒμ€ 클래슀, κΉ€μ—°μ•„λŠ” 객체, κ°•μ•„μ§€λŠ” 클래슀 μž…λ‹ˆλ‹€.

 

λŒ€μΆ© λ‘˜μ˜ 관계λ₯Ό 톡해 ν΄λž˜μŠ€μ™€ 객체에 λŒ€ν•΄μ„œ νŒŒμ•…μ€ ν•˜κ² λŠ”λ° 도톡 [객체] 이 λ…€μ„μ˜ μ •ν™•ν•œ μ •μ˜κ°€ λ­”μ§€ λͺ¨ν˜Έν•©λ‹ˆλ‹€.

사싀 객체λ₯Ό λœ»ν•˜λŠ” objectλŠ” 사전적 의미둜 '물건, 물체'λ₯Ό λœ»ν•˜κΈ° λ•Œλ¬Έμ— [객체] λ³΄λ‹€λŠ” [개체]κ°€ λ§žμŠ΅λ‹ˆλ‹€.

κ·Έλ ‡λ‹€κ³  ν•΄μ„œ κ°œμ²΄μ§€ν–₯으둜 μ“Έ 순 μ—†μœΌλ‹ˆ 객체지ν–₯μ—μ„œμ˜ [객체]와 [클래슀]에 λŒ€ν•΄ ν•œ μ€„λ‘œ μ •μ˜λ₯Ό λ‚΄λ €μ•Όκ² μŠ΅λ‹ˆλ‹€.

 

객체 : 세상에 μ‘΄μž¬ν•˜λŠ” μœ μΌλ¬΄μ΄ν•œ 사물
클래슀 : λΆ„λ₯˜, μ§‘ν•© 같은 속성과 κΈ°λŠ₯을 κ°€μ§„ 객체λ₯Ό μ΄μΉ­ν•˜λŠ” κ°œλ…

 

이걸 μžλ°” μ–Έμ–΄λ‘œ ν‘œν˜„ν•˜λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”?

μ‚¬λžŒ 홍길동 = new μ‚¬λžŒ();

μΈκ°„μ˜ μ–Έμ–΄λ‘œ ν•΄μ„ν•΄λ³ΌκΉŒμš”?

πŸ“Œ μ‚¬λžŒμ΄ ν•œλͺ… νƒœμ–΄λ‚¬λŠ”λ° 이름을 홍길동이라고 ν•˜μž.

 

이λ₯Ό ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ ν•΄μ„ν•˜λ©΄

πŸ“Œ μ‚¬λžŒμ΄λΌλŠ” 클래슀λ₯Ό μ΄μš©ν•΄ μœ μΌλ¬΄μ΄ν•˜κ³  μƒˆλ‘œμš΄ ν•˜λ‚˜μ˜ μ‚¬λžŒ(객체)을 λ§Œλ“€μ–΄ 홍길동(객체 μ°Έμ‘° λ³€μˆ˜)μ΄λΌλŠ” 이름을 지어쀬닀.

 

μ •λ¦¬ν•˜λ©΄ classλ₯Ό μ΄μš©ν•΄ objectλ₯Ό μƒμ„±ν•œ 것 μž…λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 객체지ν–₯μ—μ„œλŠ” 객체λ₯Ό μƒμ„±ν•˜μ—¬ heap λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°”μ„ λ•ŒλŠ” objectλΌλŠ” ν‘œν˜„ λ³΄λ‹€λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€(instance)λΌλŠ” ν‘œν˜„μ„ μ”λ‹ˆλ‹€.

 

좔상화에 λŒ€ν•΄ λ§ν•œλ‹€λ©΄μ„œ μ™œ 계속 λ”΄ 길둜 μƒˆλƒκ³  μƒκ°ν•˜μ‹€ 것 κ°™μŠ΅λ‹ˆλ‹€. πŸ€”

 

κ·Έ μ΄μœ λŠ”! μš°λ¦¬κ°€ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  λ•Œ 클래슀λ₯Ό λ¨Όμ € μ„€κ³„ν•˜κ²Œ 되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

κ·Έλ‹ˆκΉŒ 무슨 μƒκ΄€μ΄λƒκ³ μš”

클래슀 섀계

μš°λ¦¬κ°€ μ‚¬λžŒμ΄λΌλŠ” 클래슀λ₯Ό μ„€κ³„ν•œλ‹€κ³  생각해보죠.

μ‚¬λžŒ 클래슀λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € μ‚¬λžŒ 객체듀이 κ°–λŠ” κ³΅ν†΅λœ νŠΉμ„±μ΄ λ­”μ§€ μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€.

 

λŒ€μΆ© 생각해봐도 μ‚¬λžŒμ΄ κ°–λŠ” 속성과 κΈ°λŠ₯은 ꡉμž₯히 λ§Žλ„€μš”.

  • 속성 : ν‚€, λͺΈλ¬΄κ²Œ, λ‚˜μ΄, 성별, 직업, μ‹œλ ₯, ....
    ⭐ 속성은 λͺ…μ‚¬λ‘œ ν‘œν˜„λ˜λ©° 값을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 
  • κΈ°λŠ₯ : λ¨Ήλ‹€, μžλ‹€, μΌν•˜λ‹€, κ±·λ‹€, λˆ„μ›Œμžˆλ‹€, μ΄μ²΄ν•˜λ‹€, μΆœκΈˆν•˜λ‹€, μš΄λ™ν•˜λ‹€, ...
    ⭐ κΈ°λŠ₯은 λ™μ‚¬λ‘œ ν‘œν˜„λ˜λ©°, 객체지ν–₯μ—μ„œλŠ” λ©”μ†Œλ“œλΌκ³  ν‘œν˜„ν•©λ‹ˆλ‹€.

 μ œκ°€ λ‚˜μ—΄ν•œ 것 이외에도 무수히 λ§Žμ€ 속성과 κΈ°λŠ₯을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜.. 이 λͺ¨λ“  것을 ν΄λž˜μŠ€μ— μž‘μ„±ν•˜λŠ” 것이 λ§žμ„κΉŒμš”?

μƒκ°λ§Œν•΄λ„ κ°€μŠ΄μ΄ λ‹΅λ‹΅ν•΄μ Έ μ˜΅λ‹ˆλ‹€.

항상 μš°λ¦¬λŠ” 사싀화λ₯Ό κ·Έλ¦¬λŠ” 것이 μ•„λ‹ˆλΌ 좔상화λ₯Ό 그리고 μžˆλ‹€λŠ” 점을 잊으면 μ•ˆλ©λ‹ˆλ‹€.

 

μš°λ¦¬λŠ” ν”„λ‘œκ·Έλž¨(μ• ν”Œλ¦¬μΌ€μ΄μ…˜)의 창쑰주둜써 클래슀λ₯Ό μ„€κ³„ν•˜κΈ° μ „ 생각해봐야 ν•  것이 μžˆμŠ΅λ‹ˆλ‹€.

 "λ‚΄κ°€ λ§Œλ“€κ³ μž ν•˜λŠ” ν”„λ‘œκ·Έλž¨(μ• ν”Œλ¦¬μΌ€μ΄μ…˜)은 μ–΄λ””μ—μ„œ μ‚¬μš©λ˜λŠ”κ°€?"

 

λ§Œμ•½ λ³‘μ›μ—μ„œ μ‚¬μš©ν•˜κ²Œ λœλ‹€λ©΄ 속성 쀑 직업은 ν•„μš”μ—†μŠ΅λ‹ˆλ‹€.

μ€ν–‰μ—μ„œ μ‚¬μš©ν•˜κ²Œ λœλ‹€λ©΄ ν‚€, λͺΈλ¬΄κ²Œ, 성별, μ‹œλ ₯은 ꡳ이 ν•„μš”μ—†κ²Œ λ©λ‹ˆλ‹€.

 

이λ₯Ό μ •λ¦¬ν•˜λ©΄

 

μΆ”μƒν™”λž€ ꡬ체적인 것을 λΆ„ν•΄ν•΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 경계에 μžˆλŠ” νŠΉμ„±λ§Œ κ°€μ§€κ³  μž¬μ‘°ν•© ν•˜λŠ” 것
= λͺ¨λΈλ§

λ“œλ””μ–΄ 이 κΈ€μ˜ 주제인 μΆ”μƒν™”λŠ” λͺ¨λΈλ§μ΄λ‹€μ— λŒ€ν•΄ 이해가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λͺ¨λΈλ§

λͺ¨λΈλ§μ„ μ’€ μ‰½κ²Œ μ„€λͺ…ν•˜κΈ° μœ„ν•΄ μ§€ν•˜μ²  노선도λ₯Ό 생각해보죠!

μ§€ν•˜μ²  노선도λ₯Ό 보면 각 μ—­μ˜ μ§€ν˜•μ  νŠΉμ„±κ³Ό 거리λ₯Ό λ”± λ§žμΆ°μ„œ κ·Έλ €λ†“μ•˜μ„κΉŒμš”?

잠깐 생각해보면 λ°”λ‘œ μ•„λ‹ˆλΌλŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

이처럼 λͺ¨λΈμ€ 좔상화λ₯Ό 톡해 μ‹€μ œ 사물을 λ‹¨μˆœν•˜κ²Œ λ¬˜μ‚¬ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

이런 λͺ¨λΈλ§μ€ 객체지ν–₯μ—μ„œ 클래슀λ₯Ό 섀계할 λ•Œ, λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν…Œμ΄λΈ”μ„ 섀계할 λ•Œ ν•„μš”ν•œ 기법이기도 ν•©λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ μΆ”μƒν™”λŠ” μžλ°”μ—μ„œ class둜 ν‘œν˜„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

좔상화 == λͺ¨λΈλ§ == μžλ°”μ˜ class ν‚€μ›Œλ“œ

code

μ΄λŸ¬ν•œ ν΄λž˜μŠ€μ™€ 객체의 관계λ₯Ό μžλ°” μ–Έμ–΄λ‘œ λ‚˜νƒ€λ‚΄λ³ΌκΉŒμš”?

클래슀 κ°μ²΄μ°Έμ‘°λ³€μˆ˜ = new 클래슀();
// μƒˆλ‘œμš΄ 객체λ₯Ό ν•˜λ‚˜ 생성해 κ·Έ 객체의 μ£Όμ†Œκ°’μ„ 객체 μ°Έμ‘° λ³€μˆ˜μ— ν• λ‹Ήν•˜λ‹€.

많이 μ΅μˆ™ν•œ ν˜•νƒœμ΄μ£ ! λ¨Όμ € ν•˜λ‚˜ν•˜λ‚˜ λΆ„ν•΄ν•΄μ„œ μ•Œμ•„λ³΄λ„λ‘ ν•©μ‹œλ‹€.

  1. 클래슀 : κ°μ²΄μ°Έμ‘°λ³€μˆ˜μ˜ μžλ£Œν˜•(Type)
  2. κ°μ²΄μ°Έμ‘°λ³€μˆ˜ : μƒμ„±λœ 객체의 μ£Όμ†Œκ°’μ„ 담은 곡간
  3. = : ν• λ‹Ήλ¬Έ
  4. new : μƒˆλ‘œμš΄
  5. 클래슀 : λ§Œλ“€κ³ μž ν•˜λŠ” 객체의 λΆ„λ₯˜, 클래슀의 μΈμŠ€ν„΄μŠ€(객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ 객체 μƒμ„±μžλ₯Ό 호좜)
  6. () : λ©”μ†Œλ“œ

 πŸ’‘μΆ”ν›„ 상속 νŒŒνŠΈμ—μ„œ λ‹€λ£¨κ² μ§€λ§Œ κ°μ²΄μ°Έμ‘°λ³€μˆ˜μ˜ μžλ£Œν˜•μ€ μƒμœ„ν΄λž˜μŠ€λ₯Ό 써도 λ¬΄λ°©ν•©λ‹ˆλ‹€.

정리

μ΄μ œκΉŒμ§€ 이해λ₯Ό 돕기 μœ„ν•΄ ν•œκ΅­λ§λ‘œ μ¨μ„œ 와닿지가 μ•Šμ•˜λŠ”λ°μš”.

μ’€ 더 μ‹€μ œμ—μ„œ μ“°μ΄λŠ” ꡬ문을 톡해 μ •λ¦¬ν•˜κ³  λλ‚΄κ² μŠ΅λ‹ˆλ‹€.

public class Mouse {
	public String name;
    public int age;
    public int countOfTail;
    
    public void sing() {
    	System.out.println(name + "κ°€ λ…Έλž˜λ₯Ό λΆ€λ¦…λ‹ˆλ‹€.");
    }
}

public class Main {
	public static void main(String[] args) {
    	Mouse mickey = new Mouse();
        mickey.name = "λ―Έν‚€";
        mickey.sing();
    }
}
λ―Έν‚€κ°€ λ…Έλž˜λ₯Ό λΆ€λ¦…λ‹ˆλ‹€.

➑️ Mouse mickey = new Mouse();

➑️ ν•œ 마리 μ₯κ°€ νƒœμ–΄λ‚¬μœΌλ‹ˆ(== new Mouse()) κ·Έ 이름을 mickey라고 μ§€μ—ˆλ‹€.

Mouse : 클래슀

ν•œ 마리 μ₯ : 클래슀의 μΈμŠ€ν„΄μŠ€ = 객체

mickey : 객체 μ°Έμ‘° λ³€μˆ˜

 

λ‹€μŒ μ‹œκ°„μ—λŠ” static ν‚€μ›Œλ“œμ— λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€!!

κ°μ‚¬ν•©λ‹ˆλ‹€.

'πŸ“š Study > OOP' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

OOP(3) 상속: μž¬μ‚¬μš©κ³Ό ν™•μž₯ + LSP, ISP  (0) 2023.02.22
OOP(2) static vs instance  (0) 2023.02.22
profile

GiantStepDEV

@kongmi

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!