코틀린 언어 정리 1-4
기본 - 제어문
제어문
특징
모든 제어문은 일정 조건을 만족하면 모두 표현식으로 사용될 수 있습니다. 예를 들면 if, when 등 의 경우 표현식으로 사용하려면 반드시 else를 포함하여 사용해야 합니다.
예제
if else
C/C++/Java 처럼 3항 연산자 "A ? B : C" 는 없지만 if else 문으로 동일하게 처리할 수 있습니다.
예제
for in
예제
for ( idx in 0..10 ) { ... }
⇒ 0~10 범위 ( 10 포함 )
for ( i in 1 until 10 ) { ... }
⇒ 1부터 9까지 ( 10 제외 )
for ( i in 1 ..10 step 5 )
⇒ 5씩 증가
for ( i in 10 downTo 1 )
⇒ 10부터 1까지 감소
for ( ( idx, value ) in list.withIndex() ) { ... }
⇒ 구조 분해를 통한 다중값 리턴으로 list의 index와 element를 동시에 받음
for 와 같이 사용할 수 있는 키워드
in
until
downTo
step
특징
코틀린에서는 C/C++/Java와 같은 방식의 for문은 제공하지 않습니다. ex. for ( int i = 0; i < 100; i++ ) { ... }
while / do while
while / do while 은 C/C++/Java와 동일합니다.
예제
when
Kotlin에는 switch case 문 대신 when이 있습니다. switch case 와 다르게 when에서는 입력된 객체에 대한 값( 단일값, ","로 구분된 복수의 값, Type이 각각 다른 값 ), 범위, 타입 등을 명시하여 분기할 수 있으며 각각의 마지막 표현식을 when 구문 전체의 리턴값 처럼 사용합니다. when 구문을 표현식으로 사용하려면 else를 반드시 포함해야 합니다. 위에서 언급한 "Type이 각각 다른 값"에 대해 좀 더 구체적으로 확인 해보면 아무 타입의 값을 넣고 Type을 모르는 상태( 보통 Any 등의 Type으로 선언된 경우 )에서 예상되는 모든 타입의 값을 넣고 비교할 수 있습니다. 주의할 점은, 바로 전에 "Type을 모르는 상태"라고 했는데, 만약 명백하게 타입을 알고 있는 경우(ex. 바로 윗부분에 Int형 변수를 선언하고 아래 부분에서 String Type으로 비교하는 경우, 즉 명백하게 잘못된 코딩을 한 경우)라면 컴파일 에러 또는 경고를 발생시킵니다. 즉 컴파일 할때 when 구문 자체만 분석하는 것이 아니라(아니라) when과 관련 있는 코드의 문맥까지 분석하여 오류를 추론합니다.
거의 모든 경우가 포함된 when의 사용 예
예제
if else문 처럼 사용 되는 예
when 다음에 "( 객체 )" 와 같이 비교할 인자값 등을 넣지 않고 조건식만 나열하여 사용할 수 있습니다.
예제
break/continue/return/label
C/C++/Java와 마찬가지로 for, while 등의 반복문 내에서 흐름을 제어할 수 있는 구문입니다. 일반적인 사용법은 기존 언어들과 동일하며 차이점은 Label과 같이 사용할 수 있다는 점입니다.( C/C++ 에서 Label은 goto 문과 같이 사용합니다. )
예제
break은 보통 break을 직접 포함하는 반복문을 벗어나는 흐름을 만들지만 Label과 같이 사용하면 label로 이름이 지정된 더 상위의 반복문도 바로 빠져나갈 수 있습니다. "continue@label1"도 동일한 개념으로 동작합니다.
예제
lambda 함수에서도 label과 같이 사용 되는 return을 유용하게 사용할 수 있는데 이와 관련된 내용은 lambda 함수 부분에 포함되어 있습니다.
'코틀린( Kotlin )' 카테고리의 다른 글
코틀린 1-6 기본 - operator(연산자) - null 안전 처리 연산자 (0) | 2020.04.02 |
---|---|
코틀린 1-5 기본 - 접근 제한자, 예외처리 (0) | 2020.04.01 |
코틀린 1-3 기본 - 함수 (0) | 2020.04.01 |
코틀린 1-2 기본 - 형 변환, 변수, 상수 (0) | 2020.04.01 |
코틀린 1-1 기본 - 언어의 특징, 기본 형(Type) (0) | 2020.04.01 |