- ๊ฐ์ฒด ์งํฅ
- class
- ์์ฑ์(์ฃผ ์์ฑ์, init)
class {constructor(๋งค๊ฐ ๋ณ์ ์ด๋ฆ : ์๋ฃํ)}๋ฅผ ์ฌ์ฉํจ์ผ๋ก ๋ถ ์์ฑ์๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค.
class Car{
constructor(color: String){
println(color)
}
}
fun main(args: Array<String>) {
val K3 = Car("white")
}
๋จ ๋ถ ์์ฑ์์ ๋งค๊ฐ ๋ณ์ color๋ ๋ถ ์์ฑ์ ์์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ class ์ ์ฒด๊ฐ ๋ถ ์์ฑ์์ ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด class์ ํ๋กํผํฐ์ ๋์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
class Car{
var color:String=""
constructor(color: String){
this.color=color
}
fun carColor(){
println(this.color)
}
}
fun main(args: Array<String>) {
val K3 = Car("white")
K3.carColor()
}
ํ๋์ class ์์๋ ํ ๊ฐ์ง์ ์ฃผ ์์ฑ์๋ง์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก
์์ฑ์๊ฐ ์ฌ๋ฌ ๊ฐ ํ์ํ ๋์ ์ฃผ ์์ฑ์์ ๋ถ ์์ฑ์๋ฅผ ๊ฐ์ด ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ฃผ ์์ฑ์๋ฅผ ์ ์ธํ๋ค๋ฉด ๋ถ ์์ฑ์๋ฅผ ์ ์ธํ ๋์๋ ๋ฌด์กฐ๊ฑด ์ฃผ ์์ฑ์๋ฅผ ํจ๊ป ํธ์ถํด์ฃผ์ด์ผ ํฉ๋๋ค.
class Car(color: String){
init {
println("์ฃผ ์์ฑ์์ init")
}
constructor(color: String,name: String,number:Int):this(color){
println("๋ถ ์์ฑ์")
}
}
fun main(args: Array<String>) {
val myCar = Car("white","k3",13)
}
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ถ ์์ฑ์ ๋ค์ :this(color)๊ฐ ์ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋งค๊ฐ ๋ณ์๋ฅผ color๋ก ๋ฐ๋ ์์ฑ์, ์ฆ ์ฃผ ์์ฑ์๋ฅผ ํธ์ถํ๊ฒ ๋ค๋ ๋ป์
๋๋ค.
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด
์ด๋ฐ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ฐ ์ด๋ฅผ ํ ๋๋ก ๋ถ ์์ฑ์๊ฐ ํธ์ถ ๋ ๋, ์ฃผ ์์ฑ์๋ฅผ ๋จผ์ ํธ์ถํ๊ณ ๊ทธ ๋ค์ ํด๋น ๋ถ ์์ฑ์๋ฅผ ํธ์ถํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
get๊ณผ set์ ๊ฐ์ฒด๊ฐ ํ๋กํผํฐ๋ฅผ ๋ฐ์์ค๊ฑฐ๋ ์์ ํ ๋์ ํธ์ถ๋๋ ํจ์์
๋๋ค.
์๋๋ ์๋์ ์ผ๋ก get๊ณผ set์ด ์ถ๊ฐ๋์ง๋ง ์ง์ ์ ์ํ ์๋ ์์ต๋๋ค.
class Car() {
var name:String="Lee"
get() {
println("์ ๋ณด ํธ์ถ")
return field
}
set(value) {
println("set ํธ์ถ "+value)
field="my $value"}
}
Car class์ name ํ๋กํผํฐ์ get๊ณผ set ํจ์๋ฅผ ๋ช
์ํ์ต๋๋ค. get ํจ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ํธ์ถํ ๋์ ์๋์ ์ผ๋ก ์คํ๋๋ ํจ์์
๋๋ค.
main ํจ์์์
fun main(args: Array<String>) {
val myCar = Car()
myCar.name
}
๊ฐ์ฒด๋ช
.ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ฉด
get ํจ์์ "์ ๋ณด ํธ์ถ"์ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ด ๋์ํ๊ณ field๊ฐ์ ๋ฐํํฉ๋๋ค. ์ฌ๊ธฐ์ field๊ฐ์ ํ๋กํผํฐ์ ๊ฐ์
๋๋ค.
set ํจ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์์ ํ ๋ ์๋์ ์ผ๋ก ์คํ๋๋ ํจ์์
๋๋ค.
fun main(args: Array<String>) {
val myCar = Car()
myCar.name="k3"
}
class์์ ํ๋กํผํฐ๋ฅผ ์ ์ธํ๋ฉด ๊ฐ์ ์ด๊ธฐํ ํด์ค์ผ ํฉ๋๋ค.
ํ์ง๋ง ์ํฉ์ ๋ฐ๋ผ ์ ์ธ ํ์ ๊ฐ์ ์ด๊ธฐํ ํด์ผํ ๊ฒฝ์ฐ๋ ์๊น๋๋ค.
์ด ์ํฉ์ ๋๋นํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด๊ฒ ์ต๋๋ค.
class Person() {
val name:String
val age:Int
init {
name="Lee Room"
age=17
}
}
์ ์ฝ๋์์ name๊ณผ age๋ฅผ ์ ์ธํ ๋, ์ด๊ธฐํ๋ฅผ ํ์ง ์์์์๋ ์ฝ๋๊ฐ ์ ์์๋ํฉ๋๋ค.
init์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ๊ฐ์ฅ ๋จผ์ ์คํ๋๊ธฐ์ ํ๋กํผํฐ๋ฅผ ์ ์ธํ ๋ ์ด๊ธฐํ๋ฅผ ํด์ฃผ์ง ์์๋ ๋ฉ๋๋ค.
class Person{
var name:String?=null
var age:Int?=null
constructor(name:String,age:Int){
this.name=name
this.age=age
}
}
์ ์ฝ๋๋ ํ๋กํผํฐ๋ฅผ ์์ฑํ ๋์ ์ด๊น๊ฐ์ผ๋ก null์ ๋ถ์ฌํ๊ณ ์์ฑ์๊ฐ ์คํ๋๋ฉด ์์ฑ์์ ๋งค๊ฐ๋ณ์๋ฅผ ํ๋กํผํฐ์ ๋์ ํ๋ ํ์์ ๋๋ค.
lateinit(๋ฆ์ ์ด๊ธฐํ)๋ ์ด๊ธฐํ์ ์๊ธฐ๋ฅผ ๋ฆ์ถ๋ ๊ฒ์ ๋๋ค.
class Person {
lateinit var name: String
fun initLate(name: String) {
this.name = name
}
}
์ ์ฝ๋์์ name์ lateinit์ผ๋ก ์ด๊ธฐํ ์๊ธฐ๋ฅผ ๋ฆ์ถ ๋ค, initLate ํจ์์์ ์ด๊ธฐํ๋ฅผ ์์ผ์ฃผ์์ต๋๋ค. ์ด์ฒ๋ผ lateinit์ ์ฌ์ฉํ๋ฉด null์ ๋ฃ์ง ์๊ณ ๋ ์ด๊ธฐํ์ ์๊ธฐ๋ฅผ ๋ฆ์ถ ์ ์์ต๋๋ค.
ํ์ง๋ง lateinit์ ์๋ ์กฐ๊ฑด์ ๋ง์กฑํด์ผํฉ๋๋ค.
- var๋ก ์ ์ธํ ๊ฒ
- null์ ํ์ฉํ์ง ๋ง ๊ฒ
- class ๋ชธ์ฒด์ ์ ์ธํ ํ๋กํผํฐ์๋ง ๊ฐ๋ฅ
- Int,Float์ ๊ฐ์ ๊ธฐ์ด ํ์ ํ๋กํผํฐ๋ ์ฌ์ฉ ๋ถ๊ฐ
- ์ด๊ธฐํ ์ ์๋ ์ฌ์ฉ ๋ถ๊ฐ
lazy๋ val๋ก ์ ์ธ๋ ํ๋กํผํฐ์ ์ด๊ธฐํ ์์ ์ ํ๋กํผํฐ๊ฐ ์ด์ฉ๋๋ ์์ ์ผ๋ก ๋ฏธ๋ฃจ๋ ๊ฒ์ ๋๋ค.
class Person {
val name: String by lazy {
println("by lazy")
"Lee Room"
}
}
์ ์ฝ๋์์๋ name ํ๋กํผํฐ๋ฅผ by lazy๋ฅผ ํตํด์ name ํ๋กํผํฐ๊ฐ ์ฌ์ฉ๋ ๋ ์ด๊ธฐํํ๋๋ก ํด์ฃผ์์ต๋๋ค. by lazy๋ ์ด๊ธฐํ ๋น์ ์คํ์ํฌ ๊ตฌ๋ฌธ๋ ๋ฃ์ ์ ์์ต๋๋ค.
by lazy๋ ์ฌ์ฉ ์กฐ๊ฑด์ด ์์ต๋๋ค.
- ํธ์ถ ์์ ์ ์ด๊ธฐํ๊ฐ ์งํ๋๋ค.
- val๋ก ์ ์ธ๋์ด์ผ ํ๋ค.
ํ์ง๋ง lateinit๊ณผ ๋ฌ๋ฆฌ class์ ๋ชธ์ฒด ์ธ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ๊ธฐ์ด ํ์ ๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- ๋ด๊ฐ ์๋ ๊ฒ๊ณผ ๋จ๋ค์๊ฒ ์ค๋ช ํ๋ ๊ฒ์ ๋ง์ด ๋ค๋ฅธ ๊ฒ ๊ฐ๋ค.
- ์ผ๋จ์ ์ฌ๊ธฐ๊น์ง