반응형
저번에 썼던 코드를 다시 보자.
fun main(){
fun calculateAmount (maxGlassContent : Double, currentBottleContent : Double, currentGlassContent : Double ) : Double{
var amount = maxGlassContent - currentGlassContent
if(currentBottleContent < amount){
amount = currentBottleContent
}
return amount
}
fun pourWater (maxGlassContent : Double, currentBottleContent : Double, currentGlassContent : Double) : Unit {
val toBeFilled = calculateAmount(maxGlassContent, currentBottleContent, currentGlassContent)
val newBottleContent = currentBottleContent - toBeFilled
val newGlassContent = currentGlassContent + toBeFilled
println("현재 잔의 물의 양은 $newGlassContent ml입니다." )
println("현재 병의 남은 물의 양은 $newBottleContent ml입니다." )
}
var bottleContent: Double = 800.0 //병
//잔1
var glassContent: Double= 40.0
val maxGlassContent: Double = 150.0
//잔2
var glassContent2 : Double = 90.0
val maxGlassContent2 : Double= 200.0
println("잔1:")
pourWater(maxGlassContent,bottleContent,glassContent)
println("잔2:")
pourWater(maxGlassContent2,bottleContent,glassContent2)
}
결과를 보면 틀리지 않은 답이나와 문제될 게 없어보이지만, 변수 glassContent 와 glassContent2의 양은 변하지 않았다. 즉 함수 pourWater() 내에서의 변수 값만 변해있고 함수 외부에서의 값은 그대로다. ( Call by value )
이제 저번 포스트를 통해 클래스를 만드는 방법을 배웠으니, 이를 해결할 수 있다.
class Glass(var content: Double, val capacity: Double)
class Bottle(var content: Double)
fun main(){
val bottle = Bottle(800.0)
val glass1 = Glass(40.0,150.0)
val glass2 = Glass(90.0,200.0)
fun calculateAmount (maxGlassContent : Double, currentBottleContent : Double, currentGlassContent : Double ) : Double{
var amount = maxGlassContent - currentGlassContent
if(currentBottleContent < amount){
amount = currentBottleContent
}
return amount
}
fun pourWater (bottle: Bottle,glass: Glass) : Unit {
val toBeFilled = calculateAmount(glass.capacity, bottle.content, glass.content)
bottle.content = bottle.content - toBeFilled
glass.content = glass.content + toBeFilled
println("현재 잔의 물의 양은 ${glass.content} ml입니다." )
println("현재 병의 남은 물의 양은 ${bottle.content} ml입니다." )
}
pourWater(bottle,glass1)
pourWater(bottle,glass2)
println(glass1.content)
println(glass2.content)
}
결과를 보면 이제 glass 와 bottle 내 content가 성공적으로 같이 변했음을 볼 수 있다.
출처:
내용 / 도움준 곳: 학교 교수님 (Christian Kohls) 강의
728x90
반응형
'언어 > Kotlin' 카테고리의 다른 글
Kotlin : 중간점검 (1) | 2022.10.11 |
---|---|
Kotlin : ArrayList (배열 + 리스트) (0) | 2022.09.07 |
Kotlin : 클래스 (Class) (0) | 2022.09.02 |
Kotlin : 객체 (Object) (0) | 2022.06.24 |
Kotlin : 함수 선언과 호출 (0) | 2022.06.18 |