λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸš€ Development/Kotlin

[μ½”ν‹€λ¦°] ν”„λ‘œνΌν‹° property λž€?(κ²Œν„° getter & μ„Έν„° setter)

by Jay Din 2023. 5. 26.
728x90
λ°˜μ‘ν˜•

ν΄λž˜μŠ€λΌλŠ” κ°œλ…μ˜ λͺ©μ μ€ 데이터λ₯Ό μΊ‘μŠν™”ν•˜κ³  μΊ‘μŠν™”ν•œ 데이터λ₯Ό λ‹€λ£¨λŠ” μ½”λ“œλ₯Ό ν•œ 주체 μ•„λž˜ κ°€λ‘λŠ” 것이닀. 

μžλ°”μ—μ„œλŠ” 데이터λ₯Ό ν•„λ“œμ— μ €μž₯ν•˜λ©°, 멀버 ν•„λ“œμ˜ κ°€μ‹œμ„±μ€ 보톡 λΉ„κ³΅κ°œλ‹€.

ν΄λž˜μŠ€λŠ” μžμ‹ μ„ μ‚¬μš©ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ κ·Έ 데이터에 μ ‘κ·Όν•˜λŠ” ν†΅λ‘œλ‘œ μ“Έ 수 μžˆλŠ” μ ‘κ·Όμž λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

보톡은 ν•„λ“œλ₯Ό 읽기 μœ„ν•œ κ²Œν„°(getter)λ₯Ό μ œκ³΅ν•˜κ³  ν•„λ“œλ₯Ό λ³€κ²½ν•˜κ²Œ ν—ˆμš©ν•΄μ•Ό ν•  경우 μ„Έν„°(setter)λ₯Ό μΆ”κ°€ μ œκ³΅ν•  수 μžˆλ‹€. 

 

λ°˜μ‘ν˜•

ν”„λ‘œνΌν‹° property

μžλ°”μ—μ„œλŠ” ν•„λ“œμ™€ μ ‘κ·Όμžλ₯Ό ν•œλ° λ¬Άμ–΄ ν”„λ‘œνΌν‹°λΌκ³  λΆ€λ₯΄λ©°, ν”„λ‘œνΌν‹°λΌλŠ” κ°œλ…μ„ ν™œμš©ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬κ°€ λ§Žλ‹€.

코틀린은 ν”„λ‘œνΌν‹°λ₯Ό μ–Έμ–΄ κΈ°λ³Έ κΈ°λŠ₯으둜 μ œκ³΅ν•˜λ©°, μ½”ν‹€λ¦° ν”„λ‘œνΌν‹°λŠ” μžλ°”μ˜ ν•„λ“œμ™€ μ ‘κ·Όμž λ©”μ„œλ“œλ₯Ό μ™„μ „νžˆ λŒ€μ‹ ν•œλ‹€.

ν΄λž˜μŠ€μ—μ„œ ν”„λ‘œνΌν‹°λ₯Ό μ„ μ–Έν•  λ•ŒλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 방법과 λ§ˆμ°¬κ°€μ§€λ‘œ valμ΄λ‚˜ varλ₯Όμ‚¬μš©ν•œλ‹€.

val둜 μ„ μ–Έν•œ ν”„λ‘œνΌν‹°λŠ” 읽기 μ „μš©μ΄λ©°, var둜 μ„ μ–Έν•œ ν”„λ‘œνΌν‹°λŠ” λ³€κ²½ κ°€λŠ₯ν•˜λ‹€.

클래슀 μ•ˆμ—μ„œ λ³€κ²½ κ°€λŠ₯ν•œ ν”„λ‘œνΌν‹° μ„ μ–Έν•˜κΈ°     

class Person(
	// 읽기 μ „μš© ν”„λ‘œνΌν‹°.
    // 코틀린은 (λΉ„κ³΅κ°œ) ν•„λ“œλ₯Ό μ½λŠ” λ‹¨μˆœν•œ (곡개) κ²Œν„°λ₯Ό λ§Œλ“€μ–΄λ‚Έλ‹€. 
	val name: String,
    // μ“Έ 수 μžˆλŠ” ν”„λ‘œνΌν‹°
    // 코틀린은 (λΉ„κ³΅κ°œ) ν•„λ“œ, (곡개) κ²Œν„°, (곡개) μ„Έν„°λ₯Ό λ§Œλ“€μ–΄λ‚Έλ‹€.  
    var isMarried: Boolean
)

기본적으둜 μ½”ν‹€λ¦°μ—μ„œ ν”„λ‘œνΌν‹°λ₯Ό μ„ μ–Έν•˜λŠ” 방식은 ν”„λ‘œνΌν‹°μ™€ κ΄€λ ¨μžˆλŠ” μ ‘κ·Όμžλ₯Ό μ„ μ–Έν•˜λŠ” 것이닀.(읽기 μ „μš© ν”„λ‘œνΌν‹°μ˜ 경우 κ²Œν„°λ§Œ μ„ μ–Έν•˜λ©° λ³€κ²½ν•  수 μžˆλŠ” ν”„λ‘œνΌν‹°μ˜ 경우 세터와 κ²Œν„°λ₯Ό λͺ¨λ‘ μ„ μ–Έν•œλ‹€.)

코틀린은 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ λΉ„κ³΅κ°œ ν•„λ“œμ™€ κ·Έ ν•„λ“œμ— 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ μ„Έν„°, ν•„λ“œμ˜ 값을 읽기 μœ„ν•œ κ²Œν„°λ‘œ 이뀄진 κ°„λ‹¨ν•œ λ””ν΄νŠΈ μ ‘κ·Όμž κ΅¬ν˜„μ„ μ œκ³΅ν•œλ‹€.

val person = Person("Bob", true)
// ν”„λ‘œνΌν‹° 이름을 직접 μ‚¬μš©ν•΄λ„ 코틀린이 μžλ™μœΌλ‘œ κ²Œν„°λ₯Ό ν˜ΈμΆœν•΄μ€€λ‹€.
println(person.name)
println(person.isMarried)

κ²Œν„°λ₯Ό ν˜ΈμΆœν•˜λŠ” λŒ€μ‹  ν”„λ‘œνΌν‹°λ₯Ό 직접 μ‚¬μš©ν–ˆμŒμ— μœ μ˜ν•΄μ•Ό ν•œλ‹€. μžλ°”μ—μ„œ 보닀 μ½”λ“œκ°€ 더 κ°„κ²°ν•΄μ‘Œλ‹€. 

λ³€κ²½ κ°€λŠ₯ν•œ ν”„λ‘œνΌν‹°μ˜ 세터도 λ§ˆμ°¬κ°€μ§€ λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.

μžλ°”μ—μ„œλŠ” person.setMarried(false)둜 μ–΄λ–€ μ‚¬λžŒμ΄ μ΄ν˜Όν–ˆλ‹€λŠ” 사싀을 κΈ°λ‘ν•˜μ§€λ§Œ, μ½”ν‹€λ¦°μ—μ„œλŠ” person.isMarried = falseλ₯Ό μ“΄λ‹€.

λŒ€λΆ€λΆ„μ˜ ν”„λ‘œνΌν‹°μ—λŠ” κ·Έ ν”„λ‘œνΌν‹°μ˜ 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ ν•„λ“œκ°€ μžˆλ‹€. 이λ₯Ό ν”„λ‘œνΌν‹°λ₯Ό λ’·λ°›μΉ¨ν•˜λŠ” ν•„λ“œλΌκ³  λΆ€λ₯Έλ‹€. ν•˜μ§€λ§Œ μ›ν•œλ‹€λ©΄ ν”„λ‘œνΌν‹° 값을 κ·Έλ•Œ κ·Έλ•Œ 계산(예λ₯Ό λ“€μ–΄ λ‹€λ₯Έ ν”„λ‘œνΌν‹°λ“€λ‘œλΆ€ν„° 값을 계산할 μˆ˜λ„ μžˆλ‹€.)ν•  μˆ˜λ„ μžˆλ‹€.       

팁 

μžλ°”μ—μ„œ μ„ μ–Έν•œ ν΄λž˜μŠ€μ— λŒ€ν•΄ μ½”ν‹€λ¦° 문법을 μ‚¬μš©ν•΄λ„ λœλ‹€.

μ½”ν‹€λ¦°μ—μ„œλŠ” μžλ°” 클래슀의 데이터λ₯Ό val ν”„λ‘œνΌν‹°μ²˜λŸΌ μ‚¬μš©ν•  수 있고, κ²Œν„°/μ„Έν„° 쌍이 μžˆλŠ” κ²½μš°μ—λŠ” var ν”„λ‘œνΌν‹°μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλ‹€.

예λ₯Ό λ“€μ–΄ setNameκ³Ό getNameμ΄λΌλŠ” μ ‘κ·Όμžλ₯Ό μ œκ³΅ν•˜λŠ” μžλ°” 클래슀λ₯Ό μ½”ν‹€λ¦°μ—μ„œ μ‚¬μš©ν•  λ•ŒλŠ” nameμ΄λΌλŠ” ν”„λ‘œνΌν‹°λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. μžλ°” ν΄λž˜μŠ€κ°€ isMarried와 setMarried λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€λ©΄ 그에 μƒμ‘ν•˜λŠ” μ½”ν‹€λ¦° ν”„λ‘œνΌν‹°μ˜ 이름은 isMarriedλ‹€.      

 

μ»€μŠ€ν…€ μ ‘κ·Όμž

ν”„λ‘œνΌν‹°μ˜ μ ‘κ·Όμžλ₯Ό 직접 μž‘μ„±ν•˜λŠ” 방법이닀.

μ§μ‚¬κ°ν˜• 클래슀인 Rectangle을 μ •μ˜ν•˜λ©΄μ„œ μžμ‹ μ΄ μ •μ‚¬κ°ν˜•μΈμ§€ μ•Œλ €μ£ΌλŠ” κΈ°λŠ₯을 λ§Œλ“€μ–΄λ³΄μž.

μ§μ‚¬κ°ν˜•μ΄ μ •μ‚¬κ°ν˜•μΈμ§€λ₯Όλ³„λ„μ˜ ν•„λ“œμ— μ €μž₯ν•  ν•„μš”κ°€ μ—†λ‹€. μ‚¬κ°ν˜•μ˜ λ„ˆλΉ„μ™€ 높이가 같은지 κ²€μ‚¬ν•˜λ©΄ μ •μ‚¬κ°ν˜• μ—¬λΆ€λ₯Ό μ•Œ 수 μžˆλ‹€.

class Rectangle(val height: Int, val width:Int){
	val isSquare: Boolean
    	get() {			// ν”„λ‘œνΌν‹° κ²Œν„° μ„ μ–Έ
        	return height == width	
        }
}

isSquare ν”„λ‘œνΌν‹°μ—λŠ” 자체 값을 μ €μž₯ν•˜λŠ” ν•„λ“œκ°€ν•„μš” μ—†λ‹€. 이 ν”„λ‘œνΌν‹°μ—λŠ” 자체 κ΅¬ν˜„μ„ μ œκ³΅ν•˜λŠ” κ²Œν„°λ§Œ μ‘΄μž¬ν•œλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•  λ•Œλ§ˆλ‹€ κ²Œν„°κ°€ ν”„λ‘œνΌν‹° 값을 맀번 λ‹€μ‹œ κ³„μ‚°ν•œλ‹€.

λΈŒλ‘μ„ λ³Έλ¬ΈμœΌλ‘œν•˜λŠ” λ³΅μž‘ν•œ ꡬ문을 κΌ­ μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. μœ„μ™€ 같은 경우 get() = height == width 라고해도 λœλ‹€. μ»€μŠ€ν…€ κ²Œν„°λ₯Ό μ‚¬μš©ν•˜λŠ” ν”„λ‘œνΌν‹°λ„ μ•žμ—μ„œ μ‚΄νŽ΄λ³Έ ν”„λ‘œνΌν‹°μ™€ λ§ˆμ°¬κ°€μ§€λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

λ°˜μ‘ν˜•

 

728x90
λ°˜μ‘ν˜•

'πŸš€ Development > Kotlin' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μ½”ν‹€λ¦° Kotlin μ΄λž€?  (1) 2023.05.17