개발하는 두더지

[Effective Java 규칙25] 배열대신 리스트를 써라 본문

Java,Android

[Effective Java 규칙25] 배열대신 리스트를 써라

덜지 2018. 10. 4. 16:53

[Effective Java 규칙25] 배열대신 리스트를 써라

Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다.


제네릭과 배열이 따르는 자료형 규칙은 서로 많이 다르다. 배열은 공변 자료형이자 실체화 가능 자료형이다. 제네릭은 불변 자료형이며, 실행시간에 형인자의 정보는 삭제된다. 따라서 배열은 컴파일 시간에 형 안전성을 보장하지 못하며, 제네릭은 컴파일 시점에 형 안전성을 확보하고 실행 시 형인자의 정보가 삭제된다. 그래서 제네릭을 사용하지 않고 작성된 레거시 코드와도 문제없이 연동이 되는 것이다.


배열은 런타임시 타입이 그대로이다.

Object[] obj = new Object[0]


제네릭은 런타임시 제네릭 정보가 삭제된다

List<String> list = new ArrayList<String>();

-> List list = new ArrayList();


즉, 컴파일과 런타임때 동일한 타입을 나타내는 것을 실체화 가능 자료형이라하고, 컴파일과 런타임때 타입이 다른 것을 실체화 불가능 자료형이라 한다.


이런 차이점때문에 제네릭과 배열은 섞어쓰는 것이 어렵다. 일반적으로 리스트 + 제네릭은 많이 쓰는 것을 봤는데 배열 + 제네릭 조합은 기억에 없을정도로 예제를 보지 못하였다.

Comments