λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Study/Java

[TIL] OOP μƒμ„±μž

by hong- 2022. 5. 11.

🐻 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° 기초

☝🏻 μƒμ„±μž Constructor

  - 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 객체λ₯Ό μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μ œμ–΄μž

  - 객체λ₯Ό μƒμ„±ν•˜λŠ” 역할을 ν•˜λŠ” 클래슀의 κ΅¬μ„±μš”μ†Œ

  - μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ ν˜ΈμΆœλ˜λŠ” μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λ©”μ„œλ“œ

  - new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 객체λ₯Ό 생성할 λ•Œ ν˜ΈμΆœλ˜λŠ” 것

  - μΈμŠ€ν„΄μŠ€ 생성을 λ‹΄λ‹Ήν•˜λŠ” 것은 new ν‚€μ›Œλ“œ

     μƒμ„±μžλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ“€μ„ μ΄ˆκΈ°ν™”ν•˜λŠ”λ° μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œ

클래슀λͺ…(λ§€κ°œλ³€μˆ˜) {
    ...
}

 πŸͺ΄ μƒμ„±μžμ˜ 흐름

  - 클래슀λ₯Ό κ°€μ§€κ³  객체λ₯Ό μƒμ„±ν•˜λ©΄ ν•΄λ‹Ή κ°μ²΄λŠ” λ©”λͺ¨λ¦¬μ— μ¦‰μ‹œ 생성됨

    → μ΄λ ‡κ²Œ μƒμ„±λœ κ°μ²΄λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°€ 아직 μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠλŠ” μƒνƒœ (즉, 0μ΄λ‚˜ null λ“±μ˜ 값을 가짐)

       → 객체의 생성과 λ™μ‹œμ— μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ›ν•˜λŠ” κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•  수 μžˆλŠ” μƒμ„±μžλΌλŠ” λ©”μ„œλ“œ 제곡

 

  - μ‚¬μš©μžκ°€ μ›ν•˜λŠ” κ°’μœΌλ‘œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜λ €λ©΄ 일반적인 μ΄ˆκΈ°ν™”λ°©μ‹μœΌλ‘œ x

      → Why? μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ€‘μ—λŠ” private λ³€μˆ˜λ„ 있으며 이 λ•ŒλŠ” μ‚¬μš©μžλ‚˜ ν”„λ‘œκ·Έλž¨μ΄ 직접 μ ‘κ·Ό x

         → κ°μ²΄μ„œ μƒμ„±λœ ν›„λΆ€ν„° μ‚¬μš©λ˜κΈ° μ „κΉŒμ§€ λ°˜λ“œμ‹œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”λ₯Ό μœ„ν•΄ ν˜ΈμΆœλ˜μ–΄μ•Ό 함


 πŸͺ΄ μƒμ„±μž νŠΉμ§•

  - λ°˜ν™˜κ°’μ΄ μ—†μŒ

  - μƒμ„±μž 이름은 클래슀 이름과 λ™μΌν•˜κ²Œ μ‚¬μš©ν•˜κΈ°λ‘œ μ•½μ†λ˜μ–΄ 있음

  - μ•”λ¬΅μ μœΌλ‘œ 호좜됨

  - μΈμŠ€ν„΄μŠ€ μƒμ„±μ‹œ ν˜ΈμΆœλ˜λŠ”, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ΄ˆκΈ°ν™”ν•˜λŠ” λ©”μ„œλ“œ

  - 객체의 μƒνƒœλ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ”λ° μ‚¬μš© (λ©”μ„œλ“œλŠ” 객체의 λ™μž‘μ„ 보여주기 μœ„ν•΄ μ‚¬μš©)


🌱 λ©”μ„œλ“œμ™€ μƒμ„±μžμ˜ 차이

   1️⃣ μƒμ„±μž 이름은 λ°˜λ“œμ‹œ 클래슀 이름과 κ°™μ•„μ•Ό 함

   2️⃣ μƒμ„±μžλŠ” 리턴 νƒ€μž…μ΄ μ—†μŒ


✌🏻 κΈ°λ³Έ μƒμ„±μž default constructor

 - λͺ¨λ“  ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ μƒμ„±μžκ°€ μ‘΄μž¬ν•¨

 - μƒμ„±μžκ°€ 클래슀 μ•ˆμ— ν¬ν•¨λ˜μ§€ μ•ŠμœΌλ©΄ μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ κΈ°λ³Έ μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ μΆ”κ°€ν•΄ 쀌

 - μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μΆ”κ°€ν•΄μ£ΌλŠ” κΈ°λ³Έ μƒμ„±μžλŠ” λ§€κ°œλ³€μˆ˜λ„, λ‚΄μš©λ„ μ—†μŒ

 - μƒμ„±μžκ°€ 이미 μΆ”κ°€λ˜μ–΄ μžˆλŠ” κ²½μš°μ—λŠ” 이미 μΆ”κ°€λœ μƒμ„±μžλ₯Ό 기본으둜 μ‚¬μš©

클래슀λͺ…() {}

✌🏻 맀개 λ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž

 - λ©”μ„œλ“œμ²˜λŸΌ λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 호좜 μ‹œμ— ν•΄λ‹Ή 값을 λ°›μ•„ μΈμŠ€ν„΄μŠ€λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ”λ° μ‚¬μš©

 - κ³ μœ ν•œ νŠΉμ„±μ„ κ°€μ§„ μΈμŠ€ν„΄μŠ€λ₯Ό 계속 λ§Œλ“€μ–΄μ•Όν•˜λŠ” 경우 μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ 각기 λ‹€λ₯Έ 값을 κ°€μ§€κ³  μ΄ˆκΈ°ν™” κ°€λŠ₯

 - μΈμŠ€ν„΄μŠ€ 생성과 λ™μ‹œμ— μ›ν•˜λŠ” κ°’ ν• λ‹Ή κ°€λŠ₯

 - λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” 경우 κ·Έ κ°œμˆ˜μ™€ νƒ€μž…μ— μ•Œλ§žκ²Œ μƒμ„±μžλ₯Ό 호좜

클래슀λͺ…(λ°μ΄ν„°νƒ€μž… λ³€μˆ˜λͺ…){}

🀟🏻 this

 - this μ°Έμ‘° λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€ μžμ‹ μ„ 가리킀며 ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€ μ£Όμ†Œλ₯Ό 가리킴

 - thisλ₯Ό ν†΅ν•΄μ„œ μΈμŠ€ν„΄μŠ€ μžμ‹ μ˜ λ³€μˆ˜μ— μ ‘κ·Ό κ°€λŠ₯

 - 주둜 μΈμŠ€ν„΄μŠ€ ν•„λ“œλͺ…κ³Ό μ§€μ—­λ³€μˆ˜(λ§€κ°œλ³€μˆ˜)λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

 - λͺ¨λ“  λ©”μ„œλ“œμ—λŠ” μžμ‹ μ΄ ν¬ν•¨λœ 클래슀의 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” thisλΌλŠ” μ°Έμ‘°λ³€μˆ˜κ°€ 있음

   → 일반적으둜 μ»΄νŒŒμΌλŸ¬κ°€ this.λ₯Ό μΆ”κ°€ν•΄μ£Όμ–΄ μƒλž΅ν•˜λŠ” κ²½μš°κ°€ 많음


🀟🏻 this( )

  - μžμ‹ μ΄ μ†ν•œ ν΄λž˜μŠ€μ—μ„œ λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” κ²½μš°μ— μ‚¬μš©

  - 즉, carTest에 μƒμ„±μžκ°€ A와 Bκ°€ μžˆμ„ λ•Œ, Bμ—μ„œ this()λ₯Ό μ‚¬μš©ν•˜λ©΄ Aκ°€ 호좜됨

   

  🌱 this()λ©”μ„œλ“œ μ‚¬μš©μ„ μœ„ν•΄μ„œλŠ” ?

     (1) λ°˜λ“œμ‹œ μƒμ„±μž λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯

     (2) λ°˜λ“œμ‹œ μƒμ„±μžμ˜ 첫 쀄에 μœ„μΉ˜ν•΄μ•Ό 함

'Study > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[TIL] 상속  (0) 2022.05.12
[TIL] μΊ‘μŠν™”  (0) 2022.05.12
[Java] OOP ν•„λ“œμ™€ λ©”μ„œλ“œ  (0) 2022.05.10
[Java] OOP ν΄λž˜μŠ€μ™€ 객체  (0) 2022.05.10
[Java] 쑰건문 반볡문  (0) 2022.05.07