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

[Kotlin ๋ฌธ๋ฒ• ์ข…ํ•ฉ] - ์ž๋ฃŒํ˜• ๋ณ€ํ™˜, ํƒ€์ž…ํ™•์ธ @@@ ์ˆ˜์ •ํ•˜๊ธฐ

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

 

1. ์ž๋ฃŒํ˜• ๋ณ€ํ™˜

1) ์ผ๋ฐ˜ ์ž๋ฃŒํ˜•๊ฐ„์˜ ๋ณ€ํ™˜

    (1) ์ˆซ์ž ์ž๋ฃŒํ˜•๋ผ๋ฆฌ    =   .to์ž๋ฃŒํ˜•()

    var num1 = 20
    var num2 = 30.2

    var num3 = num2.toInt()
    var num4 = num1.toDouble()

    (2) ๋ฌธ์ž์—ด -> ์ˆซ์ž    

@@@@๊ทผ๋ฐ Integer.parseInt ์•ˆํ•ด๋„ toInt๋งŒ ํ•ด๋„ ๋˜๋˜๋ฐ...?? ๋ญ์ง€ ๋‹ค์‹œ๋ณด๊ธฐ

    var strNum5 = "10"
    var strNum6 = "10.21"

    var num5 = Integer.parseInt(strNum5) 		//int๋กœ ๋ณ€ํ™˜
    var num6 = strNum6.toDouble() 			//double๋กœ ๋ณ€ํ™˜

 

2) ๊ฐ์ฒด ์ž๋ฃŒํ˜•๊ฐ„์˜ ๋ณ€ํ™˜

    : ์ƒ์†๊ด€๊ณ„์—์„œ ๊ฐ€๋Šฅ

    (1) ์—… ์บ์ŠคํŒ… (๋ถ€๋ชจํด๋ž˜์Šค์˜ ์ž๋ฃŒํ˜•์„ ๊ฐ€์ง€๊ณ  ์ž์‹ํด๋ž˜์Šค์˜ ๊ฐ์ฒด ์ƒ์„ฑ)
                        //ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ์บ์ŠคํŒ…

                        - slicing problem์ด ์—ฌ๊ธฐ์„œ ๋‚˜ํƒ€๋‚จ...

fun main() {
    println("๋ช‡ ๋งˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?")
    var count = readLine()!!.toInt()
    var birds = mutableListOf<Bird>() 		//Bird ํด๋ž˜์Šค ํƒ€์ž…์„ ๋ฐ›๋Š” ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ

    for(idx in 0..count-1) { 		//์ด count๋ฒˆ ์‹คํ–‰
        println("์กฐ๋ฅ˜์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”")
        var name = readLine()!!

        // as Bird๋Š” ์ƒ๋žต๊ฐ€๋Šฅ
        birds.add(Sparrow(name) as Bird) 	//๋ฆฌ์ŠคํŠธ์— ์ž์‹ํด๋ž˜์Šค์ด๋ฆ„(" ")  //์œ„์—์„œ <Bird>๋ผ๊ณ  ํ–ˆ์Œ
    }
    println("============์กฐ๋ฅ˜ ์ƒ์„ฑ์™„๋ฃŒ============")
    for(bird in birds) {
        bird.fly() 		//birds ์•ˆ์˜ bird๋“ค์„ ํ•œ๋ฒˆ์— ์ถœ๋ ฅ, but ์ž์‹ํด๋ž˜์Šค์˜ ์ด๋ฆ„์œผ๋กœ ์ถœ๋ ฅ๋จ
    }
}

open class Bird(name: String) {
    var name: String
    
    init {
        this.name = name
    }
    
    fun fly() {
        println("${name}์ด๋ฆ„์˜ ์กฐ๋ฅ˜๊ฐ€ ๋‚ ์•„์š”~")
    }
}

class Sparrow(name: String): Bird(name) { }
        if(myJob == "๋งˆ๋ฒ•์‚ฌ") {
            var myCharacter = Wizard(myName, myAge, myGender, myMoney, myHp, myMp)

            while(true) {
                println("[1] ์Šฌ๋ผ์ž„๋™๊ตด, [2] ์ข€๋น„๋งˆ์„, [3] ์บ์‰ฌ์ƒต, [4] ์ข…๋ฃŒ")
                var selectNumber= inputMyInfo("selectNumber").toString().toInt()

                when(selectNumber) {
                    1 -> {
                        selectWorld(1, myCharacter) 		//myCharacter์€ Wizrard์˜ ๊ฐ์ฒด
                    }
                    2 -> {
                        selectWorld(2, myCharacter)
                    }
                    3 -> {
                        openCashShop(myCharacter)
                    }
                    4 -> {
                        println("๊ฒŒ์ž„ ์ข…๋ฃŒ")
                        break
                    }
                    else -> {
                        break
                    }
                }
            }
        }
        
fun selectWorld(selectWorld:Int, myCharacter: Character) { 		//Character๋กœ ๋ฐ›์Œ
    if(selectWorld == 1) { // ์Šฌ๋ผ์ž„ ๋˜์ „
        if(myCharacter is Archer) {
            var slime1 = Slime("์ดˆ๋ก์Šฌ๋ผ์ž„", "์ดˆ๋ก", 30.2, 200, 10)
            slime1.attack()
            myCharacter.windArrow() 			//myCharacter๋กœ ๋‹ค ํ†ต์ผํ•จ!!!
            slime1.poison()
        } else if(myCharacter is Wizard) {
            var slime1 = Slime("ํŒŒ๋ž‘์Šฌ๋ผ์ž„", "ํŒŒ๋ž‘", 30.2, 200, 10)
            slime1.attack()
            myCharacter.fireBall()
            slime1.poison()
        }
    } else if(selectWorld == 2) { // ์ข€๋น„ ๋˜์ „

        if(myCharacter is Archer) {
            var zombie1 = Zombie("ํŒŒ๋ž‘์ข€๋น„", "ํŒŒ๋ž‘", 142.2, 500, 25)
            zombie1.virus()
            myCharacter.windJump("๊ฑด๋ฌผ1")

        } else if(myCharacter is Wizard) {
            var zombie1 = Zombie("ํŒŒ๋ž‘์ข€๋น„", "ํŒŒ๋ž‘", 142.2, 500, 25)
            zombie1.virus()
            myCharacter.teleport(10, 20)
        }
    }
}

fun openCashShop(character: Character) { 		//Archer, Wizard ๋“ฑ์„ Character๋กœ ๋ฐ›์Œ
    var cashShop = CashShop.getInstance() 		//์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋ฐ›๋Š” ๊ฒƒ์€ ๋™์ผ

    if(character is Archer) {
        println("๊ตฌ๋งค์ „ ๋ฌด๊ธฐ: ${character.weapons}")
        cashShop.purchaseWeapon(character)
        println("๊ตฌ๋งคํ›„ ๋ฌด๊ธฐ: ${character.weapons}")
    } else if(character is Wizard) {
        println("๊ตฌ๋งค์ „ ๋ฌด๊ธฐ: ${character.weapons}")
        cashShop.purchaseWeapon(character)
        println("๊ตฌ๋งคํ›„ ๋ฌด๊ธฐ: ${character.weapons}")
    }
}

 

    (2) ๋‹ค์šด ์บ์ŠคํŒ… (์ž์‹ํด๋ž˜์Šค์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๊ฐ์ฒด ์ƒ์„ฑ)
                        //์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ์บ์ŠคํŒ…    --> as? ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ์•ˆ์ „ํ•จ

open class Animal
class Dog : Animal()

fun main() {
    val animal: Animal = Dog() // ์—… ์บ์ŠคํŒ…

    // ๋‹ค์šด ์บ์ŠคํŒ… ์‹œ๋„
    val dog = animal as Dog // ์˜ค๋ฅ˜! ClassCastException ๋ฐœ์ƒ ๊ฐ€๋Šฅ
    
    val dog = animal as? Dog
	if (dog != null) {
    	// ๋‹ค์šด ์บ์ŠคํŒ… ์„ฑ๊ณต
	} else {
    	// ๋‹ค์šด ์บ์ŠคํŒ… ์‹คํŒจ
	}
}
open class Animal
class Dog : Animal()

fun main() {
    val animal: Animal = Dog()
    if (animal is Dog) {
        val dog: Dog = animal // ๋‹ค์šด์บ์ŠคํŒ…
        println("๋‹ค์šด์บ์ŠคํŒ… ์„ฑ๊ณต: $dog")
    } else {
        println("์‹คํŒจ: animal์€ Dog ํƒ€์ž…์ด ์•„๋‹˜")
    }
}
open class Animal
class Dog : Animal()

fun main() {
    val animal: Animal = Dog()
    val dog: Dog? = animal as? Dog // ์•ˆ์ „ํ•œ ๋‹ค์šด์บ์ŠคํŒ…
    if (dog != null) {
        println("๋‹ค์šด์บ์ŠคํŒ… ์„ฑ๊ณต: $dog")
    } else {
        println("์‹คํŒจ: animal์€ Dog ํƒ€์ž…์ด ์•„๋‹˜")
    }
}

 

fun main() {
    println("๋ช‡ ๋งˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?")
    var count = readLine()!!.toInt()
    var birds = mutableListOf<Bird>()

    for(idx in 0..count-1) {
        println("์กฐ๋ฅ˜์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”")
        var name = readLine()!!

        birds.add(Sparrow(name) as Bird)
    }
    println("============์กฐ๋ฅ˜ ์ƒ์„ฑ์™„๋ฃŒ============")
    for(bird in birds) {
        bird.fly()
    }
    // ๋‹ค์šด์บ์ŠคํŒ… ์˜ค๋ฅ˜
    // Sparrow๋Š” Bird๊ฐ€ ๊ฐ€์ ธ์•ผํ•  ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž„
    // ???? ์ด๊ฑฐ๋ณด๋‹ค๋Š” ์ž์‹ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์— ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋„ฃ์œผ๋ ค๊ณ  ํ•ด์„œ ๊ทธ๋Ÿฐ๊ฑฐ ์•„๋‹Œ๊ฐ€
    //      ๋ถ€๋ชจํด๋ž˜์Šค ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ์ •๋ณด๊ฐ€ ์ž์‹ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ?ํ•˜๊ธฐ์— ๋ถ€์กฑํ•ด์„œ
    //          (ex. ์˜ค๋ฒ„๋ฆฌ๋”ฉํ–ˆ๋‹ค๊ฑฐ๋‚˜... ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๊ฑฐ๋‚˜)
    //@@@@@@@
//    var s1:Sparrow = birds.get(0)
 
}

 

^^ @@@ ์ˆ˜์ •ํ•˜๊ธฐ

 

2. ์ž๋ฃŒํ˜•์˜ ํƒ€์ž… ํ™•์ธ

    - if ( ๋ณ€์ˆ˜ is ์ž๋ฃŒํ˜•)

    : ํ•ด๋‹น ๊ฐ’์ด ์•„๋‹ˆ๋ผ, ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์„ ๋ณด๋Š”๊ฒƒ.

if(name is String) {
    println("name์€ String ํƒ€์ž…์ž…๋‹ˆ๋‹ค")
} else {
    println("name์€ String ํƒ€์ž…์ด ์•„๋‹™๋‹ˆ๋‹ค")
}
class CashShop private constructor() {
// ์ฝ”๋“œ ์ƒ๋žต
fun purchaseWeapon(character:Character){
    if(character is Archer) { 		//is ํ‚ค์›Œ๋“œ
        character?.run { 		// ํ™•์žฅํ•จ์ˆ˜ run
            if(money >= bowPrice) {
                println("[๊ตฌ๋งค ํ›„ ๊ธˆ์•ก]: [${money} - ${bowPrice}] = ${money-bowPrice}")
                money -= bowPrice
                weapons.add("์Šˆํผ ํ™œ")
            } else {
                println("๋ˆ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.")
            }
        }
    } else if(character is Wizard) {
        character?.run {
            if(money >= staffPrice) {
                println("[๊ตฌ๋งค ํ›„ ๊ธˆ์•ก]: [${money} - ${staffPrice}] = ${money-staffPrice}")
                money -= staffPrice
                weapons.add("์Šˆํผ ์Šคํƒœํ”„")
            } else {
                println("๋ˆ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.")
            }
        }
    }
}

}