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("๋์ด ๋ถ์กฑํฉ๋๋ค.")
}
}
}
}
}