Back-End/Java

[Java] μžλ°”μ˜ 정석(기초편) Ch6 μš”μ•½

μ±”πŸ» 2022. 1. 18. 14:50

호좜 μŠ€νƒ(call stack)

  • μŠ€νƒ(stack) : 밑이 λ§‰νžŒ μƒμž. μœ„μ— 차곑차곑 μŒ“μΈλ‹€.
  • 호좜 μŠ€νƒ(call stack) : λ©”μ„œλ“œ μˆ˜ν–‰μ— ν•„μš”ν•œ λ©”λͺ¨λ¦¬κ°€ μ œκ³΅λ˜λŠ” 곡간

λ©”μ„œλ“œκ°€ 호좜되면 ν˜ΈμΆœμŠ€νƒμ— λ©”λͺ¨λ¦¬ ν• λ‹Ή, μ’…λ£Œ μ‹œ ν•΄μ œ


κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜(read only)

μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜(read & write)

λ°˜ν™˜νƒ€μž…μ΄ μ°Έμ‘°ν˜•μΈ 경우 객체의 μ£Όμ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.


μΈμŠ€ν„΄μŠ€ = 객체 = iv 묢음

μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(iv) : κ°œλ³„μ†μ„±, κ°μ²΄λ§ˆλ‹€ λ§Œλ“€μ–΄μ§

클래슀 λ³€μˆ˜(cv) : 곡톡속성, 1개만 곡유

λ§€κ°œλ³€μˆ˜ : λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ μͺ½μ—μ„œ μ€€ 값을 μ „λ‹¬ν•˜λŠ” 쀑간역할, 맀개체

λ©”μ„œλ“œλŠ” 클래슀 μ˜μ—­μ—λ§Œ μž‘μ„±μ΄ κ°€λŠ₯ν•˜λ‹€.

μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ

  • μΈμŠ€ν„΄μŠ€ 생성 ν›„, 'μ°Έμ‘°λ³€μˆ˜.λ©”μ„œλ“œμ΄λ¦„()'으둜 호좜
  • μΈμŠ€ν„΄μŠ€ 멀버(iv, im)와 κ΄€λ ¨λœ μž‘μ—…μ„ ν•˜λŠ” λ©”μ„œλ“œ
  • λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(iv) μ‚¬μš© κ°€λŠ₯

static λ©”μ„œλ“œ(클래슀 λ©”μ„œλ“œ)

  • 객체생성없이 'ν΄λž˜μŠ€μ΄λ¦„.λ©”μ„œλ“œμ΄λ¦„()'으둜 호좜
  • μΈμŠ€ν„΄μŠ€ 멀버(iv, im)와 κ΄€λ ¨μ—†λŠ” μž‘μ—…μ„ ν•˜λŠ” λ©”μ„œλ“œ
  • λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(iv) μ‚¬μš© λΆˆκ°€

λ‘˜μ˜ 차이 : iv μ‚¬μš© μ—¬λΆ€

μΈμŠ€ν„΄μŠ€ 멀버(iv, im)을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œμ— static을 뢙인닀.

 > λ©”μ„œλ“œλŠ” κ³΅ν†΅μœΌλ‘œ μ¨μ„œ static을 λΆ™μ΄λŠ” 게 μ•„λ‹ˆλΌ ivλ₯Ό μ•ˆ μ“°λ©΄ static을 λΆ™μ΄λŠ” 것이닀.


μ˜€λ²„λ‘œλ”©

같은 μ΄λ¦„μ˜ λ©”μ„œλ“œ μ—¬λŸ¬κ°œ μ •μ˜

<μ˜€λ²„λ‘œλ”©μ΄ μ„±λ¦½ν•˜κΈ° μœ„ν•œ 쑰건>

  1. λ©”μ„œλ“œ 이름이 κ°™μ•„μ•Ό ν•œλ‹€.
  2. λ§€κ°œλ³€μˆ˜μ˜ 개수 λ˜λŠ” νƒ€μž…μ΄ λ‹¬λΌμ•Όν•œλ‹€.
  3. λ°˜ν™˜νƒ€μž…μ€ 영ν–₯μ—†λ‹€.

μƒμ„±μž

  • μΈμŠ€ν„΄μŠ€(객체=iv 묢음) μ΄ˆκΈ°ν™” λ©”μ„œλ“œ
  1. 이름이 클래슀 이름과 κ°™μ•„μ•Ό ν•œλ‹€.
  2. 리턴값이 μ—†λ‹€(void μ•ˆ λΆ™μž„)
  3. λͺ¨λ“  ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ μƒμ„±μžλ₯Ό κ°€μ Έμ•Ό ν•œλ‹€.

κΈ°λ³Έ μƒμ„±μž

  • λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” μƒμ„±μž
  • ν΄λž˜μŠ€μ— μƒμ„±μžκ°€ ν•˜λ‚˜λ„ 없을 λ•Œλ§Œ, μ»΄νŒŒμΌλŸ¬κ°€ κΈ°λ³Έ μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ μΆ”κ°€ν•΄μ€€λ‹€.

β˜…μƒμ„±μžλŠ” 무쑰건 기본으둜 μž‘μ„±ν•œλ‹€. 컴파일러 μžλ™μΆ”κ°€ κΈ°λŠ₯에 μ˜μ‘΄ν•˜κΈ° μ•ŠκΈ°β˜…

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

  • μƒμ„±μžμ—μ„œ λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©(클래슀 이름 X this O)
  • λ‹€λ₯Έ μƒμ„±μž 호좜 μ‹œ 첫 μ€„μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯

μ½”λ“œμ˜ 쀑볡을 μ œκ±°ν•˜λ €κ³  μ‚¬μš©ν•œλ‹€.

 

μ°Έμ‘°λ³€μˆ˜ this

  • μΈμŠ€ν„΄μŠ€ μžμ‹ μ„ κ°€λ¦¬ν‚€λŠ” μ°Έμ‘°λ³€μˆ˜, μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œκ°€ μ €μž₯λ˜μ–΄ μžˆλ‹€.
  • μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ(μƒμ„±μž 포함)μ—μ„œ μ‚¬μš© κ°€λŠ₯
  • μ§€μ—­λ³€μˆ˜(lv)와 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(iv)λ₯Ό ꡬ별할 λ•Œ μ‚¬μš©
  • λͺ¨λ“  μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ— μ§€μ—­λ³€μˆ˜λ‘œ μˆ¨κ²¨μ§„ μ±„λ‘œ μ‘΄μž¬ν•œλ‹€.

this와 this()λŠ” λΉ„μŠ·ν•˜κ²Œ 생겼을 뿐 μ™„μ „νžˆ λ‹€λ₯Έ 것이닀. thisλŠ” 'μ°Έμ‘° λ³€μˆ˜'이고 this()λŠ” 'μƒμ„±μž'이닀.


λ©€λ²„λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”

  1. μžλ™μ΄ˆκΈ°ν™”
  2. κ°„λ‹¨μ΄ˆκΈ°ν™”(λͺ…μ‹œμ  μ΄ˆκΈ°ν™” - =)
  3. λ³΅μž‘μ΄ˆκΈ°ν™”( {}, static {}, μƒμ„±μž)

클래슀 λ³€μˆ˜(cv) μ΄ˆκΈ°ν™” μ‹œμ  : ν΄λž˜μŠ€κ°€ 처음 λ©”λͺ¨λ¦¬μ— λ‘œλ”©λ  λ•Œ 단 ν•œ 번

μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(iv) μ΄ˆκΈ°ν™” μ‹œμ  : μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ λ§ˆλ‹€