관리 메뉴

hyeals study

코틀린 기초(8) - 스마트캐스트 & if를 when으로 본문

코틀린

코틀린 기초(8) - 스마트캐스트 & if를 when으로

hyeals 2020. 2. 4. 20:08

* 코틀린의 if 식은 값을 만들어내기 때문에 자바와 달리 3항 연산자가 따로 없음

 

일단 간단한 덧셈 기능을 하는 함수를 작성해보면

 

[덧셈 기능을 하는 함수]

 

덧셈기능을 하는 eval 함수 예시

  • Expr 인터페이스: 단지 여러 타입의 객체를 아우르는 공통 타입 역할만 수행하는 인터페이스
  • 인터페이스를 지정하기 위해서는 콜론(:)뒤에 인터페이스 이름을 작성하면 됨
  • Num 클래스: Expr 인터페이스를 구현하고, value라는 프로퍼티만 존재하는 클래스
  • Sum 클래스: Expr 인터페이스를 구현하고, Expr 타입의 객체를 인자로 받는 클래스

* eval 함수

  1. is: 변수 타입 검사 (자바의 instanceof와 비슷), 코틀린에서는 is로 변수로 타입을 검사하고 컴파일러가 알아서 원하는 타입으로 캐스팅을 해줌. 이를 스마트 캐스트(smart cast)라고 함.
  2. as: 타입 변환

* 스마트 캐스트

- 예를 들어 여기에서는 'e is Num'을 수행하고 나면 컴파일러가 알아서 e의 타입을 Num으로 해석함.  

- 따라서 사실 'val n = e as Num'은 불필요함. eval(e.right)+eval(e.left)도 마찬가지로 스마트 캐스트가 쓰였음.

출력 결과

 

위의 코드를 코틀린의 if식 특성을 이용하면 좀 더 간단하게 작성할 수 있음.


[if식 특성을 이용한 예시]

 

if식 특성을 이용한 eval 함수

  • if 분기에 식이 하나밖에 없기 때문에 중괄호 생략 가능.
  • 만약 if 분기에 블록을 사용한다면 블록의 마지막 식이 그 분기의 결과 값임. (여기서는 e.value나 eval(e.right)+eval(e.left)) 
  • 여기에서도 스마트 캐스트가 쓰임

하지만 여기서 끝이 아니라 이 식을 when으로 구현할 수 있음.


[when을 사용한 예시]

 

when 이용한 eval 예시

위와 같이 간단하게 코드를 작성할 수 있음.

 

여기에서도 스마트 캐스트가 쓰였음.

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

Comments