λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ‹œλ„/ꡭ비지원

[D+18] 클래슀 κ΅μž¬μ •λ¦¬

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2022. 10. 17.

 

 

ꡭ비지원 D+18

-  클래슀 κ΅μž¬μ •λ¦¬ -

 


 

객체

κ°μ²΄λž€?

μžλ°”λŠ” λŒ€ν‘œμ μΈ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° (OOP: Object Oriented Programming)으둜 ν˜„μ‹€μ„Έκ³„ μžˆλŠ” 것쀑에 ν”„λ‘œκ·Έλž¨μ œμž‘μ‹œ ν•„μš”ν•œ 속성듀을 뽑아내어 μ»΄ν“¨νŒ…μ‹œμŠ€ν…œμœΌλ‘œ μž¬κ΅¬μ„±ν•œ 것이닀.

κ°μ²΄λŠ” ν•„λ“œ(field)와 λ©”μ†Œλ“œ(method)둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.

 

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•

1️⃣ 좔상화

- μ‚¬μš©μžμ˜ μš”κ΅¬μ‚¬ν•­, μ„€κ³„μ‚¬ν•­μ˜ μš”κ΅¬μ‚¬ν•­μ— μ˜ν•΄ 무엇이 μ€‘μš”ν•œ 것인지λ₯Ό μΈμ§€ν•˜κ³  λ½‘μ•„λ‚΄λŠ” 것

 

2️⃣ μΊ‘μŠν™”

- 좔상화λ₯Ό 톡해 μ–»μ–΄λ‚Έ 속성듀을 λ¬ΆλŠ”κ²ƒ

 

3️⃣ λ‹€ν˜•μ„±

- 같은 λͺ¨μ–‘μ˜ ν•¨μˆ˜κ°€ 상황에 따라 λ‹€λ₯΄κ²Œ λ™μž‘ν•˜λŠ” 것

- μ˜€λ²„λ‘œλ”© : ν•¨μˆ˜μ˜ 이름은 κ°™μœΌλ‚˜ λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜λ‚˜, νƒ€μž…μ„ ν†΅ν•΄μ„œ λ‹€λ₯Έ ν•¨μˆ˜λ‘œ μ •μ˜ν•˜λŠ” 것

- κ³Όλ„ν•œ μ˜€λ²„λ‘œλ”©μ€ λ³΅μž‘λ„λ₯Ό 올림

- μ—¬λŸ¬κ°œμ˜ μ˜€λ²„λ‘œλ”© μ…‹νŠΈλ“€μ€ ν•˜λ‚˜μ˜ 컨셉을 μœ μ§€ν•΄μ•Ό ν•œλ‹€.

 

4️⃣ 상속

- λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•΄ μžμ‹ 클래슀λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•˜λŠ” 기법

- μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ”°λ‘œ μ •μ˜ν•˜μ§€ μ•Šμ•„λ„ λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ μ •μ˜λœ 것듀을 μžλ™μœΌλ‘œ 상속받아 κ΅¬ν˜„ν•  수 μžˆλ‹€.

 

5️⃣ 정보은닉

- μΊ‘μŠν™” 정보듀을 λ°–μ—μ„œ μ ‘κ·Ό λΆˆκ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” 것

 

클래슀 ꡬ성멀버

• ν•„λ“œ

- 객체의 고유 데이터, λΆ€ν’ˆ 객체, μƒνƒœμ •λ³΄λ₯Ό μ €μž₯ν•˜λŠ” κ³³

- λ³€μˆ˜μ™€ λΉ„μŠ·ν•˜μ§€λ§Œ λ³€μˆ˜λŠ” μƒμ„±μžμ™€ λ©”μ†Œλ“œ λ‚΄μ—μ„œλ§Œ μ‚¬μš©κ°€λŠ₯ν•˜λ©° μ‹€ν–‰μ’…λ£Œμ‹œ μžλ™μ†Œλ©Έλ˜μ§€λ§Œ, ν•„λ“œλŠ” μƒμ„±μžμ™€ λ©”μ†Œλ“œ μ „μ²΄μ—μ„œ μ‚¬μš©λ˜λ©° 객체가 μ†Œλ©Έλ˜μ§€ μ•ŠλŠ” ν•œ μ‘΄μž¬ν•œλ‹€.

 

 μƒμ„±μž

- ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό 생성할 λ•Œ ν˜ΈμΆœλ˜μ–΄ 객체의 μ΄ˆκΈ°ν™”λ₯Ό λ‹΄λ‹Ήν•œλ‹€.

- β‘  κΈ°λ³Έμƒμ„±μžλŠ” λ°˜λ“œμ‹œ λ§Œλ“€κ²ƒ

- β‘‘ μƒμ„±μžλŠ” λͺ…μ‹œμ μΈ μ΄ˆκΈ°ν™” 코딩을 해쀄 것 => 신뒰성을 높이기 μœ„ν•΄

- β‘’ μ˜€λ²„λ‘œλ”©λœ μƒμ„±μžλ₯Ό λ§Œλ“€ λ•Œ λ¬΄μ§€μ„±μœΌλ‘œ λ§Œλ“€μ§€ 말고 μ •μ±…μ΄λ‚˜ 기쀀에 맞게 μž‘μ„±ν•  것

 

 λ©”μ†Œλ“œ

- 객체 λ‚΄μ—μ„œ λ™μž‘μ— ν•΄λ‹Ήλœλ‹€.

- 리턴값이 μžˆμ„μˆ˜λ„ μ—†μ„μˆ˜λ„ 있으며 λ‹€μ–‘ν•œ ν˜•νƒœμ˜ 값을 리턴할 수 μžˆλ‹€.

 

정적 멀버와 static

- static을 μ‚¬μš©ν•  λ•Œ μƒμ„±μžμ—μ„œ 넣지 μ•Šκ³  λ°”λ‘œ μ΄ˆκΈ°ν™”κ°€ κ°€λŠ₯ν•˜λ‹€.

- νŠΉμ • 클래슀 내에 μžˆμ–΄λ„ μ†Œμ†λ§Œ λ˜μ–΄μžˆμ„ 뿐 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ λ”°λ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

 

final

- final νƒ€μž…μ˜ ν•„λ“œλ₯Ό μƒμ„±μ‹œ ν•œλ²ˆ μ…‹νŒ…ν•œ 값을 λ³€κ²½ν•  수 μ—†λ‹€.

 

νŒ¨ν‚€μ§€

- 클래슀λ₯Ό μ²΄κ³„μ μœΌλ‘œ κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ 폴더

- λ„νŠΈ(.)λ₯Ό μ‚¬μš©ν•΄μ„œ μƒμœ„ ν•˜μœ„λ₯Ό κ΅¬λΆ„ν•œλ‹€.

 

μ ‘κ·Όμ œν•œμž

- 같은 package에 μžˆλŠλƒ μ•„λ‹ˆλƒμ— 따라 μ ‘κ·Όμ˜ λ²”μœ„κ°€ λ‹¬λΌμ§ˆ 수 μžˆμœΌλ‹ˆ ν•„λ“œ μ•žμ—λŠ” 항상 μ ‘κ·Όμ œμ–΄μžλ₯Ό μ‚¬μš©ν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€.

 

 public

- 같은 νŒ¨ν‚€μ§€ 뿐만 μ•„λ‹ˆλΌ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œλ„ μ•„λ¬΄λŸ° μ œν•œ 없이 μ‚¬μš©ν•  수 μžˆλ‹€.

 

 protected 

- 같은 νŒ¨ν‚€μ§€μ— μ†ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  수 μžˆλ„λ‘ν•œλ‹€.

- λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ†ν•œ ν΄λž˜μŠ€κ°€ ν•΄λ‹Ή 클래슀의 μžμ‹μΌ 경우라면 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€.

 

 default 

- μ ‘κ·Όμ œν•œμ„ μƒλž΅ν–ˆμ„λ•Œ 기본으둜 μ„€μ •λ˜λŠ” μ ‘κ·Ό μ œν•œμžλ‘œ 같은 νŒ¨ν‚€μ§€μ—μ„œλŠ” μ•„λ¬΄λŸ° μ œν•œ 없이 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œλŠ” μ‚¬μš©ν•  수 없도둝 μ œν•œν•œλ‹€.

 

 private 

- 동일 νŒ¨ν‚€μ§€μ΄κ±΄ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ΄κ±΄ 상관없이 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ§€ λͺ»ν•˜λ„둝 μ œν•œν•œλ‹€.

 

Getter / Setter

- λ‹¨μˆœνžˆ 클래슀 μ•ˆμ— μžˆλŠ” 값을 λ„£κ³  λΉΌκΈ°μœ„ν•œ μš©λ„λ‘œ μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ˜¬λ°”λ₯Έ μš©λ„μ™€ 방법에 맞게 값을 getν•˜κ³  setν•˜λŠ” 과정을 거쳐야 ν•œλ‹€.

- λ¬΄μ§€μ„±μœΌλ‘œ getter와 setterλ₯Ό λ§Œλ“œλŠ” 일은 없도둝 ν•œλ‹€. (getter와 setter의 쑴재의 μœ λ¬΄λ„ νŒŒμ•…ν•  ν•„μš”κ°€ μžˆλ‹€)

 

μ–΄λ…Έν…Œμ΄μ…˜

μš°λ¦¬λŠ” 기쑴에 μ»΄νŒŒμΌλŸ¬κ°€ λ¬Έμ œκ°€ μƒκΈΈλ•Œ μ—λŸ¬λ₯Ό λ‚΄λ³΄λ‚΄μ„œ μš°λ¦¬κ°€ 였λ₯˜λ₯Ό μ²˜λ¦¬ν•˜λŠ” ν˜•μ‹μœΌλ‘œ 진행해왔닀.

그런데 μ–΄λ…Έν…Œμ΄μ…˜ 같은 κ²½μš°λŠ” μš°λ¦¬κ°€ μ»΄νŒŒμΌλŸ¬μ—κ²Œ λ©”μ‹œμ§€λ₯Ό λ‚¨κ²¨μ„œ 정보λ₯Ό μ•Œλ €μ€˜μ„œ λ―Έμ—°μ‹œμ— λ°œμƒλ  μ—λŸ¬λ₯Ό μ˜ˆμΈ‘ν•  수 있게 도움을 쀄 수 μžˆλŠ” 것이닀.

(ꡬ체적인 μ΄μ•ΌκΈ°λŠ” λ‚˜μ€‘μ— ν•™μŠ΅ν•˜λ„λ‘ ν•œλ‹€)

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€