μμμ΄λ?
λΆλͺ¨μ μμμ μμμ΄ λ¬Όλ €λ°μ μ¬μ©νλ κ²μ μμμ΄λΌκ³ νλ€.
μμμ ν΄λμ€ κ°μ κ΄κ³λ₯Ό μ μνκ³ μ½λμ μ¬μ¬μ©μ±μ λμ΄κΈ° μν΄ μ¬μ©λλ€. μμμ ν΅ν΄ νλμ ν΄λμ€κ° λ€λ₯Έ ν΄λμ€μ μμ±κ³Ό ν¨μλ₯Ό λ¬Όλ €λ°μ μ¬μ©ν μ μλ€.
μμμ΄ νμν κ²½μ°
μμμ΄ νμν κ²½μ°λ
μ΄λ―Έ μ‘΄μ¬νλ ν΄λμ€λ₯Ό νμ₯ν΄ μλ‘μ΄ μμ±μ΄λ ν¨μλ₯Ό μΆκ°ν ν΄λμ€λ₯Ό λ§λ€μ΄μΌ ν λ,
μ¬λ¬ κ°μ ν΄λμ€λ₯Ό λ§λ€μλλ° ν΄λμ€λ€μ 곡ν΅μ μ λ½μ μ½λ κ΄λ¦¬λ₯Ό νΈνκ² ν΄μΌ ν λ μ¬μ©λλ€.
μμμ ꡬμ±
μμ±κ³Ό ν¨μλ₯Ό λ¬Όλ €μ£Όλ μͺ½μ μνΌ ν΄λμ€(λΆλͺ¨ ν΄λμ€), λ¬Όλ €λ°λ ν΄λμ€λ₯Ό μλΈ ν΄λμ€(μμ ν΄λμ€)λΌκ³ νλ€.
μμμ νκΈ° μν΄μλ μμ ν΄λμ€μ λμ μ½λ‘ (:)μ λ¬κ³ μμλ°μ λΆλͺ¨ ν΄λμ€μ μ΄λ¦κ³Ό νλΌλ―Έν°λ₯Ό μ μν΄ μ£Όλ©΄ λλ€.
class `μμ ν΄λμ€`(p1: String, p2: Int): `λΆλͺ¨ ν΄λμ€`(p1, p2)
μμμ 쑰건
λΆλͺ¨ ν΄λμ€κ° open μνκ° μλλ©΄ μμμ λ°μ μ μλ€.
μ½νλ¦°μ μμ κΈμ§ μνμΈ final νκ·Έκ° μλμΌλ‘ ν΄λμ€μ λΆκΈ° λλ¬Έμ μμμ νκΈ° μν΄μλ κΌ open νκ·Έλ₯Ό class μμ λΆμ¬μ€μΌ νλ€.
λν μμμλ 2κ°μ§μ κ·μΉμ΄ λ°λ₯Έλ€.
μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ μ‘΄μ¬νλ μμ±κ³Ό κ°μ μ΄λ¦μ μμ±μ κ°μ§ μ μλ€λ κ²κ³Ό,
μμ ν΄λμ€κ° μμ±λ λλ λ°λμ λΆλͺ¨ ν΄λμ€μ μμ±μκΉμ§ νΈμΆλμ΄μΌ νλ€λ μ μ΄λ€.
μμμ μ¬μ©ν΄ 보μ
open class Animal(var name: String, var age: Int, var type: String) {
fun introduce() {
println("μ λ $type ${name}μ΄κ³ , ${age}μ΄μ
λλ€.")
}
}
λΆλͺ¨ ν΄λμ€μΈ Animal ν΄λμ€λ₯Ό λ§λ€μ΄ ν΄λμ€μ μ체 μμ±μΈ name, age, typeμ μμ±ν΄ μ€λ€.
introduce() ν¨μλ₯Ό λ§λ€μ΄ λλ¬Όμ μ 보λ₯Ό μΆλ ₯νλ€.
class Dog(name: String, age: Int): Animal(name, age, "κ°") {
fun bark() {
println("λ©λ©")
}
}
class Cat(name: String, age: Int): Animal(name, age, "κ³ μμ΄") {
fun meow() {
println("μΌμΉ")
}
}
μμ ν΄λμ€μΈ Dogμ Catμλ name, ageλ₯Ό var ν€μλλ₯Ό λΆμ΄μ§ μμ μΌλ° νλΌλ―Έν°λ‘ λ°μμ μμλ°μ Animal ν΄λμ€μ μμ±μμ μ§μ λ겨μ€λ€.
μμ±μμ μ§μ λ겨주λ κ°μμ typeμ Dogμ Cat ν΄λμ€μμ 곡ν΅λ κ°μ΄λ―λ‘ κ³ μ λ κ°μ λ겨주μ΄λ μκ΄μλ€.
fun main() {
var a = Animal("λ³μ΄", 5, "κ°")
var b = Dog("λ³μ΄", 5)
a.introduce()
b.introduce()
}
μμ κ°μ΄ ν΄λμ€λ€ κ°μ κ΄κ³λ₯Ό ꡬννλ©΄, λΆλͺ¨ ν΄λμ€μΈ Animalκ³Ό Dog κ°μ²΄κ° κ°μ ν¨μμΈ introduce()λ₯Ό μ΄μ©ν΄ κ°μ κ°μ μΆλ ₯νκ² λλ€.
νμ§λ§ μμ κ°μ΄ λΆλͺ¨μ ν¨μλ§ μ°λ €κ³ νλ©΄ μμμ ꡬνν μλ―Έκ° μκΈ° λλ¬Έμ Dog ν¨μμ bark() ν¨μλ₯Ό λ§λ€μ΄ μ£Όμλ€.
bark() ν¨μλ Dog ν΄λμ€μμλ§ μ¬μ©ν μ μλ€.
b.bark()
var c = Cat("루μ΄", 1)
c.introduce()
c.meow()
Dogμ λκ°μ΄ Catμλ κ°μ λ°©μμΌλ‘ meow() ν¨μλ₯Ό λ§λ€κ³ , introduce()λ₯Ό μ μ©νλ©΄ λ€μκ³Ό κ°μ΄ λμ¬ κ²μ΄λ€.
λν λΆλͺ¨μ ν¨μ μΈμλ λΆλͺ¨μ νλ‘νΌν° λν μμμ΄ μ¬μ©ν μ μλ€.
var a = Animal("λ³μ΄", 5, "κ°")
var b = Dog("λ³μ΄", 5)
a.introduce()
b.introduce()
println(b.name)
Dogμμ Animalμ νλ‘νΌν°λ₯Ό κ·Έλλ‘ λ°μμ μ¬μ©νλ κ²μ λ³Ό μ μλ€.
λ§μ§λ§ μ€μ μΆλ ₯μ "λ³μ΄"λ‘ λμ¨λ€.
μμμ μ₯λ¨μ
ν΄λμ€μ μμμ ν΄λμ€λ₯Ό λ ꡬ쑰μ μΌλ‘ λ€λ£° μ μκ² ν΄μ£Όλ μ₯μ μ΄ μμ§λ§, λ무 λ¨λ°ν΄μλ μ λλ λ².
μ§λμΉ μμꡬ쑰λ μ½λλ₯Ό λ μ΄λ ΅κ² λ§λ€ μ μλ€λ μ λ κΈ°μ΅ν΄ λμ.
μμκ³Ό λ¨μΌ μ± μ μμΉ
λ¨μΌ μ± μ μμΉμ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬ κ°λ μ€ νλμ΄λ€. μμκ³Ό λ¨μΌ μ± μ μμΉμ μ΄ν΄νκ³ μ μ©νλ κ²μ μ½λμ μ¬μ¬μ©μ±κ³Ό μ μ§λ³΄μμ±μ λμ΄λ λ° ν° λμμ μ€λ€.
λ¨μΌ μ± μ μμΉ:
ν΄λμ€κ° νλμ μ± μλ§μ κ°μ§λλ‘ μ€κ³νλ κ²μ΄λ€.
μλ₯Ό λ€μ΄ μ°λ¦¬ λͺΈμ μν κΈ°κ΄ μ€ μλ μμλ¬Όμ λΆν΄ν΄μ μ₯μΌλ‘ μ΄λμν€κ³ μ₯μ μμλ¬Όμ μλΆμ ν‘μνκ³ λ μ°κΊΌκΈ°λ₯Ό λ°°μΆνλ ν κ°μ§μ μΌλ§ νλ κ²μ²λΌ νλμ μ± μλ§μ κ°μ§κ³ ν΄λμ€λ₯Ό μ€κ³ν΄μΌ νλ€.
λ¨μΌ μ± μ μμΉμ μ€μνμ§ μμΌλ©΄ μ½λμ λ³κ²½μ΄ μ΄λ €μμ§κ³ , λ²κ·Έκ° λ°μν κ°λ₯μ±μ΄ λμμ§λ€.
μμκ³Ό λ¨μΌ μ± μ μμΉμ μλ‘ κΈ΄λ°ν κ΄κ³μ μλ€.
λ¨μΌ μ± μ μμΉμ μ€μν΄ ν΄λμ€λΌλ¦¬ νλμ μ± μλ§μ κ°μ§κ² μ€κ³ν ν, νμμ λ°λΌ μμμΌλ‘ κ΄κ³λ₯Ό λ§Ίμ΄μ£Όλ©΄ ν΄λμ€ λ΄λΆμ κΈ°λ₯μ μΆκ°νλ κ²μ μμ λ‘κ² ν μ μκ³ , μ½λμ μ μ§ λ³΄μμ±μ λμΌ μ μμ κ²μ΄λ€.
μ°Έκ³
https://www.youtube.com/watch?v=Mpn-kGFxB84
https://f-lab.kr/insight/java-inheritance-single-responsibility-principle-20240523
'π | Kotlin > β¨ | κ°λ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Kotlin] λ°°μ΄κ³Ό Mapμ λν΄ μμ보기 (0) | 2023.10.27 |
---|---|
[Kotlin] coroutine κ°λ μ 리 (0) | 2022.04.03 |