본문 바로가기
개발

TIL: 20231207

by kks950115 2023. 12. 7.
728x90

코틀린을 배우면서 느끼는 거지만 이 언어는 안전성을 최우선으로 두고 있는 것 같다.

 var orderList = ArrayList<Drink>()
 
 var coffee= Drink()	
 var tea= Drink()  
 
orderList += coffee  // 들어간다
orderList += tea  // 들어간다

var cat = Animal()

orderList += cat  // 안들어간다

 

하다보니 다른 타입의 객체를 한 리스트에 넣게 되었는데 컴파일에서 빨간 색으로 안된다고 표시를 해준다. 원시타입과 스트링 같은 경우는 같은 리스트에 넣을려면 컴패러블이라는 타입으로 둘 다 넣을 수 있어서 될 줄 알았는데 안되더라.... 

 

왜 안되나 검색해보았다.

공변성과 반공변성

모든 타입을 넣을 수 있는 제너릭타입을 찾다가 나온 내용이다. 우선 이게 답인지도 모르겠다. 아예 다른 이유때문일 수도 있고... 일단 해당 문제는 공통을 뽑아 부모클래스로 만들고 부모클래스를 리스트타입으로 바꾼 다음에 넣으니 잘 작동했다.

 

얘기가 다른 데로 빠져버렸다. 파고 들자면 한없이 복잡하지만... 내가 이해한 바로는 안전성때문이다.

한 리스트 안에 다른 타입의 객체가 있을 경우 오류가 날 가능성이 매우 크니 사전에 차단하는 것이다. 

 

728x90
반응형

댓글