본문 바로가기

Java2

[Java] List 복사 방법과 불변 리스트, unmodifiableList와 copyOf 자바에서 불변이라는 개념은 상당히 중요하다. 외부에서 해당 객체나 리스트에 접근하여 데이터를 수정, 삭제하도록 열어둘 경우 예상치 못한 오류가 발생할 수 있기 때문이다. 자동차의 이름을 List로 가지고 있는 Cars 클래스가 있다고 하자. Cars cars = new Cars("capy1","capy2","capy3"); List prevCars = cars.getNames(); prevCars.add("newCapy"); List nextCars = cars.getNames(); Cars 객체를 생성하고 이름의 목록을 List로 가져온 뒤에, 반환받은 prevCars에 새로운 이름을 추가하였다. 반환받은 prevCars 리스트와 cars 객체가 가지고 있는 리스트가 서로 연결되어 있지 않다면 cars.. 2024. 3. 4.
[Java] Random vs ThreadLocalRandom 자바에서 제공하는 랜덤 클래스에는 Random과 ThreadLocalRandom이 있다. 두 클래스의 작동 방식과 어떤 차이점이 있는지 비교해 보겠다. Random 난수 생성 방법 Random 내부의 코드를 살펴보면 seed를 어떻게 생성하는지 살펴볼 수 있다. public Random() { this(seedUniquifier() ^ System.nanoTime()); } Random은 사용자가 시드값을 인자로 넘기지 않는다면 nanotime, 즉 jvm의 고해상도 시간 측정 장치의 값을 기준으로 난수를 생성한다. seed 값을 변하지 않는 고정값으로 정한다면 동일한 패턴의 난수를 생성하기 때문에 계속 변하는 값인 시간을 seed로 사용한다. 멀티 스레드 환경에서의 문제점 Random은 하나의 인스턴스.. 2024. 2. 23.