본문 바로가기
모바일/Kotlin

[Kotlin] 코틀린 변수 범위, 접근 제어자, 접근 제어자 예제

by drCode 2021. 4. 11.
728x90
반응형

안녕하세요, 이번 포스팅은 코틀린 변수 범위, 접근제어자에 대해 다뤄보겠습니다.

 

(1) 변수 범위

 - 1. 지역변수

    : 함수, 반복문, 조건문 안쪽에서 사용되는 변수

 - 2. 전역변수

    : 어느 괄호로도 씌어진 부분 없이 전체적으로 사용될 수 있는 변수

 

var number100 : Int = 100

fun main(args: Array<String>) {


    var test = Test("홍길동")
    test.name
    println(number100)

}

class Test(var name : String) {
    fun testFun() {
        var birth : String = "2000/3/1"
        name = "홍길동"
        number100 = 100

        fun testFun2() {
            var gender : String = "male"
        }

    }

    fun testFun2() {
        name
//        birth << 사용 불가
    }

}

 

이 소스에서는 "number100"이 전역 변수이고, birth, name과 같은 변수들이 지역 변수입니다.

 

(2) 접근 제어자

 - 1. public : 어디서나 접근할 수 있음

 - 2. private : 아무데서나 접근할 수 없음

 

fun main(args : Array<String>) {
    val testAccess : TestAccess = TestAccess("아무개")
    // private 키워드 때문에 외부에서 사용할 수 없다.
//    testAccess.test()
//    println(testAccess.name)
//    testAccess.name = "아무개 투"
//    println(testAccess.name)

    val reward : Reward = Reward()
    reward.rewardAmount = 2000

    val runningCar : RunningCar = RunningCar()
    runningCar.runFast()
//    runningCar.run()


}

class Reward() {
    var rewardAmount : Int = 1000
}

class TestAccess {
    private  var name : String = "홍길동"
    constructor(name : String) {
        this.name = name
    }

    fun changeName(newName : String) {
        this.name = newName
    }

    private fun test() {
        println("테스트")
    }
}

class RunningCar() {

    fun runFast() {
        run()
    }

    private  fun run() {

    }

}

private 키워드가 있는 변수는 객체 변수.필드명 이렇게 접근할 수 없습니다.

 

※ 접근제어자 예제

package com.example.myapplication.Kotlin

fun main(array: Array<String>) {
    val night = Night(20, 4)
    val monster = Monster(15, 3)

    night.attack(monster)
    monster.attack(night)
}

class Night(private var hp : Int,private var power : Int) {
    fun attack(monster: Monster) {
        monster.depense(power)
    }

    fun depense(damage: Int) {
        hp -= damage
        if(hp > 0) {
            heal()
            println("기사 현재 체력은 $hp 입니다.")
        }  else println("기사가 죽었습니다.")

    }

    private fun heal() {
        // 아무때나 사용하는게 아니라
        // 공격을 당했을 때 죽지 않앗다면 힐을 한다
        hp += 3
    }
}

class Monster(private var hp : Int, private var power : Int) {
    fun attack(night: Night) {
        night.depense(power)
    }

    fun depense(damage : Int) {
        hp -= damage
        if (hp > 0) println("몬스터 현재 체력은 $hp 입니다.")
        else println("몬스터가 죽었습니다.")
    }
}
728x90
반응형

댓글