코딩과 결혼합니다

얕은 복사, 깊은 복사, String 배열 본문

2세/Java

얕은 복사, 깊은 복사, String 배열

코딩러버 2023. 5. 30. 17:48
728x90

Java 프로그래밍에서 여러개의 변수를 같은 곳에 모아서 저장하고 싶을때 기본적으로는 "배열" 이라는 변수에 저장한다.

 

배열

선언 (  [  ]  )

= 보통  타입 [ ]  변수

 ex. int[ ] intArray;  또는 int intArray[ ];

 

 

 

생성 (  new [  ]  )

= 배열은 참조형 변수들처럼 new 명령을 통해서 생성하며, 대괄호 [ ] 안에 크기를 지정해준다.

* 순번은 0부터 시작. 0~7 (길이 = 8)

 

*배열은 참조형 변수이기 때문에 실제 값을 담지 않고 실제 값의 주소값을 저장

 

 

// 배열 생성

//배열 생성후 초기화하면 배열의 주소가 할당된다.
int[] intArray = new int[3]; // 초기값 {0,0,0}
boolean[] boolArray = new boolean[3]; // 초기값 {false, false, false}
String[] stringArray = new String[3]; // 초기값 {"","",""}

//배열 선언만 해놓고 나중에 초기화를 시킬수도 있다.
int[] intArray2;
intArray2 = new int[3]; // 초기값 {0,0,0}

 

 

순회 (  [ i ]  )

=배열 안에 담겨있는 변수들을 하나씩 꺼내서 사용하는 것

 

 

배열 단건조회

int[] intArray = new int[3]; // 모두 0으로 초기화된 사이즈8의 배열 생성

// 배열에서 2번쨰 순번의 값을 출력해본다. (0부터 순번이 시작하므로 2번째 순번은 1)
System.out.println(intArray[1]);

// 출력
0

 

 

배열 순회 (반복문 for)

int[] intArray = new int[3];

// 배열이 초기화된 값을 출력해본다.
for(int i=0; i<intArray.length; i++) { // .length 는 배열의 길이
System.out.println(intArray[i]);
}

// 출력
0
0
0

 

 

 

초기화 (  ={...}  )

1. 중괄호{} 를 사용해서 초기화

int[] intArray = {1, 2, 3, 4, 5};
String[] stringArray = {"a", "b", "c", "d"};

 

2. 반복문 for문을 사용해서 초기화 (또는 향상된 for문)

//2-1. for문을 통해 값을 대입
for (int i = 0; i < intArray.length; i++) {
intArray[i] = i;
}

//2-2. 향상된 for문을 통한 배열 출력
for (int i : intArray) {
System.out.print(i); // 01234
}

 

3. Arrays.fill 메소드를 사용해서 초기화 (Arrays 클래스는 Java 에서 기본으로 제공하는 메소드가 담긴 클래스)

//3. 배열의 주소를 모두 같은값으로 초기화
Arrays.fill(intArray, 1);//배열의 모든 값을 1로 초기화

for (int i : intArray) {
System.out.print(i); // 11111
}

 

 

 

복사 (  .clone()  )

 

얕은 복사 : 주소값만 복사되고 실제값은 1개로 유지되는걸 얕은 복사

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

 

깊은 복사 : 진짜 새로운 배열을 똑같이 만들고 싶을때 깊은 복사

int[] a = { 1, 2, 3, 4 };
int[] b = new int[a.length];

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

 

깊은 복사 메서드

// 1. clone() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = a.clone(); // 가장 간단한 방법입니다.
// 하지만, clone() 메서드는 2차원이상 배열에서는 얕은 복사로 동작합니다!!

// 2. Arrays.copyOf() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = Arrays.copyOf(a, a.length); // 배열과 함께 length값도 같이 넣어줍니다.

 

 

 

String 배열

선언, 생성, 초기화

 

String 배열 선언과 생성

String[] stringArray = new String[3];

 

String 배열의 초기화

 

// 선언 후 하나씩 초기화 할 수 있습니다.
String[] stringArray = new String[3];
stringArray[0] = "val1";
stringArray[1] = "val2";
stringArray[2] = "val3";

// 선언과 동시에 초기화 할 수 있습니다.
String[] stringArray1 = new String[]{"val1", "val2", "val3"};
String[] stringArray2 = {"val1", "val2", "val3"};

 

 

 

String 기능 활용 (= char 배열)

- char 배열은 “문자배열”이고 String은 문자열

- String = char[]

 

 

char 배열에는 없는 String 만 가지고 있는 기능