Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 코드스테이츠
- 성능테스트툴
- GCP
- 구간합구하기
- Spring Web MVC
- vm인스턴스생성
- 프로그래머스
- Array.asList
- String.valueOf()
- 코딩테스트
- 싱글톤패턴
- 알고리즘
- 11659
- 자바
- 클라우드에서 도커 실행하기
- List.of
- Spring MVC 동작원리
- java
- 인텔리제이
- Spring MVC 구성요소
- OOP
- 백준 11659
- 재귀와반복문
- 스택
- 버블정렬
- 코드스테이츠 백엔드
- 백준
- MySQL
- 재귀함수
- 투포인터알고리즘
Archives
- Today
- Total
순간을 기록으로
[Java] 배열을 복사하는 방법 본문
얕은 복사(Shallow Copy)
- 객체의 주소값만을 복사하는 것
- 주소 값이 같으므로 한쪽에서 값을 바꾸면 다른 쪽에서도 값이 바뀐다.
- 장점
- 하나의 객체만을 사용하기 때문에 메모리 낭비가 발생하지 않는다.
- 단점
- 여러 객체가 하나의 배열을 가리키기 때문에 값 변경할 때 실수가 발생할 수 있다.
public class Solution {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = a;
System.out.println("a의 주소값: " + a);
System.out.println("b의 주소값: " + b);
}
}
깊은 복사(Deep Copy)
- 객체의 실제값을 새로운 객체를 만들어서 복사하는 것.
- 주소 값이 서로 다르므로 한쪽에서 값이 변경되어도 다른 쪽에서 변경되지 않는다.
- 장점
- 예기치 못한 실수가 얕은 복사에 비해 적다.
- 단점
- 여러 객체를 생성하기 때문에 메모리가 낭비될 수 있다.
public class Solution {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = new int[a.length];
for (int i=0; i<b.length; i++) {
b[i] = a[i];
}
System.out.println("a의 주소값: " + a);
System.out.println("b의 주소값: " + b);
}
}
배열을 복사하는 다양한 메소드
1. Object.clone() - 깊은 복사
- Object.clone()은 원래 얕은 복사지만 기본형 배열의 경우 Cloneable과 Serialize 인터페이스가 구현되어있다. 따라서 깊은 복사가 가능하다.
- 하지만 객체 배열인 경우에는 Cloneable 인터페이스를 구현해야 깊은 복사가 가능하다
- 길이도 똑같은 배열을 만들고 싶을 때 사용한다.
public class Solution {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = a.clone(); // 1 2 3 4 5
}
}
2.Arrays.copyOf() - 깊은 복사
- 배열의 첫 원소부터 설정한 길이만큼의 배열을 생성합니다.
- java.util.Arrays
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = Arrays.copyOf(a, 7); // 1 2 3 4 5 0 0
}
}
3.Arrays.copyOfRange() - 깊은 복사
- 배열의 복사를 특정 요소부터 특정 요소까지 지정하여 복사합니다.
- java.util.Arrays
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = Arrays.copyOfRange(a, 1,3); // 2 3
}
}
4.System.arraycopy()
- Arrays.copyOf()와 기능은 같으나 성능이 더 좋습니다.
public class Solution {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = new int[a.length];
System.arraycopy(a,0,b,0,5);
}
}
'Development > JAVA' 카테고리의 다른 글
[Java] - 상속(Inheitance), 캡슐화(Encapsulation) 질문들 (0) | 2022.05.12 |
---|---|
[Java] 객체 지향 프로그래밍 질문들 (0) | 2022.05.11 |
[Java] 오버라이딩이란 무엇이고 왜 사용할까? (0) | 2022.04.21 |
[Java] JDK, JRE, JVM는 차이점은 무엇일까? (0) | 2022.04.18 |
[JAVA] 제네릭2 (0) | 2021.11.29 |
Comments