본문 바로가기

프로그래밍 언어/코틀린_쌩초보를 위한 기초

쌩초보를 위한 기초_15_조건문 when

조건문 when

 

앞에서 만들었던 if else 조건문에서는 등급을 A,B,C,F 4개로 나누었다.

그런데 나누어야 할 등급이 많아지면 else if 조건문도 그 만큼 많이 만들어야 하므로

작업이 많아지고 코드도 길어질 것이다.

이런 경우에 when 조건문을 사용하면 간단하게 만들 수 있어 편리하다.

 

when은 언제, ~일 때 , ~할 때를 나타내는 글자이므로 if조건문을 대용하여 사용할 수 있다.

 

3 이면 : If it is 3

3 일 때 : When it is 3

 

when조건문은 2가지로 표현할 수 있다.

 

  • 전달 인자(argument)를 사용하는 경우
  • 전달 인자(argument)를 사용하지 않는 경우

 

전달 인자가 있는 when문

 

전달 인자를 사용한 when문은 아래와 같은 모양으로 만든다.

 

조건에는 전달인자의 값, 범위, 함수를 넣을 수 있다.

화살표 오른쪽 실행 부분에는 조건이 맞을 때 실행할 내용을 적는다.

조건에 맞는 값이 없을때 실행할 내용은 else에 있는 실행 부분에 적는다.

 

한번 만들어 보자.

 

전달 인자(argument)를 사용함

main함수 바깥에 테스트할 함수를 하나 만든다.

함수명은 test로 한다.

매개변수는 x라고 하고 타입(type)은 Any로 한다.

Any 타입은 "아무거나"라는 뜻으로 어떤 타입도 허용할 경우에 사용한다.

단, null (값이 없음)은 허용하지 않는다. null도 허용하려면 Any? 를 사용한다.

 

이제 test함수의 실행 부분(중괄호)을 작성한다.

when문을 만든다.

전달인자는 x로 한다.

이 when문은 "전달 인자 x 일 때" 라는 뜻이다. 

 

이제 실행 부분(중괄호)을 작성하자.

실행 부분의 내용은 다음과 같다.

 

(전달 인자가) 1 일 때 -> 출력하라 (뭘?) 문자열 one

(전달 인자가) 2 일 때 -> 출력하라 (뭘?) 문자열 two

그렇지 않으면 (1도 아니고 2도 아니면)  -> 출력하라 (뭘?) 문자열 Unknown (모름)

 

main 함수에서 테스트 해보자.

먼저 main 함수의 매개변수를 선언하자.

코틀린 처음 버전이었을때는 main()함수에 기본적으로 아래와 같이 선언해야 했지만

코틀린 버전이 1.3.7로 업그레이드 한 후 부터는 매개변수를 선언하지 않아도 된다.

여기서는 그냥 훈련 삼아 적었다.

매개변수명은 args (이름은 바꿔도 되지만 기본적으로 arguments(전달인자)의 약자를 사용함)

Array(배열)을 선언하고 배열 타입은 String(문자열)으로 한다.

 

test함수에 전달인자 1을 넣어서 실행해보자.

계속해서 전달인자 2와 3도 넣어서 테스트 결과를 확인 해보자.

 

전달인자가 있는 기본적인 형태를 만들어 보았다.

이번에는 다양한 when문의 예시를 살펴본다.

 

예문1 (여러 개의 조건)

 

조건을 여러 개 나타낼 때는 쉼표( , )를 사용한다.

위 조건문의 뜻은 다음과 같다.

 

1 또는 2 또는 3 일 때 -> 출력하라 문자열 numbers

apple 또는 lemon 일 때 -> 출력하라 문자열 fruits

 

예문2 (범위가 있는 조건)

 

test()함수의 매개변수 x의 타입을 Int (정수)형이다.

in은 범위를 나타낼 때 사용하는 키워드(keyword)이다.

느낌표 ! 는 부정(아님)을 나타내는 연산자이다.

느낌표와 in을 붙이면 ( !in ) "범위가 아님 또는 벗어남"을 나타낸다. 

 

여기서는 출력하라는 함수를 println 대신 print를 사용했다.

print함수는 출력 후 줄을 바꾸지 않는다.

 

위 조건문의 뜻은 다음과 같다.

 

1 이상 5 이하 일 때는 -> 출력하라 OK.

1 이상 5 이하가 아닐 때는(1보다 작고 5보다 큰 범위) -> 출력하라 NO.

 

예문3 (변수에 넣은 when문)

is 는 타입(type)을 검사할 때 사용하는 키워드(keyword)다.

is Type 형태로 적으면 "타입이다"의 뜻이 된다.

is String (문자열 타입이다) , is Int (정수 타입이다) , is Double (더블 타입이다) 등

 

위 조건문의 뜻은 다음과 같다.

 

전달인자 str이 String이다 일 때 ->출력하라 (뭘?) str의 길이(글자수)를

전달인자 str이 String이 아니다 일 때 ->출력하라 (뭘?) "문자열이 아니다" 를

그렇지 않으면 -> false(거짓)

 

예문4 (다양한 전달 인자)

다양한 전달 인자를 사용하는 예이다.

System.currentTimeMillis() 는 시스템 클래스에 있는 밀리초 단위의 현재 시간을  Long 타입으로 전달한다.

앱 제작시 시간을 재거나 표시할 때 사용한다.

제일 아래에 테스트용으로 클래스 이름이 TestClass인 class를 하나 선언한다. 

 

위 조건문의 뜻은 다음과 같다.

 

1 일 때 -> 출력하라 "타입 Int: 전달인자 값"

Hello 또는 Kotlin 일 때 -> 출력하라 "타입 String: 전달인자 값"

Long 타입이다 일 때 -> 출력하라 "타입 Long: 전달인자 값"

Double 타입 아니다 일 때 -> 출력하라 "더블 타입이 아니다"

 

 

예문5 (범위: 앞 글의 if문)

 

전달 인자가 없는 when문

 

전달 인자가 없는 when문을 사용하면 변수와 조건식을 사용하여 else if문을 간단하게 대체할 수 있다.

지금까지 when문에 대해 살펴보았다.

다음 글에서는 반복문에 대해 알아본다.