[Kotlin] λ©”μ„œλ“œμ™€ ν•¨μˆ˜

πŸ’‘ ν•¨μˆ˜μ™€ λ©”μ„œλ“œμ˜ 차이λ₯Ό μ•Œκ³ , ν”„λ‘œνΌν‹°μ™€ ν•„λ“œμ— λŒ€ν•΄μ„œλ„ ν•™μŠ΅ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

ν•¨μˆ˜ vs λ©”μ„œλ“œ

  • λ©”μ„œλ“œμ™€ ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž˜λ° κ΄€μ μ—μ„œ 맀우 μœ μ‚¬ν•œ κ°œλ…μ΄μ§€λ§Œ, μ‚¬μš© λ§₯락에 따라 차이가 μžˆμŠ΅λ‹ˆλ‹€.
  • ν•¨μˆ˜(function)
    • 코틀린은 ν•¨μˆ˜λ₯Ό fun ν‚€μ›Œλ“œλ₯Ό ν™œμš©ν•΄μ„œ μ‹œμž‘ν•©λ‹ˆλ‹€.
    • 이λ₯Ό ν™œμš©ν•΄μ„œ top-level ν•¨μˆ˜, 멀버 ν•¨μˆ˜, μ§€μ—­ν•¨μˆ˜ 등을 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ•„λž˜μ™€ 같이 이름이 μ—†λŠ” 읡λͺ…ν•¨μˆ˜λ‘œ ν™œμš©λ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.
val anonymousFunction = fun(x: Int, y: Int): Int {
    return x + y
}
  • λ©”μ„œλ“œ(method)
    • λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€μ™€ μ—°κ²°λœ ν•¨μˆ˜, 객체에 μ†ν•œ ν•¨μˆ˜λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
    • 멀버 ν•¨μˆ˜λ₯Ό λ©”μ„œλ“œλΌκ³  ν•˜λ©°, λ©”μ„œλ“œ ν˜ΈμΆœμ„ μœ„ν•΄μ„œ 클래슀 μΈμŠ€ν„΄μŠ€κ°€ λ°˜λ“œμ‹œ ν•„μš”ν•©λ‹ˆλ‹€.
    • ν™•μž₯ ν•¨μˆ˜λ„ λ©”μ„œλ“œμΈκ°€?
      • ν™•μž₯ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ μΈμŠ€ν„΄μŠ€κ°€ ν•„μš”ν•˜λ―€λ‘œ, λ©”μ„œλ“œλΌκ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
class Calculator()

fun Calculator.add(a: Int, b: Int): Int {
	return a + b
}

ν”„λ‘œνΌν‹° vs ν•„λ“œ

  • μžλ°”μ—μ„œλŠ” ν•„λ“œλΌλŠ” μš©μ–΄λ₯Ό 주둜 μ‚¬μš©ν–ˆμ§€λ§Œ, μ½”ν‹€λ¦°μ—μ„œλŠ” ν”„λ‘œνΌν‹°λΌλŠ” μš©μ–΄λ₯Ό 주둜 ν™œμš©ν•©λ‹ˆλ‹€.
  • ν”„λ‘œνΌν‹°(Property)
    • ν΄λž˜μŠ€λ‚˜ 객체의 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜λ‘œ, 데이터λ₯Ό μ €μž₯ν•˜κ³  읽고 μ“Έ 수 μžˆλŠ” λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
    • ν”„λ‘œνΌν‹°λŠ” μ‹€μ œ ν•„λ“œμ™€ 같지 μ•ŠμœΌλ©°, μ•„λž˜μ™€ 같은 ꡬ성 μš”μ†Œλ‘œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
      • μ‹€μ œ 데이터 μ €μž₯ 곡간(Field)
      • μ €μž₯된 값을 읽으렀고 ν•  λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜(Getter)
      • 값을 μ €μž₯ν•˜λ €κ³  ν•  λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜(Setter)
class Person {
	var name: String = "Jinwoo"
		get() = field
		set(value) {
			field = value
		}
	val isAdult: Boolean
		get() = age >= 18 // μ»€μŠ€ν…€ getter
	var age: Int = 0
  • μœ„ μ½”λ“œμ—μ„œ nameκ³Ό ageκ°€ ν”„λ‘œνΌν‹°λΌκ³  ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • name ν”„λ‘œνΌν‹°λŠ” getter, setterλ₯Ό 톡해 값을 읽고 μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • isAdult ν”„λ‘œνΌν‹°λŠ” μ»€μŠ€ν…€ getterλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•„λ“œ 없이 age ν”„λ‘œνΌν‹°λ₯Ό 기반으둜 값을 κ³„μ‚°ν•©λ‹ˆλ‹€.
  • ν•„λ“œ(Field)
    • ν•„λ“œλŠ” 클래슀 λ‚΄μ—μ„œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” λ³€μˆ˜λ‘œ, μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν•  수 μ—†λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€.
    • ν•„λ“œλŠ” 일반적으둜 ν”„λ‘œνΌν‹°μ˜ 값이 μ‹€μ œλ‘œ μ €μž₯λ˜λŠ” μž₯μ†Œλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
    • Kotlinμ—μ„œλŠ” ν”„λ‘œνΌν‹°μ˜ λ°±ν‚Ή ν•„λ“œ(backing field)둜 μ‚¬μš©λ©λ‹ˆλ‹€.
class Person {
	var name: String = "Jinwoo"
		private set // μ™ΈλΆ€μ—μ„œ setter 막기
	
	var age: Int = 0
		get() = filed // backing field
		set(value) {
			if (value > 0) {
				field = value
			}
		}
}
  • μœ„ μ½”λ“œμ—μ„œ nameκ³Ό age ν”„λ‘œνΌν‹°λŠ” ν•„λ“œλ₯Ό κ°€μ§‘λ‹ˆλ‹€.
    • name ν”„λ‘œνΌν‹°λŠ” private setterλ₯Ό ν™œμš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    • age ν”„λ‘œνΌν‹°λŠ” λ°±ν‚Ή ν•„λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ getter, setterλ₯Ό ν†΅ν•΄μ„œ 값을 읽고 μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œνΌν‹°μ™€ ν•„λ“œμ˜ 차이점?

  • ν”„λ‘œνΌν‹°λŠ” ν΄λž˜μŠ€λ‚˜ 객체의 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜λ‘œ 값을 읽고 μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν•„λ“œλŠ” 데이터λ₯Ό μ €μž₯ν•˜λŠ” λ³€μˆ˜λ‘œ, ν”„λ‘œνΌν‹°μ˜ 값이 μ‹€μ œλ‘œ μ €μž₯λ˜λŠ” μž₯μ†Œμž…λ‹ˆλ‹€.
  • Kotlinκ³Ό 같은 μ–Έμ–΄μ—μ„œμ˜ ν”„λ‘œνΌν‹°λŠ” κ°„λ‹¨ν•˜κ³  λͺ…ν™•ν•˜κ²Œ 데이터 접근을 관리할 수 μžˆλŠ” κ³ μˆ˜μ€€ κ°œλ…μ΄λ©°, ν•„λ“œλŠ” 데이터λ₯Ό μ‹€μ œλ‘œ μ €μž₯ν•˜λŠ” μ €μˆ˜μ€€μ˜ κ°œλ…μž…λ‹ˆλ‹€.

μ°Έκ³ 

https://velog.io/@ohzzi/Kotlin-ν•¨μˆ˜λŠ”-뭐고-λ©”μ„œλ“œλŠ”-뭐고-ν”„λ‘œνΌν‹°λŠ”-뭐고-ν•„λ“œλŠ”-무엇인가