[JAVA 문법 종합반 3일차-얕은복사, 깊은 복사, String배열]

김동규·2023년 5월 24일
0

복사

얕은 복사

배열 변수간에 대입연산자 "=" 를 사용해서 복사하면 주소값만 복사된다.
주소값만 복사되고 실제값은 1개로 유지되는 걸 얕은 복사 라고한다.

int[] a = {1,2,3,4};
int[] b = a; // 얕은복사

b[0] = 3; // b 배열의 0번째 순번값을 3번으로 수정 (1 → 3)

System.out.println(a[0]); // 출력 3 이때 a배열의 0번째 순번값 1도 3으로 조회된다.

이는 a와 b 모두 값이 바뀌게 됨으로 바람직하지 않은 복사라고 볼 수 있다.

깊은 복사

실제 값을 가지고 있는 배열의 기본형 값을 꺼내어 복사하면 된다.
반복문 for문을 통해 하나씩 꺼내서 복사하는 방법과 여러 매서드를 사용하는 방법이 있다.

// 깊은 복사

int[] a = { 1, 2, 3, 4 };
int[] b = new int[a.length];  // 이때 b는 a의 배열 수만큼 가짐 {0,0,0,0}으로 int 초기화된 값

for (int i = 0; i < a.length; i++) {
    b[i] = a[i]; // 깊은 복사
}

b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정했습니다. (1 -> 3)

System.out.println(a[0]); // 출력 1 <- 깊은 복사를 했기때문에 a 배열은 그대로 입니다.

깊은 복사 매서드

int[] a = {1,2,3,4};
int[] b = Arrays.copyOf(a, a.length); // 배열과 함께 length값도 같이 넣어준다. ※ Arrays.copyOf()매서드가 사용되었다.

a[3] = 0;
System.out.println(a[3]);
System.out.println(b[3]);

출력값: 0, 4

깊은 복사 매서드(Arrays.copyOf)를 통해 배열 a와 b의 값이 아예 다른 값을 가지게 되었다.

String의 여러 기능 활용

	String str = "ABCD";

    // (1)length 기능
    int strLength = str.length();
    System.out.println(strLength);

    // (2) charAt(int index)
    char strChar = str.charAt(1);
    System.out.println(strChar);

    // (3) substring(int fromIdx, int toIdx)
    String strSub = str.substring(0, 3); // 0번째부터 3번째 전까지 자르는 것
    System.out.println(strSub);

    // (4) equals(String str) →문자열 A와 B가 일치한지 boolean 값으로 알려주는 것
    String newStr = "ABCE";
    boolean strEqual = newStr.equals(str);
    System.out.println(strEqual);

    // (5) toCharArray() : String → char[] 로 변환하는 것
    char[] strCharArray = str.toCharArray();

    // (6) char[] → String → char
    char[] charArray = {'A','B','C'};
    String charArrayString = new String(charArray);
    System.out.println(charArrayString);

여러 기능들이 있으므로 한번씩 복습하면서 알 수 있도록 해봐야겠다.

profile
안녕하세요~

0개의 댓글