본문 바로가기
개발/자바 Java

[Java][기타 언어들] Instanceof 에 대해서

by 언제나초심. 2019. 3. 13.
반응형

개요

아... (이 멍청이... 멍청한 나...)


여태까지 instanceof 를 보면서 무슨 생각을 했는지 모르겠다.


instance of 라는 말 그대로 영어이다. 


A instance of B 라는 말이니까... (정확히는 A is an instance of B)


B 의 인스턴스 인 것이 맞나요? 라는 비교용 메서드 인 것이다. (왜 이렇게 단순히 생각하지 못했을까...)



인스턴스 란?

 인스턴스는 보통 생성된 것을 의미하다. 메모리를 차지하는 것 이라고 볼 수 있고, 클래스로 만든 것 이라고 볼 수 있다. (클래스가 아니어도 무언가로 생성된 것 이라는 의미로 볼 수 있다)



클래스 A 가 있다면, 



A a = new A() // Java 류
var a:A = A()  // Kotlin 류


와 같은 구문이 있으면 'a' 라는 친구가 생성된 녀석이다. 이 녀석을 우리의 친구 '인스턴스' 라고 부른다. 어원을 따져보면 '인스턴트 식품' 을 말할 때 instant (의미: 즉각, 즉시, 즉석의 / 사용은 대부분 형용사나 명사로 사용하는 듯) 와 비슷한 단어이다. 


딴지 걸기 : 어? instance 는 사전에 의미가 '예, 사례, 일례' 로 되어있는데요. 라고 묻는 영어 공부 잘하는 친구가 있을 수 있다. 그러면 내가 한 마디 해줄게. 그건 영어고, 이건 프로그래머 들이 쓰는 말이야! 우리 프로그래머들은 정상이 아니라고! (네. 우리들은 크레이지 합니다...)



그냥 '인스턴스 식품' 이라고 기억하자(타협...). 라면 클래스 (제조법, 상품명, 상품 브랜드명)가 있고, 우리가 끓여먹는, 방금 끓인 라면이 '인스턴스' 이다. 




내가12번째로끓인라면.instanceof(국밥)


이라고하면 어떨까... 이것은 false 이다. 누가봐도 false 이다. 




내가13번째로끓인라면.instanceof(밥)


은 어떨까? '내가13번째로끓인라면' 이라는 의미가 '식사'의 의미이고, 밥도 곁들어먹었다면...아 이것은 어찌될지는 모른다... (돌려봐야 알지... 흑... 눈물을 삼키며 디버깅...)




여담

 인스턴스 라는 의미보다, 인스턴트 라는 의미가 좀 더 와닿는 이유는 뭘까 생각을 해보았다. 우리나라에서는 인스턴트를 시간의 찰나 같은 의미보다는, 금방 만들어진 것의 의미로 잘 사용하기 때문에 느낌이 좀 더 와닿는 것 같다. instant 는 instance 와 비슷하지만, 조금 미묘하게 의미가 다른 듯 한데... 그것은 한국인으로 치면 '의미' 와 '뜻'의 차이가 뭔가요 하는 질문 같은것이라서... 깊게 들어가지는 말자...


대충 이해하면 된거지


깊게 파고드는 일은 '자연과학', '인문학' 분야에게 넘겨주고, 우리는 간단히 이해하고 넘어가자.




어떻게 쓰나요?

이것에 대한 것은 이 글에서는 적지 않겠다. 


instanceof 의 목적을 아는 것이 중요하고, 사용하는 방식은 각 언어의 메뉴얼을 살펴보면 되니까.


언어의 특징, 언어의 버전, 환경 (environment, JRE 등) 에 따른 차이 가 있을 수도 있다. (없길 바라지만)


일반적으로 생각하면, 라면 은 면의 일종이고, 면은 밀가루 음식이니.



내가끓인라면.instanceof(라면)
내가끓인라면.instanceof(면)
내가끓인라면.instanceof(밀가루음식)


이라고 하면, 셋 다 맞는 얘기인데.


클래스들이 만약에... 뒤죽박죽 된 상태라면... 음... (extends 에 implements 에, 상속에 상속에 상속에...)


혹은 어떤 언어는 '내가끓인라면.instanceof(라면)' 만 정답 이라고 할 지도 모르는 일이다. (설마...? 너무 깐깐한 것 아니오?)


의미와 목적을 알고, 사용법은 늘 '레퍼런스 doc' 을 끼고 살면 된다. 


말은 이렇게 했지만, 다음에 기회가 생기면 사용법은 다음에 적어야지



간단하게만 사용법 적으면,



if( 내가123번째만든건데요.insanceof(끓여도되는건가클래스) ) {
  내가123번째만든건데요.보글보글()
} else {
  에러 (이건 안 돼 저리가)
}




반응형