코딩못하는사람

2. 코틀린에서 코드를 제어하는 방법 본문

Kotlin/(강의)자바 개발자를 위한 코틀린 입문 정리

2. 코틀린에서 코드를 제어하는 방법

공부절대안함 2023. 1. 8. 16:12

Lec 05 코틀린에서 조건문을 다루는 방법

1. if문

Java에서 if-else는 Statement이지만, Kotlin에서는 Expression입니다

Statement : 프로그램의 문장, 하나의 값으로 도출되지 않는다

Expression : 하나의 값으로 도출되는 문장

statement중에 하나의 값으로 도출되는 문장들이 Expression (포함관계)

int score = 30 + 40; -> Expression이면서 statement

String grade = if 문 ~~~~ 에러 -> if 문을 하나의 값으로 취급하지 않기 때문에 (statement)

 

자바에서는 이러한 경우를 위해 삼항연산자를 제공 Experssion이면서 statement 

코틀린에서는 Experssion으로 취급한다. 따라서 if-else구문을 전체를 return 할 수 있다 (따라서 3항연산자가 필요없다)

 

TIP if 문에서 범위 포함에 대해 취급할 때

if (0<= score && score <= 100) 보다 if ( score in 0..100)이 코틀린스럽다.

 

- if / if – else / if - else if – else 모두 Java와 문법이 동일하다.

- 단 Kotlin에서는 Expression으로 취급된다.

- 때문에 Kotlin에서는 삼항 연산자가 없다

 

3. switch와 when

swith가 사라지고 when 문으로 대체, default대신 else를 사용. 좀 더 다양한 조건을 가지고 분기를 칠 수 있음 ex) in

when (값) {

    조건부 -> 어떠한 구문

    조건부 -> 어떠한 구문

    else -> 어떠한 구문

}

조건부에는 어떠한 expression이라도 들어갈 수 있다.

활용

if , instanceof 등을 활용했지만, when - is 조합으로 활용도 변경해서 사용 가능. 

 

when(값)에 값이 없을 수 있다. when에 값이 없다면 조건 자체를 살펴보고, 값이 있다면 값을 살핀다.

 

자바의 switch case보다 훨씬 유연하다.

when은 Enum Class or Sealed Class와 함께 사용할 경우 더욱더 진가를 발휘한다.

 

-Java의 switch는 Kotlin에서 when으로 대체되었고, when은 더 강력한 기능을 갖는다.

 

반복문을 다루는 방법

 

1. for-each문

for (number : numbers) -> for (number in numbers) 

자바에서는 :을 썻다면 코틀린에서는 in을 쓴다.

in 뒤에는 iterable이 구현된 타입이라면 모두 들어갈 수 있다.

for each 문에서 Java는 : Kotlin은 in 을 사용한다

 

 

2. 전통적인 for문

내려가는 경우
2칸씩 올라가는 경우(1,3,5)

.. 은 범위를 나타내는 연산자

코틀린에서 전통적인 for문은 등차수열을 사용한다.

- 전통적인 for문에서 Kotlin은 등차수열과 in을 사용한다

3. Progression과 Range

downTo, step 도 함수이다

4. while 문

while문과 do while문은 동일하다

 

코틀린에서 예외를 다루는 방법

1. try catch finally 구문

문법적으로 동일하지만, return을 앞에 붙혀 Expression처럼 사용할 수 있음.

 

- try catch finally 구문은 문법적으로 완전히 동일하다.

- Kotlin에서는 try catch가 expression이다

 

2. Checked Exception과 Unchecked Exception

Kotlin에서는 Checked Exception과 Uchecked Exception을 구분하지 않는다. 모두 Uncehcekd Exception 

따라서 Kotlin에서는 throws 구문이 없다 (ex IoException 전파가 없음)

 

- Kotlin에서 모든 예외는 Unchecked Exception이다

 

3. try with resources

Kotlin에는 try with resources 구문이 없다.

대신 use 라는 inline 확장함수를 사용

- Kotlin에서는 try with resources 구문이 없다. 대신 코틀린의 언어적 특징을 활용해 close를 호출해준다.

 

코틀린에서 함수를 다루는 방법

접근지시어 fun 함수이름(파라미터): 반환타입 { }

 

1. 함수 선언 문법

- 접근 지시어, public은 생략 가능하다

- 함수의 매개변수, 매개변수명: 타입

- 함수의 반환 타입 (Unit인 경우 생략 가능)

- if – else 는 expression

- 함수가 하나의 결과값이면 block 대신 = 사용 가능

- 한 줄로 변경 가능 ( =을 사용하는 경우 반환 타입 생략 가능 )

+ block { } 을 사용하는 경우에는 반환 타입이 Unit이 아니면, 명시적으로 작성해줘야 함.

- 함수는 클래스 안에 있을 수도, 파일 최상단에 있을 수도 있습니다. 또한, 한 파일 안에 여러 함수들이 있을 수도 있다.

 

- 함수의 문법은 Java와 다르다!

- body가 하나의 값으로 간주되는 경우 block을 없앨 수도 있고, block이 없다면 반환 타입을 없앨 수도 있다

 

2. default parameter

userNewLine에 true가 default고, num은 3이 default인 예시

기본값을 사용하는 경우가 많아서 오버로딩 기능을 많이 사용할 경우가 있다.

Java의 오버로딩(OverLoading) 활용하면 되지만,  여러가지 메소드를 만들어야 한다는 단점은 있음.

kotlin default parameter 예시

밖에서 파라미터를 넣어주지 않으면 기본값을 사용하게 해준다.

(물론 코틀린에도 Java와 동일하게 오버로드 기능은 있다)

 

- 함수 파라미터에 기본값을 설정해줄 수 있다

 

3. named argument (parameter)

매개변수 이름을 통해 직접 지정 지정되지 않은 매개변수는 기본값 사용

kotlin default parameter 예시 코드 활용

(repeat을 호출할 때, num은 3을 그대로 쓰고 useNewLine은 false를 쓰고 싶은 경우의 예시)

 

- builder를 직접 만들지 않고 builder의 장점을 가지게 된다

 

- Kotlin에서 Java 함수를 가져다 사용할 때는 named argument를 사용할 수 없다(코드가 바이트코드로 변환되어있을 때 파라미터 정보를 가지고 보존하고 있지  않기 때문에)

 

-함수를 호출할때 특정 파라미터를 지정해 넣어줄 수 있다

 

4. 같은 타입의 여러 파라미터 받기 (가변인자)

자바에서는 타입... (String...)을 쓰면 가변인자 사용할 수 있었음.

코틀린에서는 ...을 타입 뒤에 쓰는 대신 제일 앞에 vararg를 적어주면됨.

- ',' 콤마로 구분해서 인자 넣기

- 배열 사용시 배열을 바로 넣는대신 스프레드 연산자 (*)를 붙여주어야 한다

 

- 가변인자에는 vararg 키워드를 사용하며, 가변인자 함수를 배열과 호출할 때는 * 를 붙여주어야 한다

Comments