๐ŸฅญMango 2020. 8. 27. 18:51

ํด๋ž˜์Šค ์„ ์–ธ

//ํด๋ž˜์Šค ์„ ์–ธ
class Person {

}

//์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
val person = Person()

#ํด๋ž˜์Šค๋Š” ๋ถ•์–ด๋นต ํ‹€์— , ์ธ์Šคํ„ด์Šค๋Š” ๋ถ•์–ด๋นต์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ”์—์„œ๋Š” newํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์ƒ์„ฑ์ž

class Person(var name: String) {
   
}

# ๋นˆ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค

 

 

class Person {
    constructor(name: String) {
        println(name)
    }
}

#์ƒ์„ฑ์ž์—์„œ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด constructor๋กœ ์ƒ์„ฑ์ž๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ๋ธ”๋ก์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

์ด ์ƒ์„ฑ์ž๋Š” name์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

class Person(name: String) {
    init{
        println(name)
    }
}

#์œ„ ์ฝ”๋“œ๋ฅผ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

init๋ธ”๋ก์— ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ์ดˆ๊ธฐํ™”๋œ๋‹ค.

 

ํ”„๋กœํผํ‹ฐ

//ํด๋ž˜์Šค ์„ ์–ธ
class Person(var name: String) {
  
}

//์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
val person = Person("๋ฉ‹์Ÿ์ด")
person.name = "ํ‚ค๋‹ค๋ฆฌ" //์“ฐ๊ธฐ
println(person.name) //์ฝ๊ธฐ

# ์†์„ฑ๊ฐ’์„ ์„ฑ์ •ํ•˜๊ฑฐ๋‚˜ ์–ป์œผ๋ ค๋ฉด gettet/setter ๋ฉ”์„œ๋“œ ์—†์ด ๋ฐ”๋กœ ์ (.)์„ ์ฐ๊ณ  name ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ ‘๊ทผ ์ œํ•œ์ž

public : ์ „์ฒด๊ณต๊ฐœ, ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ์“ฐ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ public์ด๋‹ค. (์ƒ๋žต๊ฐ€๋Šฅ)

private : ํ˜„์žฌ ํŒŒ์ผ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

internal : ๊ฐ™์€ ๋ชจ๋“ˆ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

protected : ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

class A{
    val a = 1 //public
    private val b = 2
    protected val c = 3
    internal val d = 4
}

 

ํด๋ž˜์Šค์˜ ์ƒ์†

//Animalํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” Dogํด๋ž˜์Šค
open class Animal {

}

class Dog : Animal(){

}

#์ฝ”ํ‹€๋ฆฐ์—์„œ์˜ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์†์ด ๊ธˆ์ง€๋œ๋‹ค. ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด openํ‚ค์›Œ๋“œ๋ฅผ ํด๋ž˜์Šค ์„ ์–ธ ์•ž์— ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.

 

open class Animal(val name: String) {

}

class Dog(name: String): Animal(name) {

}

#์ƒ์†๋ฐ›์„ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

๋‚ด๋ถ€ ํด๋ž˜์Šค

class OuterClass {
    var a = 10
    
    //๋‚ด๋ถ€ํด๋ž˜์Šค
    inner class OuterClass2 {
        fun something(){
            a = 20 //์ ‘๊ทผ๊ฐ€๋Šฅ
        }
    }
}

#๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•  ๋•Œ inner์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋งŒ์•ฝ inner๊ฐ€ ์—†๋‹ค๋ฉด a = 20์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ถ”์ƒ ํด๋ž˜์Šค

abstract class A {
    abstract fun func()
    
    fun fnuc2(){
        
        
    }
}
class B: A() {
    override fun func(){
        println("hello")
    }
}

val a = A() //์—๋Ÿฌ
val a = B() //OK

#ํด๋ž˜์Šค์•ž์— abstractํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•œ๋‹ค.

์ถ”์ƒํด๋ž˜์Šค๋Š” ์ง์ ‘ ์ธ์Šคํ„ด์Šคํ™” ๋ถˆ๊ฐ€๋Šฅ, ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ์ƒ์†ํ•˜์—ฌ ๋ฏธ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค. 

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋ฐ”์™€ ๋™์ผํ•œ ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค.