Collections.shuffle() 불변객체

2023. 11. 8. 10:17우아한테크코스/프리코스

아래처럼, LottoOneSet객체를 생성할때, 

generateRandomNumbers()에서 Randoms.pickUniqueNumbersInRange를 통해 1부터 45까지의 숫자 6개를 무작위로 생성한 후, 이를 토대로 정렬하려고 하였다. 

그러나 ApplicationTest에서 아래와 같은 오류가 났음을 확인할 수 있었다. 

ImmutableCollections라고 하는데.. 난 이걸 쓴적이 없는데 뭐지?

 

혹시나 싶어 Randoms.pickUniqueNumbersInRange때문인가 싶어. Randoms클래스를 확인해보았다.

Randoms클래스는 Collections.shuffle메소드를 통해 결과를 반환함을 확인할 수 있었다.

Collections.shuffle()메소드는 자바의 불변객체로, 요소를 무작위로 생성한 후, 그 객체의 리스트는 절대로 바꿀 수 없다는 것이다. 

 

따라서, 코드를 아래처럼 수정하였다. 새로운 리스트를 생성하여, 그 리스트를 토대로, 다시 정렬하도록 반환하였더니 에러는 수정할 수 있었다.

 

우아한 테크코스 최종코테 결과도 나오지 않았지만, 

최종코테를 미리 대비하여, Randoms.pickUniqueNumbersInRange는 Collections.shuffle()를 통해 불변객체를 반환함을 잊지 말자.