티스토리 뷰

옛날 옛적, Generics 도입 이전엔 List, Set, Map 같은 컬렉션에 특정 타입이고 나발이고

아무거나 집어넣고 멍 때리던 시절이 있었다

 

 

Java5부터 type-safety를 지원하려 구원자 Generics가 오셨다

raw type 을 쓰는 게 왜 문제인가? 당연 타입 안정성을 지원해주지 못하기 때문이다

Generics로 타입을 명시하지 않은 경우 기본적으로 컬렉션에 들어가는 요소를 Object로 간주한다

어떤 값을 넣든 Object 형태로 받아버리기 때문에 막상 꺼내서 쓰려고 할 때

Object로 사용할 것이 아니라면 원래 넣은 형태로 캐스팅을 해줘야 한다

1~2개 사용하고 개발자가 타입을 꿰차고 있는 경우엔 아무 상관없다만

조금 더 현실적으로 생각해보면 말 같지도 않은 상황이 펼쳐지는 것이다

 

정식 릴리즈는 아직이지만 jdk18의 세상이 왔다

Generics가 자바 세상에 등장한 지 18년이 되었고 IDE 가 raw type 사용하지 말라고 경고도 띄워준다

이런 세상에 raw-type으로 프로그래밍하는 사람은 없겠지 싶지만 놀랍게도 있다, 왜냐면 내가 그랬다

개발 병아리 이전 개발 달걀 시절에는 옛날 자바 프로그래머처럼 타입 안정성은 개나 주고 신나게 개발하던 시절이 있었다

이제는 제네릭에도 어느 정도 익숙해져 진행하는 프로젝트에 제네릭 인터페이스, 클래스, 메서드도 만들어 사용하고 있다

 

내가 좋아하는 배민 이사 김영한 님이 강의에서 자주 하시는 말씀이 있다

가장 좋은 에러는 컴파일 에러라는 것인데 그 이유는

런타임이 되어서야, 사용자가 눌렀을 때 터지는 에러는 시한폭탄 같은 것으로 미리 알기도 힘들고 대처하기도 힘들다

반면 컴파일 에러는 프로그램을 띄울 수 조차 없게 만들기 때문에 바로 조치 가능하다

단번에 어떤 문제인지 파악할 수 있고 IDE는 친절하게도 어디서 에러가 터지는지 화면 이동도 시켜준다

Generics는 타입에 관해 시한 폭탄 같은 문제를 예방해 준다는 점에서 의의가 있다

List<String>으로 제한을 걸고 만든 리스트에는 String 타입 외에 넣을 수 없으며 넣으려고 해 봤자 컴파일 에러로 잡힌다

 

요즘 프론트나 노드 기반 백엔드에서 typescript가 엄청난 인기를 끄는데 타입 안정성이 가장 큰 이유다

자바에서는 Generics로 야무지게 타입 안정성을 지킬 수 있으니 꼭 쓰자

더 깊이 들어가면 Generics의 공변, 반공변, 불변도 알아야 하고 재귀적 타입 한정, 와일드카드 어쩌고저쩌고 등

아주 다양하게 파볼 수 있는데 일단 간단한 방식으로라도 제네릭을 사용하면서 편리함을 느껴보자

미리 다 파봤자 일주일 후면 까먹는다

나도 이펙티브 자바를 3번 돌리면서 블로그 글을 쓰는 중인데도 볼 때마다 새로운 게 있다

원래 필요 주도 공부가 제일 효율 좋다, 필요할 때 배워서 바로 써먹자

 

간단하게 Generics의 공변, 불변을 이해하기 좋은 글이 있어 첨부한다

 

Java - Generics에서 Covariance, Contravariance 개념 이해하기

Generics에서 Invariance, Covariance, Contravariance의 개념을 설명하고 어떤 상황에서 이런 개념을 사용하는지 설명하려고 합니다. 이런 개념들은 클래스들의 상속관계에 따라서 Generics에서 객체의 관계를

codechacha.com

댓글
링크
글 보관함
«   2024/12   »
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 31
Total
Today
Yesterday