๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์–ธ์–ด/Kotlin

[Kotlin ๋ฌธ๋ฒ• ์ข…ํ•ฉ] - ์ ‘๊ทผ์ œํ•œ์ž์™€ ๊ด€๋ จ ์šฉ์–ด ์ •๋ฆฌ

by ์ ผ์ ผ39 2024. 3. 6.

 

1. ๊ด€๋ จ ์šฉ์–ด ์ •๋ฆฌ

1) ํ”„๋กœ์ ํŠธ : ์ตœ์ƒ๋‹จ ๊ฐœ๋…. ๋ชจ๋“ˆ, ํŒจํ‚ค์ง€, ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•จ

2) ๋ชจ๋“ˆ : ํŒจํ‚ค์ง€, ํด๋ž˜์Šค๋ฅผ ํฌํ•จ             //java, res ํด๋” ํฌํ•จ. appํด๋”

3) ํŒจํ‚ค์ง€ : ํด๋ž˜์Šค๋ฅผ ํฌํ•จ                      //javaํด๋” ํ•˜์œ„ํŒŒ์ผ๋“ค์„ ํฌํ•จ. ํด๋ž˜์Šค๋Š” ๋™์ผ ํŽ˜์ด์ง€๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ ๋“ฏ

4) ์ ‘๊ทผ : ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š”์ง€์˜ ์—ฌ๋ถ€.

 

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

    (+) ๋ณ€์ˆ˜, ๋ฉ”์†Œ๋“œ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋กœ์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ์ ‘๊ทผ(.ํ†ตํ•ด ์ ‘๊ทผํ•˜๋Š”๊ฑฐ) ๋ง‰๊ณ  ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ด

1) public : ์–ด๋””์„œ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ. ๋ช…์‹œํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ public

2) protected : ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๋™์ผํ•œ ํด๋ž˜์Šค ๋‚ด์—์„œ๋งŒ + ์ƒ์† ๋ฐ›์€ ๊ฒฝ์šฐ ์ ‘๊ทผ๊ฐ€๋Šฅ (์ตœ์ƒ์œ„(open)ํด๋ž˜์Šค์—๋Š” ๋ถˆ๊ฐ€๋Šฅ, ํ”„๋กœํผํ‹ฐ์—๋Š” ๊ฐ€๋Šฅ?)

3) internal : ๊ฐ™์€ ๋ชจ๋“ˆ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ (ํŒจํ‚ค์ง€, ํด๋ž˜์Šค)                    // <-- java์˜ default์™€ ๋น„์Šทํ•œ๋“ฏ

4) private : ๋™์ผํ•œ ํด๋ž˜์Šค ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

    *์˜ˆ์‹œ (ํด๋ž˜์Šค)

class AccessTestClass {  		//class ์•ž์— ์ ‘๊ทผ์ œํ•œ์ž ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ๊ฑฐ๊ฒ ์ง€?
    public var a:Int = 1
    var b = 2
    private var c = 3
    internal var d = 4
    protected var e = 5
    
    public fun publicTest() {
        println("public ์ž…๋‹ˆ๋‹ค")
    }

    fun publicTest2() {
        println("public ์ž…๋‹ˆ๋‹ค")
    }

    private fun privateTest() {
        println("private ์ž…๋‹ˆ๋‹ค")
    }

    internal fun internalTest() {
        println("internal ์ž…๋‹ˆ๋‹ค")
    }

    protected fun protectedTest() {
        println("protected ์ž…๋‹ˆ๋‹ค")
    }
}
class AccessTestChildClass: AccessTestClass() { 	//์ƒ์†์ด๋ผ AccessTestClass๊ฐ€ open์ด์–ด์•ผ ํ•จ

    fun protectedTest1() {
        println("e์˜ ๊ฐ’์€ ${e}")
    }
}
fun main() {
    var accessTestClass = AccessTestClass()
    var accessTestChildClass = AccessTestChildClass()

// . ํ•˜๊ณ  ์ ‘๊ทผ๊ฐ€๋Šฅํ•œ ์š”์†Œ๋ฅผ ํ™•์ธ
//    accessTestClass. 
    accessTestChildClass.protectedTest1()
}