Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스택 자바 코드
- 멤버변수
- 객체
- 클래스
- 안드로이드 os 구조
- rxjava disposable
- 안드로이드 레트로핏 crud
- 안드로이드 유닛테스트란
- 자바 다형성
- rxjava cold observable
- 서비스 vs 쓰레드
- 안드로이드 유닛 테스트
- 플러터 설치 2022
- 서비스 쓰레드 차이
- 스택 큐 차이
- 2022 플러터 안드로이드 스튜디오
- rxjava hot observable
- jvm 작동 원리
- ANR이란
- jvm이란
- Rxjava Observable
- android retrofit login
- 큐 자바 코드
- 안드로이드 유닛 테스트 예시
- 2022 플러터 설치
- 안드로이드 라이선스 종류
- 안드로이드 레트로핏 사용법
- 안드로이드 라이선스
- ar vr 차이
- android ar 개발
Archives
- Today
- Total
나만을 위한 블로그
[Kotlin] is 연산자와 as 연산자의 차이 본문
728x90
반응형
코틀린을 공부하다 보면 이따금 is와 as 연산자를 볼 수 있다.
뭔지 몰라서 검색해보니 is와 as 연산자는 같이 설명되는 경우가 제법 있었다.
그래서 공부한 내용을 기록할 겸 포스팅으로 작성하게 되었다.
먼저 is와 as 각각의 사전적 정의는 아래와 같다.
is : be의 현재 시제의 3인칭 단수
be : 있다, 존재하다, 만들다
as : ~처럼(같이) / (자격, 기능 등이) ~로(서) / ~만큼 ~한
is는 자바에서 상속을 공부할 때 is-a 관계(~는 ~이다)를 공부하면서 본 적이 있다. Person이 Animal을 상속한다면 Person은 Animal이다 식으로 하위 클래스는 상위 클래스의 한 종류가 되야 한다는 내용으로, 강한 뉘앙스를 가진 단어라고 생각한다.
as는 정의의 뉘앙스로 봤을 때 is보다는 덜 강한 뉘앙스라고 생각한다. 그래서 굳이 강도를 따지자면 is > as라고 생각한다.
코틀린 공식 홈페이지에선 저것들을 어떻게 설명하는지 확인해봤다.
https://kotlinlang.org/docs/keyword-reference.html#hard-keywords
is : 값에 특정 유형(자료형)이 있는지 확인, 같은 목적을 위한 when 문에서 사용된다
as : 타입 캐스트에 사용되거나 import에 대한 별칭을 지정할 때 사용된다
뒤에 붙은 부가적인 내용들은 그렇다치고 공식 홈페이지에서 확인한 건 이 둘이 자료형의 캐스팅 시 사용되는 연산자라는 것이다.
좀 더 자세히 확인해 보니 as에 대해선 아래와 같이 써 놨다.
일반적으로 캐스트가 불가능한 경우 캐스트 연산자는 예외를 발생시킨다. 따라서 안전하지 않다고 한다. 코틀린의 안전하지 않은 캐스트는 중위 연산자 as에 의해 수행된다. 예외를 방지하려면 as?와 같이 사용한다. 실패 시 null을 리턴한다.
is에 대해선 아래와 같이 써 놨다.
객체가 주어진 유형을 준수하는지 런타임 검사를 수행하려면 is 연산자 또는 !is를 사용해라. 대부분의 경우 컴파일러는 변경 불가능한 값에 대한 is-check 및 명시적 캐스트를 추적하고 필요할 때 자동으로 (안전한) 캐스트를 삽입하므로 코틀린에서 명시적 캐스트 연산자를 사용할 필요가 없다.
위의 내용만으로는 이해하기가 어렵다. 그래서 스택오버플로우를 찾아봤더니 아래와 같은 답변이 있었다.
"is X"는 "instanceof X"와 같은 의미고 "foo as X"는 "((X) foo)와 같은 의미다
instanceof는 객체의 타입을 확인할 때 쓰는데 형변환 가능 여부를 T/F로 알려주는 연산자다.
위 설명을 보고 is와 as의 차이가 어떤 것인지 대충은 알 것 같다.
반응형
'개인 공부 > Kotlin' 카테고리의 다른 글
[Kotlin] companion object(동반 객체)란? (0) | 2022.01.31 |
---|---|
[Kotlin] 생성자 정리 (0) | 2022.01.30 |
[Kotlin] 확장 함수(Extension Functions)란? (0) | 2020.11.01 |
[Kotlin] 안드로이드에서 코틀린으로 쉐어드 프리퍼런스 사용하는 법 (0) | 2020.10.25 |
[Kotlin] 코틀린의 컬렉션(List, Map, Set) (0) | 2020.10.17 |
Comments