hyeals study
코틀린 기초(8) - 스마트캐스트 & if를 when으로 본문
* 코틀린의 if 식은 값을 만들어내기 때문에 자바와 달리 3항 연산자가 따로 없음
일단 간단한 덧셈 기능을 하는 함수를 작성해보면
[덧셈 기능을 하는 함수]
- Expr 인터페이스: 단지 여러 타입의 객체를 아우르는 공통 타입 역할만 수행하는 인터페이스
- 인터페이스를 지정하기 위해서는 콜론(:)뒤에 인터페이스 이름을 작성하면 됨
- Num 클래스: Expr 인터페이스를 구현하고, value라는 프로퍼티만 존재하는 클래스
- Sum 클래스: Expr 인터페이스를 구현하고, Expr 타입의 객체를 인자로 받는 클래스
* eval 함수
- is: 변수 타입 검사 (자바의 instanceof와 비슷), 코틀린에서는 is로 변수로 타입을 검사하고 컴파일러가 알아서 원하는 타입으로 캐스팅을 해줌. 이를 스마트 캐스트(smart cast)라고 함.
- as: 타입 변환
* 스마트 캐스트
- 예를 들어 여기에서는 'e is Num'을 수행하고 나면 컴파일러가 알아서 e의 타입을 Num으로 해석함.
- 따라서 사실 'val n = e as Num'은 불필요함. eval(e.right)+eval(e.left)도 마찬가지로 스마트 캐스트가 쓰였음.
위의 코드를 코틀린의 if식 특성을 이용하면 좀 더 간단하게 작성할 수 있음.
[if식 특성을 이용한 예시]
- if 분기에 식이 하나밖에 없기 때문에 중괄호 생략 가능.
- 만약 if 분기에 블록을 사용한다면 블록의 마지막 식이 그 분기의 결과 값임. (여기서는 e.value나 eval(e.right)+eval(e.left))
- 여기에서도 스마트 캐스트가 쓰임
하지만 여기서 끝이 아니라 이 식을 when으로 구현할 수 있음.
[when을 사용한 예시]
위와 같이 간단하게 코드를 작성할 수 있음.
여기에서도 스마트 캐스트가 쓰였음.
본 게시물은 "Kotlin IN ACTION"을 참고함.
'코틀린' 카테고리의 다른 글
코틀린 기초(10) - 이터레이션: while & for (0) | 2020.02.04 |
---|---|
코틀린 기초(9) - 분기에서 블록 사용 (0) | 2020.02.04 |
코틀린 기초(7) - 제어 구조 [when] (0) | 2020.02.04 |
코틀린 기초(6)- 제어 구조 [enum] (0) | 2020.02.03 |
코틀린 기초(5)-클래스 & 프로퍼티 (0) | 2020.02.02 |
Comments