GDSC HUFS 4기/Kotlin Team #3

[3팀] Android-12-Kotlin: 산술 연산자와 유형의 중요성 ~ When 식

FirstSong 2022. 10. 2. 18:17

이 글은 Android12 및 코틀린 완전 정복을 참고하여 작성하였습니다.

작성자 : 송가현

개발환경은 Windows, Android Studio입니다.

 

 

1. 산술 연산자와 유형의 중요성

산술 연산자 ( + , - , * ,  / ,  % )

var result= 5+3
result= result/2
print(result)

 산술연산자는 우리가 흔히 알고 있는 + (더하기), - (빼기), * (곱하기), / (나누기), % (나머지) 연산자라고 할 수 있습니다.

하지만 이렇게 입력할 경우 다른 대체 방안이 뜨게 됩니다.

result= result/2

이 경우, 다른 언어들에서 살펴봤던 것과 같이 코드를 이렇게 수정할 수 있습니다.

 

result /= 2

 

나누기를 하는 경우 유의할 사항이 있습니다.

var result =5+3
val a = 5
val b =3
result = a/b
print(result)

 

Q. 이와 같이 /를 사용하는 경우 결과는 어떻게 될까요?

A.   a와 b가 정수이기 때문에 결과 또한 정수가 됩니다.

그래서 부동 소수점으로 값이 나올 수 없습니다.

 

Q. 그럼 이 경우는 어떻게 될까요?

var result= 5+3
val a = 5.0
val b = 3
result = a/b
print(result)

A. type mismatch 가 나타나게 됩니다.

int 타입이 요구되는데 double 타입이 나타나는것이 관찰된다는 사항을 확인 할 수 있습니다.

즉, double 타입을 정수로 나누려니깐 맞지 않는다는 것 입니다.

 

 

이 경우에는 이렇게 해결할 수 있습니다.

var result = 5+3
val a = 5.0
val b = 3
result = (a/b).toInt()
print(result)

이 메서드는 값을 정수로 바꿔주게 됩니다.

 

이 방법 말고 result가 부동 소수점의 형태로 나올 수 있게 하는 방식은 이렇습니다. 

var result = 5+3
val a = 5.0
val b = 3
var resultDouble : Double
resultDouble = a / b
print(resultDouble)

result 변수는 이미 생성되어 변경되었기 때문에 ( 개발을 할 경우 다른 곳에 이미 result 가 쓰일 수 있는 점을 유의하여)

resultDouble 이라는 변수를 var resultDouble : Double 로써 형태를 지정해주는 것이 좋은 방법이라고 할 수 있습니다.

 

이렇게 실행하면

◼출력 : 1.666666....의 값이 출력됩니다.

 

2. 비교연산자

 

 비교 연산자 ( ==, !=, <, >, <=, >= )

val isEqual = 5==3

이와 같은 변수는 isEqual 이 True 또는 False 라는 것을 나타내게 합니다. 

위의 코드는 isEqual= False 라는 것을 나타냅니다.

 

val isEqual = 5==3
println("isEqual is" + isEqual )

여기서 isEqual is false 라고 출력되는 것을 통해 이를 확인할 수 있습니다.

 

이 것을 실행했을 때 💡 표시가 뜨게 되는데, 무엇이 문제가 되는 것일까요?

println("isEqual is " + isEqual)

이 구문은 다음과 같이 바꿀 수 있습니다.

println("isEqual is $isEqual")

다음과 같이 작성하게 되면 원래의 결과와 같은 것을 확인할 수 있습니다.

 

이 외, 비교 연산자는 다음과 같이 사용 가능합니다. 

val isNotEqual = 5!=5
println("isNotEqual is $isNotEqual")
println("is5greater3 ${5>3}")

! 는 다른 언어와 같이 부정의 뜻을 가진다고 할 수 있습니다.

여기서 한가지 유의할 점은 두 번째 코드블럭에서 보이는 것처럼 즉각적으로 println이나 print 구문에서 값을 비교하고 싶을 경우에 ${ 비교 } 형식으로 써줘야한다는 것 입니다.

 

 

3. 증감연산자

 증감 연산자 (  ++, -- )

 

증감 연산자 또한 다른 언어들과 유사한 부분의 문법이라 이해가 쉬웠습니다. 

일단 설명하기에 앞서 강의 앞 부분에서 이 부분을 짚고 넘어갔습니다.

var myNum = 5
myNum += 3
println("myNum is $myNum")

흔히 알고 있듯, myNum +=3 은 myNum= myNum+3 이라는 것을 아실텐데요!

이와 같이 다른 -=, *-, /= 등 모두 다른 언어에서 사용하는 것과 같이 줄일 수 있습니다.

 

증감연산자를 살펴보겠습니다.

myNum++
println("myNum is $myNum")

이렇게 코드를 작성하는 경우,  값이 1 증가하게 됩니다. 

++, --는 이렇게 1씩 증가 , 1씩 감소를 얘기하는데요.

여기서는 앞에서 ++/--를 붙이느냐, 뒤에 ++/-- 를 붙이느냐를 구분해야합니다.

println("myNum is ${myNum++}")
println("myNum is ${++myNum}")

일단 증감연산자를 바로 넣어 printn / print 할 경우에도 ${ } 를 사용함에 유의해야합니다!

 

1) 앞에 ++를 붙이는 경우

2) 뒤에 ++을 붙이는 경우 

 

 이 두개의 경우에서, 2)는 코드가 끝난 후에 변수를 증가시키는 것입니다. 1)은 2)의 반대라는 것을 알 수 있죠

따라서 myNum이 33일때 

코드 블럭을 실행시키면

myNum is 33

myNum is 35 가 됩니다.

 

이유: 33에서 println을 한 뒤 ++ 하기 때문에 출력 후에 34가 된다. 이후 출력 전에 myNum을 다시 ++ 먼저 하므로, 35가 된 채 출력된다.

 

4. If문

파이썬에서의 if문과 같은 느낌으로, 코틀린에서의 조건문도 if / else if / else로 구성됩니다.

if 와 else if의 개수는 정해져 있지 않지만, else는 1개만 쓰도록 해야합니다.

 

if문은 다음과 같이 사용할 수 있습니다.

var heightperson1= 170
var heightperson2= 189


if( heightperson1 > heightperson2){
	println("use raw force")
    }else if(heightperson1==heightperson2){
    	println("use your power technique 1337")
    }
    else{
    println("use technique")
    }

다음의 출력은 use raw force 가 됩니다.

if의 () 안 조건은 boolean형식을 사용해도 무방합니다. 

EX) if(name=="Denis")

 

 이렇게 범위에 따라 if문을 구성하게 되면, 💡 표시를 또 만나게 됩니다!

바로, when 을 사용할 수 있다는 것인데요, 이는 5.When 식 에서 볼 수 있습니다.

 

if문을 사용하면서 중요한 것은 무엇일까요??

if문은 항상 첫 평가식만 본다는 점 입니다.

거짓일 경우 다음 실행으로 넘어가지만, 참일 경우 끝나게 됩니다.

 

 

 

5. When 식

When 식은 python의 어떤 문과 비슷할까요?

👉 바로 python의 switch 와 유사하다는 것을 코딩실습을 통해 느낄 수 있었습니다.

 

When 식을 사용해보겠습니다.

var season = 3
when(season){
	1->println("Spring")
    2->println("Summer")
    3->{
    	println("Fall")
        println("Autumn")
    }
    4->println("Winter")
    else -> println("Invalid Season")

}

여기서 when( ) 안에 들어가는 변수는 string 형태일 수도 있습니다!

정해진 값에 따라 코드가 실행되는데 확인할 것이 한 가지 더 있습니다.

👉 바로 ! 여러 실행문을 쓸 경우

3->{
    	println("Fall")
        println("Autumn")
    }

중괄호 { } 를 꼭 써야한다는 점 입니다.

if 문에서도 마찬가지로 한가지 구문을 실행할 것이 아니라면 { } 를 잊지 말아야합니다 !

 

여기서 좀 더 나아가 다음 코드를 살펴봅시다.

var month = 3
when(month){
in 3..5 -> println("Spring")
    in 6..8 -> println("Summer")
    in 9..11 -> println("Fall")
    // in 12 downTo 2 -> println("Winter")
    12,1,2 -> println("winter")
    else -> println("Invalid Season")

}

아마 이 부분도 많이 생소하실겁니다. 🤔 ( 제가 생소하게 느꼈어요 )

여기서 .. 부분은 뭘까요?

3 부터 5라고 생각하시면 됩니다. month가 3부터 5일 경우에 spring 을 출력하라는 것으로 볼 수가 있죠.

in을 꼭! 붙여주셔야합니다.

 

🤔 근데 겨울은 12월 부터 2월인데 이건 어떻게 해야할까요?

주석에 나온 것처럼 in 12 downTo 2를 사용하면, 12부터 2까지 사이에 있는 모두 수가 포함이 될텐데 말이죠!

 

🤔  in 12..2는 또 말이 안되지 않나요?

 

👉 이 경우에는, 12, 1, 2-> 실행할 코드 를 써주면 해결됩니다!

단, in은 쓰지 않도록 해요!!!

 

👉 in앞에 !를 사용해도 됩니다. (이 경우 부정을 나타냄)

 

다음 코드를 또 살펴봅시다.

var x : Any =13.37
when(x){
	is Int -> println("$x is an Int")
    is Double -> println("$x is a Double")
    is String -> println("$x is a String")
    else -> println("$x is none of the above")
}

◾출력값: 13.37 is a Double

여기서

var x:Any = 13.37f

f를 붙이면, float 가 되므로 13.37 is none of the above 가 출력됩니다.

is 역시 !is를 통해 부정을 나타낼 수 있습니다.

is 또한 위에서 아래로 수행되므로 한가지에 걸리게 되면 아래 코드는 실행되지 않습니다.

if . else if 와 같습니다!

 

 

코틀린 기본 문법이 다른 언어들과 비슷한 부분이 많은데요 !

마지막으로 공부하며 알게 된 것은

 

🎵 오늘의 알아두면 좋은 Point 

print() 는 한 줄 띄기 없이 출력이 되지만

println() 을 사용하면 이를 가능하게 할 수 있습니다. 

-> 두가지 모두 사용은 가능하며, 활용하는 목적에 맞게 사용할 수 있습니다.

( 마치 c++을 배웠을 때와 유사합니다 ㅎㅎ)

 

 

이렇게 티스토리 블로그 포스팅을 마치도록 하겠습니다.