본문 바로가기

Programming/Kotlin

6. 흐름 제어 구문과 연산자

6.1 조건문

 6.1.1 if 표현식

   - 일반적인 if 문과 차이점이 있는데 바로 코틀린에서 if 문은 표현식(expression)이라는 점이다.

   - if 문을 표현식으로 사용한다는 것은 if문에 의해 특정 값이 발생한다는 의미이다.

   - if 문을 표현식으로 사용할 때 else 문이 꼭 있어야 한다. 생략하면 컴파일 에러가 발생한다.

   - if 문에 중괄호{}를 명시하여 여러 줄로 작성할 때 if 표현식으로 발생하는 데이터는 맨 마지막에 작성한다.

   * 표현식 : 변수, 상수, 연산자, 함수로 구성되어 무언가 값을 만드는 문장을 의미한다.

   * 구문(문장) : 단어나 기호의 조합으로 무언가가 실행되도록 명령을 지시하는 문장을 의미한다.

 

 6.1.2 when 표현식

   - switch-case 구문과 비슷하지만, 기능이 더 많아 다채롭게 이용할 수 있다.

   - when에서는 정수 이외에도 다양한 타입의 데이터를 지정할 수 있으며, 아예 타입 자체를 지정할 수도 있다.

   - if 문과 동일하게 when도 코틀린에서는 표현식이다.

   - 분기 조건을 명시할 때 콤마(,)를 이용하여 여러 값을 한꺼번에 표현할 수 있으며, 분기 조건을 표현식으로 작성할

     수도 있다. ex) 10, 20 -> println("10 or 20") // some() -> ("50") // 30 + 30 -> println("60")

   - 특정 범위를 분기 조건으로 명시할 수도 있다. ex) in 1..10 -> println("1 <= data <= 10")

   - 분기 조건에 in을 이용하는 방법은 숫자 범위 뿐만 아니라 집합 데이터에도 사용한다.

     ex) val list = listOf("hello","world","han") / when(data){ in list -> println("data in list") }

   - 하나의 when에 분기 조건을 정수, 문자열 등 서로 다른 타입의 데이터로 지정하거나, 아니면 Int, String 등으로

     데이터 자체를 지정할 수 있다.

   - 이렇게 여려 타입으로 분기하려면 when에 지정하는 인수는 Any 타입이어야 한다.

   - when을 if - else 대체용으로 사용 가능하다. when에 인수를 전달하지 않아도 된다.

   - if 문과 마찬가지로 표현식으로 이용 가능하다.(if 문 표현식 쓸 때와 같이 else, 마지막 문장 반환 주의)

 

6.2 반복문

 6.2.1 for 반복문(in, indices)

   - 몇부터 몇까지 특정 범위를 표현할 때 숫자 사이에 점 두 개(..)를 이용한다. ex) for(i in 1..10)

   - 컬렉션 타입의 객체에 포함된 데이터 개수만큼 for문을 반복하여 in 앞의 변수에 대입한다.for(str in list)

   - 컬렉션 타입의 인덱스 값 이용. ex) for(i in list.indices)

   - 컬렉션 타입의 객체에 저장된 데이터를 함께 얻고 싶을 때 withIndex() 함수를 사용한다.

     ex) for((index, value) in list.withIndex())

   - 그외 다양한 for문을 사용할 수 있디. ex) for(x in 1 until 11 step2), for(i in 10 downTo 1)

 

 6.2.2 while 반복문

   - 다른 언어와 비교해서 특이한 점은 없다

 

 6.2.3 break와 continue 문, 그리고 라벨

   - 라벨은 개발자가 특정 위치를 개발자 마음대로 이름을 정하고 continue나 break문에서 이 이름으로 지정한

     반복문을 벗어나게 할 수 있습니다. 라벨 지정 : aaa@ / break(continue)@aaa

 

6.3 연산자

 6.3.1 대입 연산자(=)

 6.3.2 산술 연산자

 6.3.3 전개 연산자(*)

   - 배열값을 나열할 때 사용한다(*Array)

   - array를 list에 포함시킬 때(asList(1,2,*array))

   - 사용자 정의 함수에 사용할 때 : vararg로 선언한 매개변수가 있는 함수는 전개 연산자로 호출할 수 있다.

   - list에 전개 연산자(*)를 사용하고 싶을 때 list를 array로 변경하여 사용: *list.toTypedArray()

 6.3.4 복합 대입 연산자(+=, -=)

 6.3.5 증감 연산자(==, --)

 6.3.6 논리 연산자(&&, ||, !) -> Short Circuit Evaluation 적용

 6.3.7 일치 연산자(==, !=, ===, !==)

   - 일반 클래스의 객체는 ==, === 연산의 차이가 없다.

   - 기초 데이터 타입의 변수 선언 시 래퍼 클래스를 직접 이용하여 생성하면 객체가 생성되므로 ==은 값을, ===은

     객체를 대상으로 비교한다.

   - 기초 데이터 타입의 변수 선언시 래퍼 클래스 없이 Int, Double 등을 이용하면 ==, === 모두 값을 대상으로 비교

   - ? 기초 데이터 변수는 내부적으로 박싱되어 객체가 만들어진다.

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

 6.3.9 범위 연산자(..)

 6.3.10 Null 안전 관련 연산자(?, ?:, ?., !!)

   - 이후에 다룸

 

6.4 연산자 재정의

 6.4.1 연산자 재정의 방법

 6.4.2 연산자 함수

 

※ 코틀린에서는 자바와 같은 표현식으로 for 문을 작성할 수 없다 -> in을 이용해 작성

※ 코틀린에서는 &, | 논리 연산자는 제공하지 않는다

※ 코틀린에서는 모든 데이터가 객체이기 때문에 비트 연산자가 없다 -> 비트 함수를 이용(and(bits), shl(bits) 등)

※ 코틀린에서는 삼항 연산자를 제공하지 않는다 -> if 문이 표현식이기 때문에 if 문으로 대체

'Programming > Kotlin' 카테고리의 다른 글

8. 프로퍼티  (0) 2020.01.17
7. 클래스  (0) 2020.01.16
5. 데이터 타입  (0) 2020.01.13
4. 변수와 함수  (0) 2020.01.10
3. 코틀린 기본 작성법  (0) 2020.01.08