공변인 배열과 불공변인 리스트
컴파일타임 타입 안정성에 대한 관점으로 배열보다 리스트를 사용해야한다고 하지만 조금 의문인 점이 있었습니다.
배열과 리스트를 고민하는 상황이면 어떤 자료구조를 쓸지 고민하고 있는 상황일텐데
그렇다면 타입 안정성과 별개로 어떤 요구사항을 구현하는지, 어디에 쓰는 프로그램인지에 따라서 틀린 얘기가 될 수도 있지않나 생각했습니다.
예를들어 들어갈 데이터가 추가되거나 변하지 않고 커다란 크기를 고정해서 가지면서 조회가 엄청나게 빈번하게 필요한 데이터가 있다면 (캐시 쪽이나 암복호화 같은 곳에 이런 경우가 꽤 있지 않을지) 배열말고 리스트를 쓸 이유가 없을 것 같습니다.
https://ongveloper.tistory.com/403
배열은 리스트와 달리 실제 메모리 주소가 연속적으로 할당되어 캐시 힛 비율이 높고 인덱스를 가지고 있어서 이런 관점에서는 배열을 포기 할 수 없을 것 같습니다. 가장 많이 사용하는 어레이리스트도 이런 배열의 장점을 가지려고 배열로 구현 한 것으로 알고있습니다.
물론 이 챕터가 타입 안정에 중점을 둔 이야기고 이렇게까지 성능이 중요하다면 자바를 안쓰겠지만.. 이런 얘기가 없어서 아쉬웠습니다.
(저는 아니지만! 요즘 많이하시는듯한 코테에서도 복잡한 로직으로 대량 데이터 처리하는데 리스트 쓰면 테스트 케이스 후반에 각잡고나오는 데이터들 통과 못해서 그냥 죄다 스태틱 배열로 초기화해버리고 컴파일시간에 떠넘겨서 실행시간 줄이고 돌려야합니다)
공변인 배열과 불공변인 리스트 컴파일타임 타입 안정성에 대한 관점으로 배열보다 리스트를 사용해야한다고 하지만 조금 의문인 점이 있었습니다. 배열과 리스트를 고민하는 상황이면 어떤 자료구조를 쓸지 고민하고 있는 상황일텐데 그렇다면 타입 안정성과 별개로 어떤 요구사항을 구현하는지, 어디에 쓰는 프로그램인지에 따라서 틀린 얘기가 될 수도 있지않나 생각했습니다. 예를들어 들어갈 데이터가 추가되거나 변하지 않고 커다란 크기를 고정해서 가지면서 조회가 엄청나게 빈번하게 필요한 데이터가 있다면 (캐시 쪽이나 암복호화 같은 곳에 이런 경우가 꽤 있지 않을지) 배열말고 리스트를 쓸 이유가 없을 것 같습니다. https://ongveloper.tistory.com/403 배열은 리스트와 달리 실제 메모리 주소가 연속적으로 할당되어 캐시 힛 비율이 높고 인덱스를 가지고 있어서 이런 관점에서는 배열을 포기 할 수 없을 것 같습니다. 가장 많이 사용하는 어레이리스트도 이런 배열의 장점을 가지려고 배열로 구현 한 것으로 알고있습니다.
물론 이 챕터가 타입 안정에 중점을 둔 이야기고 이렇게까지 성능이 중요하다면 자바를 안쓰겠지만.. 이런 얘기가 없어서 아쉬웠습니다.
(저는 아니지만! 요즘 많이하시는듯한 코테에서도 복잡한 로직으로 대량 데이터 처리하는데 리스트 쓰면 테스트 케이스 후반에 각잡고나오는 데이터들 통과 못해서 그냥 죄다 스태틱 배열로 초기화해버리고 컴파일시간에 떠넘겨서 실행시간 줄이고 돌려야합니다)