Language/Java

Arrays class's asList method

Kim Jinung 2023. 5. 20. 18:10

Arrays

ps를 하다보면 asList 메서드를 사용할 일이 꽤 잦다. 그런데 내부 구현이 어떻게 되어있는 걸까 뜯어본 적은 없다. 막연히 인자를 던져주면 리스트를 던져주는구나 싶었다. 그런데 가끔은 ArrayList로 래핑하기도 하고, 안 할때도 있다. 블랙박스는 위험하다. 

asList method

Arrays 클래스의 asList메서드는 인자를 받아서 리스트 인스턴스를 반환한다. 나는 당연히 반환 객체의 타입이 ArrayList가 아닐까 생각했다. 그런데 값을 추가하면 UnsupportedOperationException이 발생한다.

내부 코드를 보면

java.Arrays.asList

반환 타입을 ArrayList로 준다. 

???

 

Arrays.ArrayList type class

java.Arrays.ArrayList

컬렉션 프레임워크의 ArrayList가 아니라, Arrays에서 별도로 정의하고 있는 ArrayList가 존재한다. 해당 List는 고정된 사이즈의 List를 반환한다. 따라서 add, remove등의 메서드를 사용할 수 없다.


Conclusion

asList 메서드를 사용해서 리스트를 생성할 때, 가변 리스트로 생성하고 싶다면 아래 같은 코드로 래핑 해주어야 한다.

  1. Arrays.asList 메서드는 클래스 내에서 별도로 정의하고 있는 정적 타입 ArrayList를 사용해서 리스트를 생성한다.
  2. Arrays.ArrayList는 고정된 사이즈의 리스트를 생성한다. 그러므로 add, remove 등의 인자를 조작하기 위한 메서드는 제공하지 않는다.