본문 바로가기
  • 개발공부 및 일상적인 내용을 작성하는 블로그 입니다.
부트캠프/후기 챌린지

[멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.15)

by 방구석 취준생 2026. 1. 22.

* 해당 글은 백엔드 자바 강의이후 회고 글입니다.

https://bootcamp.likelion.net/school/kdt-backendj-21th

 

백엔드 부트캠프 21기: Java : 멋사 부트캠프

실전 스킬 기반 백엔드 개발자 취업 완벽 대비 교육

bootcamp.likelion.net

 

자바 난수(Random) 생성 방법

1. Math.random();

double r = Math.random();
  • 0.0 <= r < 1.0
  • 가장 단순한 난수 생성 방식이다.
  • 내부적으로 Random 클래스를 사용한다.
  • 모든 메서드가 전부 다 static 메서드이다.
  • 정수 범위 사용시 아래와 같이 직접적인 계산이 필요하다.
int n = (int)(Math.random() * 6) + 1; // 1~6

 

2. java.util.Random

Random r = new Random();
int n = r.nextInt(6) + 1;   // 1~6
double d = r.nextDouble();

 

  • 시드(seed) 숫자 사용이 가능하다.
  • new 키워드를 통해 Random 객체를 생성해줄 필요가 있다.
  • 멀티 스레드 환경에서는 성능 저하가 일어날 수 있다.

3. java.util.concurrent.ThreadLocalRandom

ThreadLocalRandom r = ThreadLocalRandom.current();
int n = r.nextInt(1, 7);

int dice = ThreadLocalRandom.current().nextInt(1, 7);

 

  • min ~ max-1 과 같이 범위 지정이 가능하다.
  • 멀티 스레드 환경에 최적화 되어있다.
  • 객체 생성이 필요하지 않다.
  • 현재 실무에서 가장 많이 사용한다.

4. (jdk 17~) java.util.random.RandomGenerator

RandomGenerator r = RandomGenerator.getDefault();
int n = r.nextInt(1, 7);

 

  • java 17 이상에서부터 지원한다.
  • 다양한 RNG 알고리즘을 선택할 수 있다.
  • 가장 최신의 표준 인터페이스이다.

 

System.arraycopy()

System.arraycopy() 는 자바의 표준 라이브러리에 포함된 네이티브 메서드로 한 배열에서 다른 배열로 요소를 빠르게 복사하는 기능을 제공한다.

이 메서드는 jdk 1.0 부터 제공되어 왔으며 자바의 가장 기본적이면서도 강력한 배열 조작 도구 중 하나이다.

주요 특징

  1. 네이티브 메서드 : C/C++ 로 구현되어 JVM 의 최적화된 성능을 제공한다.
  2. 빠른 속도 : 자바의 다른 배열 복사 방법보다 일반적으로 더 빠르다.
  3. 메모리 효율성 : 새 배열을 생성하지 않고 기존 배열로 직접 복사 가능하다.
  4. 부분 복사 : 배열의 특정 부분만 선택적으로 복사 가능하다.
  5. 다양한 타입 지원 : 기본 데이터 타입과 객체 배열 모두 지원한다.

내부 동작 원리

System.arraycopy 는 Java Native Interface(JNI) 를 통해 구현된 네이티브 메서드이다.

내부적으로는 C/C++ 로 작성되어있어 JVM 이 직접 최적화된 메모리 복사 작업을 수행한다.

  1. 메모리 블록 복사
    1. 배열은 연속된 메모리 공간에 저장되므로 시스템 수준에서 효율적인 메모리 블록 복사 연산이 수행된다.
  2. 타입 검사
    1. JVM 은 복사 과정에서 배열 타입의 호환성을 검사한다. 호환되지 않는 타입의 배열 간 복사를 시도하면 ArrayStoreException 이 발생한다.
  3. 경계 검사
    1. 원본 및 대상 배열의 인덱스와 길이가 유효한지 검사한다. 배열 범위를 벗어나면 IndexOutOfBoundsException 이 발생한다.

 

매개 변수

System.arraycopy(src, srcPos, dest, destPos, length);
  • src : 원본 배열(복사할 데이터가 있는 배열)
  • srcPos : 원본 배열에서 복사를 시작할 인덱스
  • dest : 대상 배열(데이터가 복사될 배열)
  • destPos : 대상 배열에서 데이터를 저장할 시작 인덱스
  • length : 복사할 요소의 개수
public class ArrayCopyTest1 {
    public static void main(String[] args) {

        int[] src = { 10, 20, 30, 40, 50 };
        int[] dest = new int[5];

        System.arraycopy(src, 0, dest, 0, src.length);

        for (int i = 0; i < dest.length; i++) {
            System.out.print(dest[i] + " "); // 10 20 30 40 50
        }
    }
}

 

* 만약 객체 배열을 복사할 때는 참조만 복사되는 얕은 복사(Shallow copy) 가 발생한다.

즉, 원본 배열과 대상 배열의 각 요소는 동일한 객체를 참조한다.

 

각종 배열 복사 방법들과 성능 

방법

  1. System.arraycopy() : 네이티브 메서드로 가장 빠른 성능을 가지고있다.
  2. Arrays.copyOf() : 내부적으로 System.arraycopy 를 호출한다. 새 배열을 생성한다.
  3. Arrays.copyOfRange() : 부분 배열복사, 내부적으로 System.arraycopy 사용
  4. clone() : 배열의 복제본 생성 및 새 배열 반환
  5. 반복문을 통한 수동 복사 : 요소별로 직접 복사

성능

실행환경에 따라 결과가 다를 수 있으나 일반적으로 다음과 같은 성능 순서를 보인다.

  • System.arraycopy() : 네이티브로 구현되어 있으므로 가장 빠르다.
  • clone() : System.arraycopy 보다 약간 느리다.
  • Arrays.copyOf() : System.arraycopy 를 내부적으로 사용하지만 새 배열 생성 시 오버헤드가 존재한다.
  • Arrays.copyOfRange() : copyOf 와 유사하지만 범위 계산 오버헤드가 추가된다.
  • 수동 반복문 : 가장 느리다.(JVM 최적화 부족)

배열의 크기가 클수록 System.arraycopy 의 성능 이점이 두드러진다.

 

 

참고 : https://eunplay.tistory.com/118

 

[Java] Java System.arraycopy 사용 방법 및 성능 비교

Java System.arraycopy 사용 방법 및 성능 비교개요안녕하세요. 이번 포스팅은 Java에서 배열을 효율적으로 복사하는 핵심 메서드인 System.arraycopy에 대해 상세히 알아보겠습니다. 대용량 데이터를 다루

eunplay.tistory.com