🌈 [Section1] 11. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°1

ν˜„μ£ΌΒ·2022λ…„ 9μ›” 2일
0

bootcamp

λͺ©λ‘ 보기
11/71

πŸ“• 였늘 배운 λ‚΄μš©!

  • 1차원 λ°°μ—΄ / 2차원 λ°°μ—΄ / κ°€λ³€ λ°°μ—΄
  • 계산기 ν”„λ‘œκ·Έλž¨ λ§Œλ“€κΈ°

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

  • ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•„μš”ν•œ 데이터λ₯Ό λͺ¨μ•„ 속성(state)κ³Ό κΈ°λŠ₯(behavior)을 가진 μˆ˜λ§Žμ€ 객체(object)듀을 λ§Œλ“€κ³  κ·Έ 객체듀 κ°„μ˜ μƒν˜Έμž‘μš©μ„ 톡해 μ–΄λ– ν•œ κΈ°λŠ₯을 κ΅¬μ„±ν•˜λŠ” 것
  • ν•˜λ‚˜μ˜ 역할을 μˆ˜ν–‰ν•˜λŠ” 'λ©”μ†Œλ“œμ™€ λ³€μˆ˜(데이터)'의 묢음

✏️ 클래슀(Class)

  • 속성(attribute)κ³Ό ν–‰μœ„(behavior)λ₯Ό λ³€μˆ˜μ™€ λ©”μ„œλ“œλ‘œ μ •μ˜ν•œ 것
    (ν΄λž˜μŠ€λŠ” 객체λ₯Ό μ •μ˜ν•œ 섀계도, κ°μ²΄λŠ” κ·Έ μ„€κ³„λ„λ‘œ λ§Œλ“  μ‹€μ œ μ œν’ˆ)
  • 클래슀의 이름은 보톡 λŒ€λ¬Έμžλ‘œ μ‹œμž‘

✏️ μΈμŠ€ν„΄μŠ€(instance)

  • ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ 것을 ν† λŒ€λ‘œ μ‹€μ œ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœ 것
    (클래슀λ₯Ό 톡해 λ§Œλ“€μ–΄μ§„ ν•΄λ‹Ή 객체)

βœ” μΈμŠ€ν„΄νŠΈν™”(instantiate)

  • ν•΄λ‹Ή ν΄λž˜μŠ€μ—μ„œ 객체λ₯Ό λ§Œλ“œλŠ” κ³Όμ •

✏️ 객체의 생성 및 ν™œμš©

1. 객체 생성

객체λ₯Ό μƒμ„±ν•œλ‹€λŠ” 것 = ν•΄λ‹Ή 객체λ₯Ό νž™ λ©”λͺ¨λ¦¬μ— λ„£κ³  κ·Έ μ£Όμ†Œκ°’μ„ μ°Έμ‘°λ³€μˆ˜μ— μ €μž₯ν•˜λŠ” 것

클래슀λͺ… μ°Έμ‘°_λ³€μˆ˜λͺ… = new μƒμ„±μž();

πŸ‘‰ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜κΈ° μœ„ν•œ μ°Έμ‘°λ³€μˆ˜ μ„ μ–Έν•˜κ³  μΈμŠ€ν„΄μŠ€ 생성 ν›„, 객체의 μ£Όμ†Œλ₯Ό μ°Έμ‘° λ³€μˆ˜μ— μ €μž₯

2. 객체 ν™œμš©

μ°Έμ‘°λ³€μˆ˜λͺ….ν•„λ“œλͺ… // ν•„λ“œκ°’ 뢈러였기
μ°Έμ‘°λ³€μˆ˜λͺ….λ©”μ„œλ“œλͺ…() // λ©”μ„œλ“œ 호좜

. (포인트 μ—°μ‚°μž) - 톡해 μ£Όμ†Œκ°’μ„ μ°Ύμ•„κ°€ κ·Έ μ•ˆμ—μžˆλŠ” 객체에 μ ‘κ·Όν•œλ‹€


✏️ 클래슀의 ꡬ성 μš”μ†Œ

  1. ν•„λ“œ
  • 클래슀 λ³€μˆ˜
  • μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
  1. λ©”μ„œλ“œ
  • 지역 λ³€μˆ˜
  1. μƒμ„±μž
  2. μ΄λ„ˆν΄λž˜μŠ€

(1) ν•„λ“œ - 클래슀의 속성을 λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜
EX. μžλ™μ°¨μ˜ 색, 바퀴 수 λ“±μ˜ λ””μžμΈ

(2) λ©”μ„œλ“œ - 클래슀의 κΈ°λŠ₯을 λ‚˜νƒ€λ‚΄λŠ” ν•¨μˆ˜
EX. μžλ™μ°¨μ˜ κ°€μ†ν•˜κΈ°, μ •μ§€ν•˜κΈ° λ“±μ˜ κΈ°λŠ₯

(3) μƒμ„±μž - 클래슀의 객체λ₯Ό μƒμ„±ν•˜λŠ” μ—­ν• 
(ν΄λž˜μŠ€μ™€ 이름이 동일함 but, 뒀에 μ†Œκ΄„ν˜Έκ°€ λΆ™μŒ)

(4) μ΄λ„ˆ 클래슀 - 클래슀 λ‚΄λΆ€μ˜ 클래슀

(μƒμ„±μžλ₯Ό μ œμ™Έν•˜κ³  λ‚˜λ¨Έμ§€ 3가지 μš”μ†Œλ₯Ό 클래슀의 멀버(member)라고 뢀름)

βœ” 클래슀 λ³€μˆ˜

  • static 을 μ‚¬μš©ν•˜μ—¬ μΈμŠ€ν„΄μŠ€κ°€ λͺ‡κ°œκ°€ μƒκΈ°λ˜ νŠΉμ •ν•œ 값을 κ³΅μœ ν•˜λŠ” 경우 μ‚¬μš©
  • μΈμŠ€ν„΄μŠ€λ₯Ό λ”°λ‘œ μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ ν΄λž˜μŠ€μ΄λ¦„.ν΄λž˜μŠ€λ³€μˆ˜μ΄λ¦„ ν•˜λ©΄ κ°€λŠ₯ (정적 멀버이기 λ•Œλ¬Έ)
  • 클래슀 μ˜μ—­(κ³΅ν†΅λœ μ €μž₯곡간)에 μ €μž₯λ˜μ–΄ κ·Έ 값을 곡유
  • 직접 μ΄ˆκΈ°ν™” ν•˜μ§€ μ•Šμ•„λ„ μžλ™μœΌλ‘œ μ΄ˆκΈ°κ°’ 섀정됨

βœ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

  • μΈμŠ€ν„΄μŠ€κ°€ κ°€μ§€λŠ” κ°κ°€μ˜ 고유 속성을 μ €μž₯ν•˜κΈ° μœ„ν•œ λ³€μˆ˜
  • new μƒμ„±μž()λ₯Ό 톡해 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λœ 이후에 생성 κ°€λŠ₯
  • 독립적인 μ €μž₯곡간인 νž™λ©”λͺ¨λ¦¬μ— μ €μž₯
  • 직접 μ΄ˆκΈ°ν™” ν•˜μ§€ μ•Šμ•„λ„ μžλ™μœΌλ‘œ μ΄ˆκΈ°κ°’ 섀정됨

βœ” μ§€μ—­λ³€μˆ˜

  • λ©”μ„œλ“œ 내에 μ„ μ–Έλ˜μ–΄ λ©”μ„œλ“œ λ‚΄ {}μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯
  • λ‚˜λ¨Έμ§€μ™€ λ‹€λ₯΄κ²Œ μŠ€νƒ λ©”λͺ¨λ¦¬μ— μ €μž₯ => λ©”μ„œλ“œκ°€ μ’…λ£Œλ¨κ³Ό λ™μ‹œμ— 같이 μ†Œλ©Έ
  • 직접 μ΄ˆκΈ°ν™” ν•΄μ€˜μ•Όν•¨ (μ—λŸ¬ λ°œμƒμ‹œν‚€μ§€ μ•ŠκΈ° μœ„ν•΄)

βœ”οΈ 이 λ³€μˆ˜λ“€μ΄ μ €μž₯λ˜λŠ” κ³³
β €
1. νž™ λ©”λͺ¨λ¦¬

  • 객체가 없어지지 μ•ŠλŠ” ν•œ μ ˆλŒ€ μ‚­μ œλ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬
  1. μŠ€νƒλ©”λͺ¨λ¦¬
  • ν•œλ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 가상머신(garbage collecter)이 μžλ™ μ‚­μ œ

βœ”οΈ μœ„μ˜ μ„Έ λ³€μˆ˜μ˜ μƒμ„±μ‹œμ κ³Ό μ†Œλ©Έμ‹œμ 
β €
1. μΈμŠ€ν„΄μŠ€λ³€μˆ˜ πŸ‘‰ 객체 생성 μ‹œ 생성 / GCκ°€ μ•Œμ•„μ„œ μ†Œλ©Έ
2. ν΄λž˜μŠ€λ³€μˆ˜ πŸ‘‰ JVM λ‘œλ“œ μ‹œ 생성, ν”„λ‘œκ·Έλž¨ μ’…λ£Œ μ‹œ μ†Œλ©Έ
3. μ§€μ—­λ³€μˆ˜ πŸ‘‰ λŸ°νƒ€μž„ 도쀑 생성, λ©”μ„œλ“œ μ’…λ£Œ μ‹œ μ†Œλ©Έ

πŸ’‘ μ—¬κΈ°μ„œ static μ΄λž€?

  • 이 ν‚€μ›Œλ“œκ°€ λΆ™μ–΄μžˆλŠ” 멀버 = 정적 멀버(static member)
  • 클래슀의 멀버(ν•„λ“œ, λ©”μ„œλ“œ, μ΄λ„ˆ 클래슀)에 μ‚¬μš©
  • 클래슀 내뢀에 μ €μž₯ 곡간을 가지고 μžˆμ–΄ 객체 생성 없이 κ³§λ°”λ‘œ μ‚¬μš©ν•  수 있고 클래슀 λ‚΄μ—μ„œ 값을 지정할 수 있음
    => 클래슀 λ‚΄μ—μ„œ κ°’ μ§€μ •ν•œλ‹€λ©΄, 좜λ ₯문을 μž‘μ„±ν•  λ•Œ 클래슀λͺ….λ³€μˆ˜λͺ… 을 μž‘μ„±ν•˜λ©΄ 좜λ ₯됨
  • λͺ¨λ“  객체와 λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜κΈ° μœ„ν•΄ μ‚¬μš© (객체λ₯Ό λͺ‡κ°œλ₯Ό λ§Œλ“€λ˜ classλ³€μˆ˜κ°€ ν•˜λ‚˜λ§Œ λ§Œλ“€μ–΄μ§„ 것 처럼 값이 λͺ¨λ‘ κ°™μŒ)

βœ” λ©”μ„œλ“œ

  • νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 일련의 λͺ…λ Ήλ¬Έλ“€μ˜ 집합
  • 클래슀의 κΈ°λŠ₯을 λ‹΄λ‹Ή
  • λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜(method signature)와 λ©”μ„œλ“œ λ°”λ””(method body)둜 λ‚˜λ‰¨
    (λ©”μ„œλ“œ μ•žμ—λ„ static 뢙이면 곡유 λ©”μ†Œλ“œ => μ–˜λ„ 클래슀 λͺ…λ§ŒμœΌλ‘œ λ°”λ‘œ 생성 κ°€λŠ₯해짐)
  • 클래슀 μ˜μ—­μ— κΈ°λŠ₯듀을 미리 적어놓고 ν•„μš”ν•  λ•Œλ§ˆλ‹€ κ³΅μœ ν•¨
    μžλ°”μ œμ–΄μž λ°˜ν™˜νƒ€μž… λ©”μ„œλ“œλͺ…(맀개 λ³€μˆ˜) { // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜
    	λ©”μ„œλ“œ λ‚΄μš© // λ©”μ„œλ“œ λ°”λ””
    }

μžλ°”μ œμ–΄μž λ°˜ν™˜νƒ€μž… λ©”μ„œλ“œλͺ…(맀개 λ³€μˆ˜) (λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜) - 이 λ©”μ„œλ“œκ°€ μ–΄λ–€ νƒ€μž…μ„ λ°˜ν™˜ν•˜κ³  λ©”μ„œλ“œ 이름이 무엇이며, ν•΄λ‹Ή μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œ μ–΄λ–€ μž¬λ£Œλ“€μ΄ ν•„μš”ν•œμ§€(맀개 λ³€μˆ˜)에 λŒ€ν•œ 정보

βœ”οΈ λ©”μ„œλ“œμ˜ λ°˜ν™˜νƒ€μž…μ€ void λ˜λŠ” μžλ£Œν˜•λ§Œ κ°€λŠ₯
β €
πŸ‘‰ void인 경우 λ°˜ν™˜ 값이 μ—†κΈ° λ•Œλ¬Έμ— System.out.println();으둜 κ·Έλƒ₯ μ¨μžˆλŠ” κ°’ 좜λ ₯
πŸ‘‰ μžλ£Œν˜•μΈ 경우 λ°˜λ“œμ‹œ λ©”μ„œλ“œ λ°”λ””({} )μ•ˆμ— λ°˜λ“œμ‹œ return 문을 λ„£μ–΄ μˆ˜ν–‰ 결과값을 ν˜ΈμΆœν•œ λ©”μ„œλ“œλ‘œ 전달해야함
β €
(μ—¬κΈ°μ„œ 결과값은 λ°˜λ“œμ‹œ λ°˜ν™˜νƒ€μž…κ³Ό μΌμΉ˜ν•˜κ±°λ‚˜ μžλ™ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•œ 것이어야 함)

βœ”οΈ 인자(argument)

  • λ©”μ„œλ“œ 호좜 μ‹œ κ΄„ν˜Έ() μ•ˆμ— λ„£μ–΄μ£ΌλŠ” μž…λ ₯ κ°’
  • 인자의 κ°œμˆ˜μ™€ μˆœμ„œλŠ” λ©”μ„œλ“œ μ •μ˜ν•  λ•Œ μ„ μ–Έλœ λ§€κ°œλ³€μˆ˜μ™€ μΌμΉ˜λ˜μ–΄μ•Ό 함

βœ” λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©(Method Overloading)

  • ν•˜λ‚˜μ˜ 클래슀 μ•ˆμ— 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬κ°œ μ“°λŠ” 것
  • 같은 κΈ°λŠ₯을 μ—¬λŸ¬κ°€μ§€ 경우둜 μ‚¬μš©ν•  λ•Œ / λ©”μ„œλ“œκ°€ λ„ˆλ¬΄ λ§Žμ•„ 이름 짓기가 νž˜λ“€ λ•Œ μ‚¬μš©
    βœ”οΈ 쑰건 1) λ©”μ„œλ“œλ“€μ˜ 이름이 κ°™μ•„μ•Ό 함
    βœ”οΈ 쑰건 2) λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜λ‚˜ νƒ€μž…μ€ λ‹€ 달라야 함
    (이 쑰건듀을 λ§Œμ‘±ν•΄μ•Ό μ˜€λ²„λ‘œλ”©μ΄ κ°€λŠ₯)

λ‚˜λ„ 이런 μ˜ˆμ‹œλ“€μ„ 보며 직접 intellij에 λ”°λΌν•΄λ³΄μ•˜λ‹€ !

μΈμŠ€ν„΄μŠ€λ„ μƒμ„±ν•˜κ³  ν΄λž˜μŠ€λ„ μƒμ„±ν•˜μ—¬ 좜λ ₯κΉŒμ§€ μ™„μ„± !


🌈 λŠλ‚€μ 

처음 κ°œλ…μ„ 배울 λ•ŒλŠ” 각각의 κ°œλ…μ€ 이해λ₯Ό ν•˜κ² λŠ”λ° κ·Έλž˜μ„œ 이게 무슨 관계고 어디에 μ“°μ΄λŠ” 건지 이해가 잘 μ•ˆκ°”λŠ”λ° 직접 ν•΄λ³΄λ©΄μ„œλ„ μ΄ν•΄ν•˜κ³  쀌 μ„Έμ…˜μ—μ„œ μ„€λͺ…ν•΄μ£Όμ‹œλŠ” 것 듣고도 많이 μ΄ν•΄ν–ˆλ‹€! 아직 κΈ°μ΄ˆμ΄μ§€λ§Œ κ·Έλž˜λ„ 큰 ν‹€ μ •λ„λŠ” 이해λ₯Ό ν•œ λ“―! 심화가 사싀 쑰금 걱정이 되긴 ν•˜μ§€λ§Œ μ£Όλ§λ™μ•ˆ 빑곡 ν•΄μ•Όκ² λ‹€ γ…Žγ…Ž

0개의 λŒ“κΈ€