μμ
public : μ½νλ¦°μμ μμ±κ³Ό ν¨μκ° κΈ°λ³Έμ μΌλ‘ κ°λ κ°μμ±
private : μμ±κ³Ό ν¨μκ° μ μλ ν΄λμ€ λ΄λΆμμλ§ μ¬μ©λ μ μλ€.
protected : μ΄ κ°μμ±μ΄ μ§μ λ μμ±κ³Ό ν¨μλ μμ μ΄ μ μλ ν΄λμ€ λ΄λΆ λλ μ΄ ν΄λμ€μ μ΄λ€ μλΈ ν΄λμ€μμλ μ¬μ© κ°λ₯
is μ°μ°μ : νμ¬ κ°μ²΄κ° νΉμ νμ μΈμ§ κ²μ¬νλ€.
μμ
open class Room(val name: String){
protected open val dangerLevel : Int = (1..10).shuffled().last()
fun description() = "Room: ${name}\n" + "μν μμ€ : ${dangerLevel}"
open fun load() = "μ무λ μ¬κΈ°μ μ€μ§ μμμ΅λλ€.."
// any νμ
μ toStringμ μ€λ²λΌμ΄λ
override fun toString(): String {
return this.name
}
}
// μμ λ°μ λ, : λ€μ μνΌ ν΄λμ€μΈ Roomκ³Ό μμ±μ νΈμΆμ μ§μ ν΄μΌ νλ€.
// μλΈ ν΄λμ€μ μ€λ²λΌμ΄λ© ν¨μλ μμ±μ κΈ°λ³Έμ μΌλ‘ openμ΄ λμ΄μ μλΈ ν΄λμ€μ μλΈ ν΄λμ€μμλ μΈμ λ μ€λ²λΌμ΄λ© ν μ μλ€.
open class TownSquare : Room("Town Square")
{
override val dangerLevel = super.dangerLevel -3
private val bellSound = "λλ"
// Roomμ μλΈ ν΄λμ€μΈ TownSquareλ‘ λΆν° λ λ€μ μλΈ ν΄λμ€λ₯Ό μμ±ν μ μκ² νλ, TownSquareμ load ν¨μλ₯Ό μ€λ²λΌμ΄λ© λμ§ μκ² νλ €λ©΄, final!
final override fun load() = "μ¬κΈ°λ TownSquare"
private fun ringBell() = "λΉμ μ λμ°©μ μ’
νμμ μ립λλ€. $bellSound"
}
// is μ°μ°μ - νμ
μ΄λ€ 건μ§
// any νμ
- λͺ¨λ null λΆκ°λ₯ νμ
μ μ΅μμ μνΌ ν΄λμ€
//fun printIsSourceOfBlessing(any : Any){
// val isSourceOfBlessiongs = if(any is Player){
// any.isBlessed
// }else{
// (any as Room).name == "Fount of Blessings"
// }
//}
fun main() {
var currentRoom = Room("Foyer")
println(currentRoom.description())
println(currentRoom.load())
var currentTownSquare = TownSquare()
println(currentTownSquare.description())
println(currentTownSquare.load())
}
μ½νλ¦° νμ μ μμ κ³μΈ΅
- μ½νλ¦°μ λͺ¨λ Null λΆκ°λ₯ ν΄λμ€λ μλμΌλ‘ AnyλΌλ μ΅μμ μνΌ ν΄λμ€λ‘ λΆν° μμ λ°λλ€.
μ½νλ¦°μ λͺ¨λ κ°μ²΄λ Anyμ μλΈ ν΄λμ€ μΈμ€ν΄μ€ → μ΄λ€ νμ μ μΈμλ printIsSourceOfBlessings ν¨μμ μ λ¬ν μ μλ€.
Any
- equals, hashCode,toString μ μνκ³ μμ (μΆκ°λ‘ νμ₯λ μμ±κ³Ό ν¨μλ κ°κ³ μλ€.)
β² μ§κΈκΉμ§ μ²λΌ, Anyλ null λΆκ°λ₯ νμ
μ΄κ³ , Any?λ null κ°λ₯ νμ
λλ€.
νμ λ³ν
>> μ½νλ¦°μ μ¬μ©νλ©΄ μλ‘ λ€λ₯Έ νλ«νΌ μ΄ν리μΌμ΄μ μ λ§λ€ μ μλ€.
μ¬λ¬ μ΄μ체μ JVMμμ μ€νλλ μ ν리μΌμ΄μ / JVM μμ΄ μ€νλλ μ ν리μΌμ΄μ / μΉ λΈλΌμ°μ μμ μ€νλλ μλ°μ€ν¬λ¦½νΈ/ μλ²μ μ μ€νλλ μλ°μ€ν¬λ¦½νΈ / μλ²μμ μ€νλλ Http μλΈλ¦Ώ / κ΅¬κΈ μλλ‘μ΄λ μ ν리μΌμ΄μ .
>> Any ν΄λμ€λ κ·Έλ° λ€μν νλ«νΌμ λ 립μ μΈ μ ν리μΌμ΄μ μ μμ±ν μ μκ² ν΄μ€λ€.
κ°μ²΄ Object
https://www.youtube.com/watch?v=QPqzmKu0Y_k
- ν΄μ²΄ μ μΈ
- λ°μ΄ν° ν΄λμ€ (data class)
- enum ν΄λμ€
- μ°μ°μ μ€λ²λ‘λ©
/**
*
* Object ν€μλ
*
* νλ‘κ·Έλ¨μ΄ μ€νλλ λ΄λ΄ μμλ‘ λ³νλ μν μ 보λ₯Ό μ§μμ μΌλ‘ μ μ§ κ΄λ¦¬ν νμκ° μλ€λ©΄ μ±κΈν€ μ¬μ©μ κ³ λ €νμ (μλ₯Ό λ€λ©΄ Game ν΄λμ€ κ°μ)
* μ±κΈν€μ νλμ μΈμ€ν΄μ€(κ°μ²΄)λ§ μμ±λλ κ²μ λ§νλ€.
* μ½νλ¦°μμλ object ν€μλλ₯Ό μ¬μ©νμ¬, μ±κ·Ήν€ κ°μ²΄λ₯Ό μ μν μ μλ€.
*
* μ±κΈν€ κ°μ²΄λ μ΅μ΄ μ¬μ©μμ μ νλλ§ μμ±λμ΄, νλ‘κ·Έλ¨μ΄ μ€νλλ λμ κ³μ μ μ§λλ€.
* β
μ±κΈν€μ μμ€ν
μ μμ μ¬μ©κ³Ό λΆλ΄μ μ€κΈ°μ€ κ°μ²΄λ₯Ό 곡μ ν μ μλ€λ μ₯μ μμ
* β
λ€μ€ μ€λ λλ‘ μ€νλ λλ λ°λμ νλμ κ°μ²΄λ§ μμ±λλλ‘ λκΈ°ν μ²λ¦¬λ₯Ό ν΄μ£Όμ΄μΌ ν¨
*
* Object ν€μλ μ¬μ©νλ λ°©λ² 3κ°μ§
* 1. κ°μ²΄ μ μΈ 2. κ°μ²΄ ννμ 3. λλ° κ°μ²΄
*
* Observer
* ν¨μλ‘ μ§μ μμ² μνμ§λ§ μμ€ν
νΉμ 루ν΄μ μν΄ λμνλ κ²μ μ΄λ²€νΈλΌκ³ λΆλ₯΄λ©° μ΄ μ΄λ²€νΈ λ°μμλ§λ€
* μ¦κ°μ μΌλ‘ μ²λ¦¬νλλ‘ λ§λλ ν¨ν΄μ μλ―Ένλ€.
* > μ΄λ²€νΈλ₯Ό μμ νλ ν΄λμ€
* > μ΄λ²€νΈμ λ°μ λ° μ λ¬ ν΄λμ€
* > μ½λ°± - μ΄λ²€νΈλ₯Ό λ겨 μ£Όλ κ²μ μλ―Ένλ€.
*
*
* λ°μ΄ν° ν΄λμ€
* : λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄ νΉλ³ν μ€κ³λ ν΄λμ€
* : κ°λ ₯ν λ°μ΄ν° μ²λ¦¬ κΈ°λ₯μ κ°μ§!
* λ°μ΄ν° ν΄λμ€λ class ν€μλ μμ data ν€μλλ₯Ό μΆκ°νμ¬ μ μ.
*
*
* μ°μ°μ μ€λ²λ‘λ©
*
*
* */
fun main() {
Game.play()
}
// 1. κ°μ²΄ μ μΈ - μν κ΄λ¦¬μ μ μ©ν¨. νλ‘κ·Έλ¨μ΄ μ€νλλ λμ μ§μμ μΌλ‘ μ΄λ€ μν μ 보λ₯Ό μ μ§ κ΄λ¦¬ν νμ μμ λ νΉν
// μ΄κΈ°ν λΈλ‘μ΄ ν¬ν¨ λ μ μλ€. - μ΅μ΄λ‘ μ¬μ©λλ μμ μ νλμ κ°μ²΄κ° μλ μμ±λμ΄ μ΄κΈ°ν λκΈ° λλ¬Έ. >> κ°μ²΄ μμ±μ μ€ν νμ μλ μ½λ ν¬ν¨ν΄μΌν¨
// μμ±μλ κ°μ§ μ μλ€.
// κ°μ²΄ μ μΈμλ μΌλ° ν΄λμ€ μ²λΌ μμ±κ³Ό ν¨μκ° ν¬ν¨λ μ μλ€.
// κ²μ λ‘μ§ μ²λ¦¬ μ½λ , κ²μ 루ν, player, room μΈμ€ν΄μ€ μμ±ννλ κ²μ Game κ°μ²΄ μμ λμ΄μΌ νλ€.
// ↓ λͺ¨λ κ²μ λ‘μ§μ΄ ν¬ν¨λ κ²μ΄λ€.
object Game{
private val player = Player("Carrie")
private var currentRoom: Room = TownSquare()
// μ€μ²© ν΄λμ€ - Game κ°μ²΄μμλ§ νμνκ³ λ€λ₯Έ μ½λμμλ μ¬μ©νμ§ μκΈ° λλ¬Έμ μ€μ²© μν΄
private class GameInput(arg: String?){
private val input =arg ?:""
val command = input.split(" ")[0]
val argument = input.split(" ").getOrElse(1,{ "" })
fun processCommand() = when(command.toLowerCase()){
else -> commandNotFound()
}
private fun commandNotFound() = "μ ν©νμ§ μμ λͺ
λ Ήμ
λλ€ !"
}
init{
println("λ°©λ¬Έμ νμν©λλ€.")
player.castFireball(10)
}
fun play()
{
while(true){
// κ²μ μμ
println(currentRoom.description())
println(currentRoom.load())
printPlayerStatus(player)
print("> λͺ
λ Ήμ μ
λ ₯νμΈμ : ")
println("μ΅κ·Ό λͺ
λ Ή : ${readLine()}")
}
}
private fun printPlayerStatus(player: Player){
println("player's name is ${player.nick}")
}
}
// 2. object ν€μλλ‘ μ μλ κ²μ΄ κ°μ²΄ ννμμ΄λ©°,
// {} μμ μ μλ μ½λκ° μ΅λͺ
ν΄λμ€μ λͺΈμ²΄λ₯Ό μ μν κ².
// μ΄ μ΅λͺ
ν΄λμ€μ μΈμ€ν΄μ€λ μμ μ½λκ° μ€νλ λ μμ±κ³Ό μ΄κΈ°νλλ€.
val abandondedTownSquare = object : Room("room name") {
override fun load() = "μ€μ?"
}
// 3. λλ°κ°μ²΄
// κ°μ²΄ μ μΈκ³Ό μ μ¬ νλ, μ΅μμ μμ€μμ μ¬μ© X, ν΄λμ€ λ΄λΆμ μ μνμ¬ μ¬μ©
//
// data class
// * λ°μ΄ν° ν΄λμ€
// * : λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄ νΉλ³ν μ€κ³λ ν΄λμ€
// * : κ°λ ₯ν λ°μ΄ν° μ²λ¦¬ κΈ°λ₯μ κ°μ§!
// * λ°μ΄ν° ν΄λμ€λ class ν€μλ μμ data ν€μλλ₯Ό μΆκ°νμ¬ μ μ.
// λ°μ΄ν° ν΄λμ€λ₯Ό μ μνλ©΄, μ΄ ν΄λμ€μ μμ±μ λ§κ² μ²λ¦¬λλ toString, equals, hashCode ν¨μλ€μ μ½νλ¦° μ»΄νμΌλ¬κ° μλμΌλ‘ μμ±ν΄μ€.
// μλ μμ±λλ ν¨μλ€μ΄ λ°μ΄ν° ν΄λμ€μ λͺ¨λ μμ±μ μ²λ¦¬ν μ μκ² νλ €λ©΄ λ°λμ κΈ°λ³Έ μμ±μμ μμ±λ€μ μ§μ ν΄μΌ ν¨.
data class Coordinate(val x:Int, val y: Int){
val isInBounds = x>=0 && y>=0
operator fun plus(other: Coordinate) = Coordinate(x + other.x , y + other.y)
}
// ν΄μ²΄ μ μΈ
// enum Class
// μ½νλ¦°μμλ enum ν΄λμ€κ° κ° νλͺ©μ λν΄
// λ΄λΆμ μΌλ‘ name(νλͺ© μ΄λ¦, string νμ
) κ³Ό ordinal(νλͺ© μμΉ, Int νμ
) μμ±μ κ°λλ€.
//
enum class Direction(private val coordinate: Coordinate){
NORTH(Coordinate(0,-1)),
EAST(Coordinate(1,0)),
SOUTH(Coordinate(0,1)),
WEST(Coordinate(-1,0)) ; // μ μΌ λμ μΈλ―Έ μ½λ‘ !
fun updateCoordinate(playerCoordinate: Coordinate) =
// Coordinate(playerCoordinate.x +coordinate.x,
// playerCoordinate.y +coordinate.y)
coordinate + playerCoordinate
}
fun getDirectionName(direction: Direction) =
when(direction){
Direction.NORTH -> "λΆ"
Direction.EAST -> "λ"
Direction.SOUTH -> "λ¨"
Direction.WEST -> "μ"
}
μΈν°νμ΄μ€μ μΆμ ν΄λμ€
↓ μλ μ νλΈ λ§ν¬ μ΄ν΄νκΈ° λ§€μ° μ½λ€!
https://mond-al.github.io/kotlin-visibility-internal.html
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/trim-indent.html
https://www.youtube.com/watch?v=UpJ5r67oDfY&list=PLg3A12oL1JCNnsU2qTQGDJelJwu4pruji&index=3
import javax.print.DocFlavor
/**
*
*
* μΈν°νμ΄μ€(abstract λ³΄λ€ μ’ λ μΆμ) == κ·μΉ / κ·μ½
* >> μλ°λ μ½νλ¦°μ λ€μ€ μμ μλλλ°, κΈ°λ₯μ 무νμ μΌλ‘ λλ €κ° μ μμ
* >> μΆμν΄λμ€λ μμ±μκ° μμ§λ§, μΈν°νμ΄μ€λ μμ±μκ° μλ€.
* μΆμν λ©μλμμλ , abstract, open λ±μ΄ λͺ¨λ μλ΅λμ΄μμ
* β
μμ±μ μμ²΄κ° μμΌλκΉ μμ±μ νΈμΆμ΄ μκ³ , μΈμ€ν°μ€ μμ± μμ²΄κ° μλ¨( μΆμ ν΄λμ€λ μμ±μλ μμ§λ§ μΆμ λ©μλλ₯Ό νλλΌλ ꡬ체ν νμ§ μμΌλ©΄, μμ±μκ° λΆλ €μ§μ§λ μμ == μΈμ€ν΄μ€ν λμ§ λͺ»ν¨)
*
*
* Abstract μΆμν΄λμ€ - μΆμ λ©μλ : λ
Έλ°λ
* μΆμ ν΄λμ€μ μΈμ€ν΄μ€λ μμ±ν μ μμ.
*
* ꡬ체ν/ μΆμν
* >> Red μμ Flock μΌλ‘ κ°λ μ λλ μΆμν λ κ²
* >> Flock μμ Redλ‘ κ°λ μ λλ ꡬ체ν λ κ²
* */
// μμ΄μμ μ¬λ €μ§λ€. κ³ λ¬΄μ€μ λΉκΈ΄λ€. λ°μ¬λμ΄ λ μκ°λ€.
// μ₯μ λ¬Όμ λΆλͺν 좩격μ μ£Όλ€. λΉνμ λ§μΉλ€.
// μ : μ΄λ¦ , 곡격λ ₯, 곡격λ ₯ κ°μ€μΉ , μν, 컬λ¬
// >> RED λ₯Ό μ μ€κ³ ν΄μ λ€λ₯Έ μμ μλ€μ νμ μν¬ κ±°μ
enum class Color(val hexColor: String)
{
RED("FF0000"), GREEN("00FF00"), BLUE("0000FF"),
BLACK("000000"), YELLOW("FFFF00"), WHITE("FFFFFF")
}
enum class Status(val exp: String)
{
NONE("λΉν μμ μ μ"), READY("μμ΄ μμ μ€λΉλ"), SHOT("λ°μ¬λ"),
FLYING("λ μκ°λ"),CRASHED("μΆ©λν"), END("λΉνμ μλ£ν")
}
// κ³ λ¬΄μ€ μΈμ LENGTH
private val LENGTH = 20
/**
* class Red λ₯Ό Flock(κ°κΈλ₯) λ‘ λ°κΏμΌν¨ (곡ν΅μ μΌλ‘ μ°λ €κ³ )
2κ°μ§ ν¨μλ μλ§λ€ λ¬λΌμ ΈμΌ νλ€. "μΆμν ν¨μ" abstract - λ°λ μμ
abstract μλ건, concrete ν¨μ. ꡬ체ν ν¨μλΌκ³ λ§ν¨.
β
μΆμν λ©μλ(μ½λ©μ΄ μλ£ λμ§ μμ) κ°λλ€λ©΄ ν΄λΉ ν΄λμ€κ° μΆμν ν΄λμ€κ° λμ΄μΌ νλ€. → λλ νμ¬ μΆμν λ©μλκ° μκΈ° λλ¬Έμ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μλ€~
*/
abstract class Flock {
lateinit var name: String // λμ€μ setterλ‘ μ€μ ν μ μκ²λ lateinit μ¬μ© λμ΄ μλ€.
open val color: Color = Color.RED // override ν μ μκ²λ open
var power: Double = 10.0
open val weight: Double = 1.1 // κ°μ€μΉ
var status: Status = Status.NONE
open val type: String = "Red" // μ κ· μΆκ° νλ¬νΌν°
// 2μ°¨ μμ±μ - μμ μ μ΄λ¦ νμ
// constructor(name: String): this(){
// this.name = name
// }
// Any νμ
νν
λ¬Όλ € λ°μ κ±Έ μ¬ μ μ toString
override fun toString(): String {
// exp : status enumμ νλ‘νΌν°
return "${status.exp} ${name} ${type}μ (power = ${power}, weight = ${weight})"
}
// concrete ꡬ체ν ν¨μ. μμμ μκ°ν΄μ private → protected λ‘ λ°κΏμ€μΌ ν¨.
protected fun getRandom(max : Int = 10) = (Math.random()*max).toInt() + 1
protected fun getDamage() = power * weight * getRandom()
// μμ΄μμ μ¬λ €μ§λ€.
fun readyForShoot()
{
// μλ this : μκΈ° μμ , toString μλ νΈμΆ λμ΄ μμ return κ° λμ¬ κ²μ
println("step1: ${this}κ° μμ΄ μμ μ¬λ €μ§λ€.")
// μν λ°κΏμ£ΌκΈ°
this.status = Status.READY
}
// κ³ λ¬΄μ€μ λΉκΈ°λ€.
fun adjustAngleLength(){
println("step1: ${this}κ° κ³ λ¬΄μ€μ΄ λΉκ²¨μ λ°μ¬λλ€.")
this.power += getRandom(LENGTH) *this.weight
println("\t >> κ²°μ λ power: ${power}")
this.status = Status.SHOT
}
// λ°μ¬λμ΄ λ μκ°λ€. → abstract : λ°λ μκ² - λ€λ₯Έ Red λ Blue μμ μ€λ²λΌμ΄λν΄μ μ°κ²λ μ λ νκ³ μλ€.
abstract fun flyAtterShoot()
// {
// println("step3: ${this}κ° κ³΅μ€μΌλ‘ λ μκ°λ€.")
// this.status = Status.FLYING
// }
// μ₯μ λ¬Όμ λΆλͺν 좩격μ μ£Όλ€. → abstract : λ°λ μκ²
abstract fun crashWithDamage()
// {
// println("step 4: ${this}κ° μ₯μ λ¬Όμ λΆλͺν 좩격μ μ£Όλ€.")
// println("\t >> μ
ν μ΄ λλ―Έμ§ : ${java.lang.String.format("%.2f", getDamage())} μ ")
// this.status = Status.CRASHED
// }
// λΉνμ λ§μΉλ€.
fun landingForEnd()
{
println("step5: ${this}κ° λΉνμ λ§μΉλ€.")
println("-".repeat(80)+"\n")
this.status = Status.END
}
}
// μΆμν λ©μλμμλ , abstract, open λ±μ΄ λͺ¨λ μλ΅λμ΄μμ
// μ¬μ©ν λμλ override λ₯Ό ν΅ν΄ μ¬μ© νλ©΄ λ¨.
interface Spliter {
fun splitBirds()
fun splitDamage(vararg birds: String)
}
// μμ 3λ§λ¦¬λ‘ λΆλ¦¬λλ κ³ μ ν κΈ°λ₯μ λ΄κ³ μλ€.
class Blues(_name:String): Flock(),Spliter
{
init {
super.name = _name
super.power = 8.0
status = Status.NONE
// color = Color.BLUE // err - val μ΄λκΉ λ³κ²½ μλμ§λ§, Flock ν΄λμ€μμ μμ κ°λ₯νκ² ν΄λμκΈ° λλ¬Έμ
// weight = 1.3 // err
}
override val color: Color = Color.BLUE
override val type: String = "Blues"
override val weight: Double = 1.3
// μμ λ§μ κΈ°λ₯μ΄ μμ - 3λ§λ¦¬λ‘ split λ¨.
// μ¬μ μ Spliiter μΈν°νμ΄μ€ ν΅ν΄μ μ΄
override fun splitBirds()
{
println("\t>> μ§, μ μ΄ν¬, μ μ΄ μΈλ§λ¦¬ μλ€λ‘ λΆλ¦¬ λμ΄ λ μκ°λ€.")
}
override fun splitDamage(vararg birds: String)
{
for (bird in birds){
println("\t>> '${bird}'κΈ° μ₯μ λ¬Όμ λΆλͺν 좩격μ μ£Όλ€.")
println("\t>> μ
ν μ΄ λλ―Έμ§: ${java.lang.String.format("%.2f",getDamage())}' μ ")
}
}
// Flock ν΄λμ€λ‘ λΆν° μ€λ²λΌμ΄λ
override fun flyAtterShoot() {
println("step3 : ${this}κ° κ³΅μ€μΌλ‘ λ μκ°λ€.")
splitBirds()
this.status = Status.FLYING
}
override fun crashWithDamage() {
println("step4: ${this}κ° μ₯μ λ¬Όμ λΆλͺν 좩격μ μ£Όλ€.")
splitDamage("Jim Blueμ", "Jake Blueμ", "Jay Blueμ")
println("\t>> μ
ν μ΄ λλ―Έμ§: ${java.lang.String.format("%.2f",getDamage())}' μ ")
this.status = Status.CRASHED
}
}
/** μμ λ°μ!
μμ λ°μ ν΄λμ€μ μλ κ²μ μμ μ~
*/
class Red(_name: String): Flock() {
init {
super.name = _name
}
/** μ¬μ μ! ν΄μΌν¨ - λ°λμ!! implement ovveride */
override fun flyAtterShoot()
{
println("step3: ${this}κ° κ³΅μ€μΌλ‘ λ μκ°λ€.")
this.status = Status.FLYING
}
// μ₯μ λ¬Όμ λΆλͺν 좩격μ μ£Όλ€. → abstract : λ°λ μκ²
override fun crashWithDamage()
{
println("step 4: ${this}κ° μ₯μ λ¬Όμ λΆλͺν 좩격μ μ£Όλ€.")
println("\t >> μ
ν μ΄ λλ―Έμ§ : ${java.lang.String.format("%.2f", getDamage())} μ ")
this.status = Status.CRASHED
}
}
fun main() {
// val bird1 = Red()
// bird1.name = "λ λ1" // lateinitμ μ¬μ©ν΄μ
// val bird1 = Red("μ§μ")
// println("bird1 = ${bird1}")
// bird1.readyForShoot()
// bird1.adjustAngleLength()
// bird1.flyAtterShoot()
// bird1.crashWithDamage()
// bird1.landingForEnd()
//
// println()
// listOf<Red> (Red("κΈΈλ"),Red("μν¬"),Red("κΊ½μ ")).forEach {
// it.readyForShoot()
// it.adjustAngleLength()
// it.flyAtterShoot()
// it.crashWithDamage()
// it.landingForEnd()
// }
println()
listOf<Blues> (Blues("μ² μ"),Blues("μλ"),Blues("λμ°"))
.forEach {
with(it) {
// with ν¨μμ itμ λ°μμ κ°μ²΄κ° this λ¬Έλ§₯μ λ€μ΄ μ¨λ€.this λ¬Έλ§₯μ κΉλ € μκΈ° λλ¬Έμ μλ it. μ μλ΅νλ€.
readyForShoot()
adjustAngleLength()
flyAtterShoot()
crashWithDamage()
landingForEnd()
}
}
}
exitProcess : μ½νλ¦° νμ€ λΌμ΄λΈλ¬λ¦¬ ν¨μ. νμ¬ μ€ν μ€μΈ JVM μΈμ€ν΄μ€(μ°λ¦¬ νλ‘κ·Έλ¨)μ μ€λ¨ μν΄.
import kotlin.system.exitProcess
'Kotlin' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
IntelliJ μ€μΉ μ μ»΄νμΌ μ€λ₯ (0) | 2021.07.19 |
---|---|
Kotlin_μ λ€λ¦ / νμ₯ / ν¨μν νλ‘κ·Έλλ° (0) | 2021.07.02 |
Kotlin_Map / Class (0) | 2021.07.01 |
Kotlin - Scope ν¨μ & Listμ Set (0) | 2021.06.30 |
Kotlin_Null & λ¬Έμμ΄ & μ«μ νμ (2) | 2021.06.30 |
λκΈ