JAVA/μžλ°”μ˜ 정석

[JAVA] 11. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°3. κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜μ™€ μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜, μ°Έμ‘°ν˜• λ°˜ν™˜νƒ€μž…, μž¬κ·€ν˜ΈμΆœ, 클래슀 λ©”μ„œλ“œμ™€ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ

초보보 ν˜œμ§„ 2022. 4. 15. 16:04
728x90

 

1️⃣ κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜μ™€ μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜

μžλ°”μ—μ„œλŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ λ§€κ°œλ³€μˆ˜λ‘œ μ§€μ •ν•œ 값을 λ©”μ„œλ“œμ˜ λ§€κ°œλ³€μˆ˜μ— λ³΅μ‚¬ν•΄μ„œ λ„˜κ²¨μ€€λ‹€. 

λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ΄ κΈ°λ³Έν˜• primitive type일 λ•ŒλŠ” κΈ°λ³Έν˜• 값이 λ³΅μ‚¬λ˜κ² μ§€λ§Œ, 

μ°Έμ‘°ν˜• reference type 이면 μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œκ°€ λ³΅μ‚¬λœλ‹€.

 

 

κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜ : λ³€μˆ˜μ˜ 값을 읽기만 ν•  수 μžˆλ‹€. (read only)
μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜ : λ³€μˆ˜μ˜ 값을 읽고 λ³€κ²½ν•  수 μžˆλ‹€. (read & write)

- κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜ 

change(int x)λŠ” κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜

λ”°λΌμ„œ d.x의 값이 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€. μ™œλƒν•˜λ©΄ 원본이 μ•„λ‹Œ 볡사본이 λ³€κ²½λœ 것이기 λ•Œλ¬Έμ— μ›λ³Έμ—λŠ” μ•„λ¬΄λŸ° 영ν–₯을 주지 μ•ŠλŠ”λ‹€!

-> κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜λŠ” λ³€μˆ˜μ— μ €μž₯된 κ°’λ§Œ 읽을 수 μžˆμ„ 뿐 λ³€κ²½ν•  수 μ—†λ‹€.

 

- μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜

change(Date d) λŠ” μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜

-> λ”°λΌμ„œ μ΄λ²ˆμ—λŠ” d.x의 값이 λ³€κ²½λ˜μ—ˆλ‹€. μ™œλƒν•˜λ©΄ change(Data d) λ§€κ°œλ³€μˆ˜κ°€ μ°Έμ‘°ν˜•μ΄λΌμ„œ 값이 μ•„λ‹ˆλΌ 값이 μ €μž₯된 μ£Όμ†Œλ₯Ό change() 에 λ„˜κ²¨μ£Όμ—ˆκΈ° λ•Œλ¬Έμ— 값을 μ½μ–΄μ˜€λŠ”κ²ƒ 뿐만 μ•„λ‹ˆλΌ λ³€κ²½ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€. 

 

이전 μ˜ˆμ œμ™€λŠ” 달리 change() 에 λ§€κ°œλ³€μˆ˜λ₯Ό μ°Έμ‘°ν˜•μœΌλ‘œ μ„ μ–Έν–ˆκΈ° λ•Œλ¬Έμ— x의 값이 μ•„λ‹Œ μ£Όμ†Œκ°€ λ§€κ°œλ³€μˆ˜ d에 λ³΅μ‚¬λ˜μ—ˆλ‹€. 

이제 mainλ©”μ„œλ“œμ˜ μ°Έμ‘°λ³€μˆ˜ d와 change λ©”μ„œλ“œμ˜ μ°Έμ‘°λ³€μˆ˜ dλŠ” 같은 객체λ₯Ό κ°€λ¦¬ν‚€κ²Œ λœλ‹€. 

 

 

2️⃣ μ°Έμ‘°ν˜• λ°˜ν™˜νƒ€μž…

λ§€κ°œλ³€μˆ˜λΏλ§Œ μ•„λ‹ˆλΌ λ°˜ν™˜νƒ€μž…λ„ μ°Έμ‘°ν˜•μ΄ 될 수 μžˆλ‹€. 

λ°˜ν™˜νƒ€μž…μ΄ μ°Έμ‘°ν˜•μ΄λΌλŠ” 것은 λ©”μ„œλ“œκ°€ 객체의 μ£Όμ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€λŠ” 것이닀.

 

 

3️⃣ μž¬κ·€ 호좜 recursive call

void method() {
	method();
}

-> λ©”μ„œλ“œμ˜ λ‚΄λΆ€μ—μ„œ λ©”μ„œλ“œ μžμ‹ μ„ λ‹€μ‹œ ν˜ΈμΆœν•˜λŠ” 것을 μž¬κ·€ν˜ΈμΆœμ΄λΌκ³  ν•œλ‹€. 그리고 μž¬κ·€ ν˜ΈμΆœμ„ ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μž¬κ·€ λ©”μ„œλ“œλΌκ³  ν•œλ‹€. 

κ·Έλƒ₯ μ˜€λ‘œμ§€ μž¬κ·€ν˜ΈμΆœμ„ ν•˜λ©΄ λ¬΄ν•œ λ°˜λ³΅μ— λΉ μ§€κ²Œ 되기 λ•Œλ¬Έμ— μž¬κ·€ ν˜ΈμΆœλ„ 쑰건문이 ν•„μˆ˜μ μœΌλ‘œ λ”°λΌλ‹€λ‹Œλ‹€. 

 

μž¬κ·€ν˜ΈμΆœμ€ 반볡문과 μœ μ‚¬ν•œ 점이 많으며, λŒ€λΆ€λΆ„μ˜ μž¬κ·€ν˜ΈμΆœμ€ 반볡문으둜 μž‘μ„±ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€. 

λ°˜λ³΅λ¬Έμ€ κ·Έμ € 같은 λ¬Έμž₯을 λ°˜λ³΅ν•΄μ„œ μˆ˜ν–‰ν•˜λŠ” κ²ƒμ΄μ§€λ§Œ, λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 λ°˜λ³΅λ¬Έλ³΄λ‹€ λͺ‡ 가지 κ³Όμ •, 예λ₯Ό λ“€λ©΄ λ§€κ°œλ³€μˆ˜ 볡사와 μ’…λ£Œ ν›„ 볡귀할 μ£Όμ†Œ μ €μž₯ λ“±, 이 μΆ”κ°€λ‘œ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— λ°˜λ³΅λ¬Έλ³΄λ‹€ μž¬κ·€ν˜ΈμΆœμ˜ μˆ˜ν–‰μ‹œκ°„μ΄ 더 였래 κ±Έλ¦°λ‹€. 

 

그런데 μž¬κ·€ν˜ΈμΆœμ„ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ”?

μž¬κ·€ν˜ΈμΆœμ€ λ…Όλ¦¬μ μœΌλ‘œ κ°„κ²°ν•˜κΈ° λ•Œλ¬Έμ— μ‚¬μš©ν•œλ‹€. 

λͺ‡ 겹의 반볡문과 쑰건무으둜 λ³΅μž‘ν•˜κ²Œ μž‘μ„±λœ μ½”λ“œκ°€ μž¬κ·€ 호좜둜 μž‘μ„±ν•˜λ©΄ 보닀 λ‹¨μˆœν•œ ꡬ쑰λ₯΄ λ°”λ€” 수 있기 λ•Œλ¬Έμ΄λ‹€. 

 

-> 24

 

μž¬κ·€ν˜ΈμΆœμ˜ λŒ€ν‘œμ μΈ μ˜ˆλŠ” νŒ©ν† λ¦¬μ–Ό κ΅¬ν•˜λŠ” 것이닀. 

f(n) = n * f(n-1), 단 f(1) = 1 

 

3️⃣ 클래슀 λ©”μ„œλ“œ(static λ©”μ„œλ“œ) 와 μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ

λ©”μ„œλ“œ μ•žμ— static이 λΆ™μ–΄ 있으면 클래슀 λ©”μ„œλ“œκ³ , 뢙지 μ•ŠμœΌλ©΄ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ΄λ‹€. 

클래슀 λ©”μ„œλ“œλ„ ν΄λž˜μŠ€λ³€μˆ˜μ²˜λŸΌ 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ 'ν΄λž˜μŠ€μ΄λ¦„.λ©”μ„œλ“œμ΄λ¦„' κ³Ό 같은 μ‹μœΌλ‘œ 호좜이 κ°€λŠ₯ν•˜λ‹€.

λ°˜λ©΄μ— μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” λ°˜λ“œμ‹œ 객체λ₯Ό μƒμ„±ν•΄μ•Όλ§Œ ν˜ΈμΆœν•  수 μžˆλ‹€. 

 

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

- μΈμŠ€ν„΄μŠ€ 생성 ν›„ 'μ°Έμ‘°λ³€μˆ˜.λ©”μ„œλ“œμ΄λ¦„()' 호좜 

- μΈμŠ€ν„΄μŠ€ 멀버(iv, im) κ³Ό κ΄€λ ¨λœ μž‘μ—…μ„ ν•˜λŠ” λ©”μ„œλ“œ 

- λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(iv) μ‚¬μš© κ°€λŠ₯ 

 

μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ κ΄€λ ¨λœ μž‘μ—…μ„ ν•˜λŠ”, 즉 λ©”μ„œλ“œμ΄ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”λ° μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό ν•„μš”λ‘œ ν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€. 

 

static λ©”μ„œλ“œ

- 객체 생성 없이 'ν΄λž˜μŠ€μ΄λ¦„.λ©”μ„œλ“œμ΄λ¦„()'으둜 호좜

- μΈμŠ€ν„΄μŠ€ 멀버(iv,im) κ³Ό κ΄€λ ¨μ—†λŠ” μž‘μ—…μ„ ν•˜λŠ” λ©”μ„œλ“œ 

- λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(iv)λ₯Ό μ‚¬μš© λΆˆκ°€ 

 

클래슀 λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€μ™€ κ΄€κ³„μ—†λŠ”(μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‚˜ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”) λ©”μ„œλ“œλ₯Ό 클래슀 λ©”μ„œλ“œ(static λ©”μ„œλ“œ)둜 μ •μ˜ν•œλ‹€. 

 

1. 클래슀λ₯Ό 섀계할 λ•Œ λ©€λ²„λ³€μˆ˜ 쀑 λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ— κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것에 static을 뢙인닀. 

: μƒμ„±λœ 각 μΈμŠ€ν„΄μŠ€λŠ” μ„œλ‘œ 독립적이기 λ•Œλ¬Έμ— 각 μΈμŠ€ν„΄μ˜ λ³€μˆ˜λŠ” μ„œλ‘œ λ‹€λ₯Έ 값을 μœ μ§€ν•œλ‹€. 

κ·ΈλŸ¬λ‚˜ λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ—μ„œ 같은 값이 μœ μ§€λ˜μ–΄μ•Ό ν•˜λŠ” λ³€μˆ˜λŠ” static을 λΆ™μ—¬μ„œ 클래슀 λ³€μˆ˜λ‘œ μ •μ˜ν•΄μ•Όν•œλ‹€. 

 

2. 클래슀 λ³€μˆ˜ (static λ³€μˆ˜)λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ μ‚¬μš©ν•  수 μžˆλ‹€.

: static 이 뢙은 λ³€μˆ˜λŠ” ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— 올라갈 λ•Œ 이미 μžλ™μ μœΌλ‘œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

3. 클래슀 λ©”μ„œλ“œ (static λ©”μ„œλ“œ)λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.

: μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€κ°€ λ°˜λ“œμ‹œ μ‘΄μž¬ν•΄μ•Όλ§Œ μ‚¬μš©ν•  수 μžˆλŠ”λ°, 클래슀 λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€ 생성 없이 ν˜ΈμΆœκ°€λŠ₯ν•˜λ―€λ‘œ 클래슀 λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œ μΈμŠ€ν„΄μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλ‹€. κ·Έλž˜μ„œ 클래슀 λ©”μ„œλ“œμ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ μ‚¬μš©μ„ κΈˆμ§€ν•œλ‹€. 

λ°˜λ©΄μ— μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‚˜ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œλŠ” static이 뢙은 멀버듀을 μ‚¬μš©ν•˜λŠ” 것이 μ–Έμ œλ‚˜ κ°€λŠ₯ν•˜λ‹€. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€λŠ” 것은 static λ³€μˆ˜κ°€ 이미 λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•œλ‹€λŠ” 것을 μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

4. λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, static을 λΆ™μ΄λŠ” 것을 κ³ λ €ν•œλ‹€.

: λ©”μ„œλ“œμ˜ μž‘μ—…λ‚΄μš© μ€‘μ—μ„œ μΈμŠ€ν„΄μŠ€λ³€μˆ˜λ₯Ό ν•„μš”λ‘œ ν•œλ‹€λ©΄ static을 뢙일 수 μ—†λ‹€. λ°˜λŒ€λ‘œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ static을 λΆ™μ΄μž. λ©”μ„œλ“œ ν˜ΈμΆœμ‹œκ°„μ΄ 짧아지기 λ•Œλ¬Έμ— μ„±λŠ₯이 ν–₯μƒλœλ‹€. 

static을 μ•ˆ 뢙인 λ©”μ„œλ“œλŠ” μ‹€ν–‰ μ‹œ ν˜ΈμΆœλ˜μ–΄μ•Όν•  λ©”μ„œλ“œλ₯Ό μ°ΎλŠ” 과정이 μΆ”κ°€μ μœΌλ‘œ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— μ‹œκ°„μ΄ 더 κ±Έλ¦°λ‹€. 

 

- 클래슀의 λ©€λ²„λ³€μˆ˜ 쀑 λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ— κ³΅ν†΅λœ 값을 μœ μ§€ν•΄μ•Όν•˜λŠ” 것이 μžˆλŠ”μ§€ μ‚΄νŽ΄λ³΄κ³  있으면, static을 λΆ™μ—¬μ€€λ‹€.
- μž‘μ„±ν•œ λ©”μ„œλ“œ μ€‘μ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‚˜ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œμ— static을 뢙일 것을 κ³ λ €ν•œλ‹€. 

 

-> 클래슀 λ©”μ„œλ“œλŠ” 객체 생성없이 λ°”λ‘œ 호좜이 κ°€λŠ₯ν•˜κ³ , μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œ 후에 호좜 κ°€λŠ₯ν•˜λ‹€. 

 

 

4️⃣ 클래슀 멀버와 μΈμŠ€ν„΄μŠ€ λ©€λ²„κ°„μ˜ 참쑰와 호좜 

같은 ν΄λž˜μŠ€μ— μ†ν•œ 멀버듀 κ°„μ—λŠ” λ³„λ„μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ μ„œλ‘œ μ°Έμ‘° λ˜λŠ” 호좜이 κ°€λŠ₯ν•˜λ‹€.

단 ν΄λž˜μŠ€λ©€λ²„κ°€ μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό μ°Έμ‘° λ˜λŠ” ν˜ΈμΆœν•˜κ³ μž ν•˜λŠ” κ²½μš°μ—λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•΄μ•Όν•œλ‹€. 

-> μΈμŠ€ν„΄μŠ€ 멀버가 μ‘΄μž¬ν•˜λŠ” μ‹œμ μ— 클래슀 λ©€λ²„λŠ” 항상 μ‘΄μž¬ν•˜μ§€λ§Œ, 클래슀 멀버가 μ‘΄μž¬ν•˜λŠ” μ‹œμ μ— μΈμŠ€ν„΄μŠ€ 멀버가 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ μˆ˜λ„ 있기 λ•Œλ¬Έμ΄λ‹€. 

 

클래슀 λ©€λ²„λŠ” μ–Έμ œλ‚˜ μ°Έμ‘° λ˜λŠ” 호좜이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€ 멀버가 클래슀 멀버λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ•ˆλœλ‹€.

클래슀 멀버 κ°„μ˜ μ°Έμ‘° λ˜λŠ” 호좜 μ—­μ‹œ μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†λ‹€.

κ·ΈλŸ¬λ‚˜ μΈμŠ€ν„΄μŠ€ λ©€λ²„λŠ” λ°˜λ“œμ‹œ 객체λ₯Ό μƒμ„±ν•œ ν›„μ—λ§Œ μ°Έμ‘° λ˜λŠ” 호좜이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 클래슀 멀버가 μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό μ°Έμ‘°, ν˜ΈμΆœν•˜κΈ° μœ„ν•΄μ„œλŠ” 객체λ₯Ό μƒμ„±ν•˜μ—¬μ•„ ν•œλ‹€. 

ν•˜μ§€λ§Œ μΈμŠ€ν„΄μŠ€ λ©€λ²„κ°„μ˜ ν˜ΈμΆœμ—λŠ” μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†λ‹€. μ™œλƒν•˜λ©΄ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€ 멀버가 μ‘΄μž¬ν•œλ‹€λŠ” 것은 μΈμŠ€ν„΄μŠ€κ°€ 이미 μƒμ„±λ˜μ—ˆλ‹€λŠ” 것을 μ˜λ―Έν•˜λ©° 즉 λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€ 멀버듀도 λͺ¨λ‘ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

 

 

 

 

 

 

 

 

 

 

728x90