ν΄λμ€μ μμ±μ
ν΄λμ€ μ μΈ
- class ν€μλ μ¬μ©
- ν΄λμ€μ λ©€λ²λ μμ±μ, λ³μ, ν¨μ, ν΄λμ€λ‘ ꡬμ±
- μ½νλ¦°μ μμ±μ : constructor ν€μλλ‘ μ μΈ
- ν΄λμ€ μμ λ€λ₯Έ ν΄λμ€ μ μΈ κ°λ₯
- ν΄λμ€λ κ°μ²΄λ₯Ό μμ±ν΄ μ¬μ©(new ν€μλ μ¬μ©νμ§ μμ)
class User {
val name = "kkang";
constructor(name: String){ this.name = name }
fun someFun() { println("name : $name") }
class SomeClass {}
}
val user = User("kim");
μμ±μ(constructor ν€μλ)
ν ν΄λμ€ μμ μ£Ό μμ±μ / 보쑰 μμ±μ / λ λ€ μ μΈ κ°λ₯
1. μ£Ό μμ±μ : ν΄λμ€ μ μΈλΆ
- νμλ μλλ©° ν ν΄λμ€μ νλλ§ κ°λ₯
- μ£Όλ‘ μμ±μμ 곡ν΅λ μ½λλ₯Ό μμ±
- constructor ν€μλ μλ΅ κ°λ₯
- μ£Ό μμ±μ μ μΈνμ§ μμΌλ©΄, μ»΄νμΌλ¬κ° 맀κ°λ³μκ° μλ μ£Ό μμ±μλ₯Ό μλμΌλ‘ μΆκ°
class User constructor() { } // constructor ν€μλ μ¬μ©
class User() { } // constructor ν€μλ μλ΅
class User { } // 맀κ°λ³μκ° μλ μ£Ό μμ±μ μλ μ μΈ
class User(name: String, count: Int) { }
λ³Έλ¬Έ - init μμ
μ£Ό μμ±μλ ν΄λμ€ μ μΈλΆμ μκΈ° λλ¬Έμ μ€ν μμμ { }λ₯Ό μ¬μ©ν μ μλ€.
init ν€μλλ‘ μ£Ό μμ±μμ λ³Έλ¬Έ ꡬν
initμΌλ‘ μ§μ ν μμμ κ°μ²΄λ₯Ό μμ±ν λ μλμΌλ‘ μ€ν(κΌ μ μΈν νμλ μμ)
μμ±μμ 맀κ°λ³μλ₯Ό ν΄λμ€μ λ©€λ² λ³μλ‘ μ μΈνλ λ°©λ²
μμ±μμ 맀κ°λ³μλ κΈ°λ³Έμ μΌλ‘ μμ±μμμλ§ μ¬μ©ν μ μλ μ§μ λ³μ
-> μ£Ό μμ±μμμ 맀κ°λ³μλ₯Ό varμ΄λ val ν€μλλ‘ μ μΈνλ©΄ ν΄λμ€μ λ©€λ² λ³μκ° λλ€.
class User(val name: String, val count: Int){
fun someFun() { println("name: $name, count: $count") }
}
fun main() {
val user = User("kkang", 10)
user.someFun()
}
2. 보쑰 μμ±μ : ν΄λμ€ λ³Έλ¬Έ
- μ¬λ¬ κ° μΆκ° κ°λ₯
class User {
constructor(name: String) { println("constructor(name: String) call..." )}
constructor(name: String, count: Int) { printlnt("constructor2") }
}
보쑰 μμ±μμ μ£Ό μμ±μ μ°κ²°
ν΄λμ€λ₯Ό μ μΈν λ μ£Ό μμ±μμ 보쑰 μμ±μλ₯Ό λͺ¨λ μμ±νλ€λ©΄ λ°λμ μμ±μλΌλ¦¬ μ°κ²° νμ
-> 보쑰 μμ±μλ κ°μ²΄λ₯Ό μμ±ν λ νΈμΆλλ©°, μ΄λ ν΄λμ€ λ΄μ μ£Ό μμ±μκ° μλ€λ©΄ this( ) ꡬ문μ μ΄μ©ν΄ μ£Ό μμ±μλ₯Ό νΈμΆν΄μΌ νλ€.
// μ£Όμ : μ°κ²° μμ
class User(name: String) { // 4λ²
constructor(name: String, count: Int): this(name) { ... } // 3λ²
constructor(name: String, count: Int, email: String): this(name, count) { ... } // 2λ²
}
fun main() {
val user = User("kkang", 10, "a@a.com") // 1λ²
}
ν΄λμ€λ₯Ό μ¬μ¬μ©νλ μμ
μμκ³Ό μμ±μ
1) μμ : ν΄λμ€λ₯Ό μ μΈν λ λ€λ₯Έ ν΄λμ€λ₯Ό μ°Έμ‘°ν΄μ μ μΈνλ κ²
- μ μΈλΆμ : κ³Ό ν¨κ» μμλ°μ ν΄λμ€ μ΄λ¦μ μ λ ₯
- μ½νλ¦°μ ν΄λμ€λ κΈ°λ³Έμ μΌλ‘ λ€λ₯Έ ν΄λμ€κ° μμν μ μμ. κ·Έλ¬λ open ν€μλλ₯Ό μ¬μ©νλ©΄ μμ κ°λ₯
open class Super { }
class Sub: Super() { }
- μμ ν΄λμ€λ₯Ό μμλ°μ νμ ν΄λμ€μ μμ±μμμλ μμ ν΄λμ€μ μμ±μλ₯Ό νΈμΆν΄μΌ νλ€.
open class Super(name: String) { }
class Sub(name: String): Super(name) { } // 맀κ°λ³μκ° μλ μμ ν΄λμ€μ μμ±μ νΈμΆ
class Sub: Super {
constructor(name: String): super(name) // νμ ν΄λμ€μ 보쑰 μμ±μλ§ μλ κ²½μ°
}
μ€λ²λΌμ΄λ©
μμ ν΄λμ€μ μ μλ λ©€λ²(λ³μ, ν¨μ)λ₯Ό κ°μ μ΄λ¦μΌλ‘ νμ ν΄λμ€μμ λ€μ μ μΈνλ κ²
- μ£Όλ‘ ν¨μλ₯Ό μ¬μ μν λ μ¬μ©(κ°μ ν¨μλͺ μΌλ‘ νμ ν΄λμ€μμ μλ‘μ΄ λ‘μ§ μΆκ°νκ³ μΆμ λ)
- open ν€μλλ‘ μ μΈλ λ³μλ ν¨μμ νν΄μ override ν μ μμ
open class Super { open var someData = 10 }
class Sub: Super() { override var someData = 20 }
μ κ·Ό μ νμ
ν΄λμ€μ λ©€λ²λ₯Ό μΈλΆμ μ΄λ λ²μκΉμ§ μ΄μ©νκ² ν κ²μΈμ§λ₯Ό κ²°μ νλ ν€μλ
μ κ·Ό μ νμ | μ΅μμμμ μ΄μ© | ν΄λμ€ λ©€λ²μμ μ΄μ© |
public | λͺ¨λ νμΌμμ κ°λ₯ | λͺ¨λ ν΄λμ€μμ κ°λ₯ |
internal | κ°μ λͺ¨λ λ΄μμ κ°λ₯ | κ°μ λͺ¨λ λ΄μμ κ°λ₯ |
protected | μ¬μ© λΆκ° | μμ κ΄κ³μ νμ ν΄λμ€μμλ§ κ°λ₯ |
private | νμΌ λ΄λΆμμλ§ μ΄μ© | ν΄λμ€ λ΄λΆμμλ§ μ΄μ© |
- public : λν΄νΈ μ κ·Ό μ νμ
- internal : κ°μ λͺ¨λ λ΄μμ μ κ·Ό(λͺ¨λ : gradle, maven κ°μ λΉλ λꡬμμ νλ‘μ νΈ λ¨μ λλ κ°μ μΈνΈ λ¨μ)
- protected : ν΄λμ€μ λ©€λ²μμλ§ μ μΈ. μ΅μμμ μ μΈλλ λ³μλ ν¨μλ protectedλ‘ μ μΈν μ μμ.
- private : ν΄λΉ ν΄λμ€ λ΄λΆ / μ΅μμμμ privateλ‘ μ μΈνλ©΄ ν΄λΉ νμΌ λ΄λΆμμλ§ μ κ·Ό κ°λ₯
μ½νλ¦°μ ν΄λμ€ μ’ λ₯
λ°μ΄ν° ν΄λμ€
- data ν€μλλ‘ μ μΈ, μμ£Ό μ¬μ©νλ λ°μ΄ν°λ₯Ό κ°μ²΄λ‘ λ¬Άμ΄μ€λ€
- VO(value object) ν΄λμ€λ₯Ό νΈλ¦¬νκ² μ΄μ©ν μ μκ² ν΄ μ€λ€.
- μ£Όλ‘ μ£Ό μμ±μμ var, val ν€μλλ‘ λ§€κ°λ³μλ₯Ό μ μΈν΄ ν΄λμ€μ λ©€λ² λ³μλ‘ νμ©
1) equals() ν¨μ : κ°μ²΄μ λ°μ΄ν°λ₯Ό λΉκ΅
- μΌλ° ν΄λμ€μ κ°μ²΄ λΉκ΅ : κ°μ²΄ μ체λ₯Ό λΉκ΅
- λ°μ΄ν° ν΄λμ€μ κ°μ²΄ λΉκ΅ : κ°μ²΄μ λ°μ΄ν°λ₯Ό λΉκ΅
- μ£Ό μμ±μμ μ μΈν λ©€λ² λ³μμ λ°μ΄ν°λ§ λΉκ΅(μ£Ό μμ±μμ λ©€λ² λ³μκ° κ°μμ§λ§ νλ¨)
data class DataClass(val name: String, val email: String, val age: Int) {
lateinit var address: String
constructor (name: String, email: String, age: Int, address: String){
this(name, email, age)
this.address = address
}
}
fun main() {
val obj1 = DataClass("kang", "aaa@com", 10, "seoul")
val obj2 = DataClass("kang", "aaa@com", 10, "busan")
println("obj1.equals(obj2) : ${obj1.equals(obj2}}") // true - address κ³ λ € X
}
2) toString() ν¨μ : κ°μ²΄μ λ°μ΄ν°λ₯Ό λ°ν
- μ£Ό μμ±μμ 맀κ°λ³μμ μ μΈλ λ°μ΄ν°λ§ μΆλ ₯ λμ
- μΌλ° ν΄λμ€λ‘ μμ±ν κ°μ²΄μ toString() : μλ―Έ μλ κ°
- λ°μ΄ν° ν΄λμ€λ‘ μμ±ν κ°μ²΄μ toString() : κ°μ²΄κ° ν¬ν¨νλ λ©€λ² λ³μμ λ°μ΄ν°λ₯Ό μΆλ ₯
println("data class toString : ${data.toString()}")
// μΆλ ₯
DataClass(name=kang, email=aaa@com, age=10)
μ€λΈμ νΈ ν΄λμ€
μ΅λͺ ν΄λμ€λ₯Ό λ§λ€ λͺ©μ μΌλ‘ μ¬μ©
- ν΄λμ€ μ΄λ¦μ΄ μμΌλ―λ‘ ν΄λμ€λ₯Ό μ μΈνλ©΄μ λμμ κ°μ²΄ μμ±
- νμ λͺ μνμ§ μμ κ²½μ° μ½νλ¦°μ μ΅μμ νμ μΈ Anyλ‘ μ·¨κΈ -> 보ν΅μ νμ κΉμ§ ν¨κ» μ λ ₯
var/val λ³μ = object {ν΄λμ€ λ΄μ©}
open class Super() { open var data = 10 }
val obj = object: Super() { override var data = 20 } // Super ν΄λμ€ μμ
fun main() { obj.data = 30 }
μ»΄ν¨λμΈ ν΄λμ€
λ©€λ² λ³μλ ν¨μλ₯Ό ν΄λμ€ μ΄λ¦μΌλ‘ μ κ·Όνκ³ μ ν λ μ¬μ©
- κ°μ²΄λ₯Ό μμ±νμ§ μκ³ μλ ν΄λμ€ μ΄λ¦μΌλ‘ νΉμ λ©€λ²λ₯Ό μ΄μ©ν μ μμ
class MyClass {
companion object {
var data = 10
fun some() { println(data) }
}
}
fun main() {
val obj = MyClass()
obj.data = 20 // μ±κ³΅
MyClass.data = 20 // μ±κ³΅
MyClass.some() // μ±κ³΅
}
+ μ½νλ¦°μ static ν€μλλ₯Ό μ§μνμ§ μκΈ° λλ¬Έμ μ»΄ν¨λμΈ ν΄λμ€λ κ²°κ³Όμ μΌλ‘ static μν μ νλ€.
κ·Έλ λ€λ©΄ μ staticμ μ°μ§ μλκ°? μλ°λ λͺ¨λ κ²μ ν΄λμ€ λ΄λΆμ μ μΈνλ―λ‘ κ°μ²΄λ‘ λ¬ΆμΌ νμκ° μλ λ©€λ²λ staticμΌλ‘ μ μΈνμ§λ§, μ½νλ¦°μ μ΅μμμ ν¨μλ λ³μλ₯Ό μ μΈν μ μμ΄μ κ°μ²΄λ‘ μ΄μ©ν νμκ° μλ λ©€λ²λ₯Ό κ΅³μ΄ ν΄λμ€μ μ μΈνμ§ μμλ λκΈ° λλ¬Έ.
-> ν΄λμ€μ μ μΈνλ λ©€λ²λ λλΆλΆ κ°μ²΄λ‘ μ΄μ©ν΄μΌ νμ§λ§, ν΄λμ€μ μ μΈν λ©€λ²λ₯Ό μλ°μ staticμ²λΌ μ΄μ©ν λκ° μμΌλ―λ‘ companion ν΄λμ€λ₯Ό μ§μνλ κ²
'Android' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Chap 6] λ·°λ₯Ό μ΄μ©ν νλ©΄ κ΅¬μ± (0) | 2021.11.30 |
---|---|
[Chap 5] μ½νλ¦°μ μ μ©ν κΈ°λ² (0) | 2021.11.23 |
[Chap 3] μ½νλ¦° μμνκΈ° (0) | 2021.11.19 |
[Chap 2] μλλ‘μ΄λ μ±μ κΈ°λ³Έ ꡬ쑰 (0) | 2021.11.17 |
[Chap 1] μλλ‘μ΄λ μ€νλμ€ μ€μΉ κ³Όμ μμ μ£Όμ μ£Όμ (0) | 2021.11.09 |
λκΈ