본문 바로가기

제네릭4

[Java] Boxing을 지양하자.(feat primitive type vs reference type) 모던 자바 인 액션을 공부하는 요즘 왜 자바에 더 집중하지 않았는가에 대한 자아성찰을 많이 하는 중이다. 흔히 말하는 Boxing, unBoxing은 다들 알고있다고 생각한다. 간단하게 말해서, Wrapper Class를 사용해서 primitive Type을 reference Type으로 변환하는 과정을 박싱(Boxing), 이 반대의 과정을 언박싱(unBoxing)이라고 한다. 자바에서는 오토박싱 기능을 제공해주기도한다. 그렇다면 왜 Boxing을 지양해야할까? 결론부터 말하자면, 비용이 추가적으로 발생 한다. 박싱한 값(Wrapper class)은 reference Type이다. 고로 Heap 영역에 저장된다. 그렇기 때문에, primitive Type을 가져오려고할 때도 Wrpper class로 인.. 2021. 4. 8.
[Effective Java] 28. 배열보다는 리스트를 사용해라 배열과 제네릭 타입의 차이 배열은 공변(covariant)이다. 예를들어 sub가 super의 하위 타입이라면 배열 sub[]는 배열 super[]의 하위 타입이 된다고 할 수 있다. 즉, 공변이란 함께 변한다는 뜻이다. 반대로 제네릭은 불공변(invariant)이다. List 는 List 의 하위 타입도 아니고 상위 타입도 아니다. 예제를 확인해보자. Object[] objectArray = new Long[1]; //ArrayStoreException 발생 => Long 타입에 String을 넣을 수 없음. objectArray[0] = "루피"; //컴파일시점 에러 List objectList = new ArrayList(); objectList.add("루피"); 제네릭과 다르게 배열은 실체화(r.. 2019. 7. 17.
자바 제네릭 완전정복 다양한 제네릭 표현소스코드를 보다가 타입 변수에 모든 타입을 사용할 수 있음 2019. 3. 21.
ArrayList와 LinkedList 비교 + 제네릭 배열에서 자주 사용하는 ArrayList와 LinkedList가 헷갈려서 정리하려한다. 자바에서는 배열 사용시 초기 길이를 지정해야 하며 동적으로 배열의 길이를 변경할 수 없다. 먼저, ArrayList는 내부적으로 데이터를 배열에서 관리하며 추가, 삭제를 위해 임시 배열을 생성해 데이터를 복사한다. 따라서 대량의 자료를 추가, 삭제 하기 위해서는 데이터 복사가 많이 일어나 성능저하 우려가 있다. 각 데이터는 인덱스를 가지고 있기 때문에 한번에 참조가 가능해 내가 해당 인덱스를 알고 있다면 검색에는 좋다. LinkedList는 데이터를 저장하는 각 노드들이 링크로 앞뒤로 연결 되어있는 형태이다. 데이터 추가, 삭제시 노드의 연결을 끊고 원하는 부분에 추가, 삭제가 가능하기 때문에 유리하지만, 검색시에는 .. 2018. 2. 5.