총 10분 중 11분
2001
시즌 2개, 그리고 영화
시즌 2: 5화 “아일랜드”
출연: 이나영, 김민준, 김민정, 현빈
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
Programming [JAVA] 참조형 : 배열 초기화, 복사
Data Type
Primitive Type Reference Type
정수  실수 논리 Array
Enum
Class
Interface
byte
char
short
int
long
float
double

boolean  

 

참조형에서 가장 많이 사용되는 배열을 보자. 

 

배열은 마지막 인덱스에 length를 가진다. 배열은 크기가 정해지면 변경할 수 없다.  

배열명(배열 변수:scores)는 stack에 저장되어 heap 영역에 생성된 배열을 참조하는 방식으로 이용한다. 배열 변수(scores)는 힙 영역의 배열 주소를 저장한다. 따라서 인덱스로 접근할 수 있다.

배열 내부는 같은 type 값으로 관리하나, 해당 배열이 가리키는 주소의 객체 타입은 다를 수 있다.

 

배열 초기화

// 정적 초기화
String season = {"Spring", "Summer", "Fall", "Winter"} ;

// 동적 초기화
// null로 초기화시 stack에만 생성되고 참조하는 배열이 없기 때문에 new로 초기화하여 사용해야 한다.
int[] scores = null;
scores = new int[30];

  • new를 이용한 배열 초기화 시 초기값이 0, false, null 로 초기화된다.
String names = new String[30];

 

배열 복사

primitive type의 경우 값을 복사해서 사용하기 하지만 참조형은 해당 주소만 복사해 같은 객체를 사용할지, 객체를 복사해 새로운 객체로 사용할지 나누어 복사할 수 있다. 

  • 기본형 == 연산자: 값 비교
  • 참조형 ==연산자: 주소 자체 비교
    • 객체의 내용이 같은지 확인할 때는 .equals()를 이용한다. 

얕은 복사: 주소 복사 - 같은 값을 가리키게 됨

int[] n1 = {100, 200, 300};
int[] n2 = n1;

 

깊은 복사 : 주소가 가리키는 값 복사 - 복사된 새로운 객체를 가리키게 됨

// clone()
// 객체 배열에서는 값 자체(주소)를 복사하기 때문에 얕은 복사처럼 보일 수 있다.

int[] array = {1, 2, 3, 4, 5};
int[] clonedArray = array.clone(); // 복사
System.out.println(Arrays.toString(clonedArray)); // [1, 2, 3, 4, 5]
// System.arraycopy()
int[] src = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] dest = new int[5]; // 크기 5짜리 배열 생성
System.arraycopy(src, 0, dest, 0, 5); // src[0]~src[4]를 dest[0]~dest[4]로 복사
System.out.println(Arrays.toString(dest)); // [1, 2, 3, 4, 5]
// Array.copyof()
int[] original = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] copied = Arrays.copyOf(original, 7); // 처음 7개 복사
System.out.println(Arrays.toString(copied)); // [1, 2, 3, 4, 5, 6, 7]
// for문 복사
int[] source = {1, 2, 3, 4, 5};
int[] destination = new int[source.length];
for (int i = 0; i < source.length; i++) {
    destination[i] = source[i];
}
System.out.println(Arrays.toString(destination)); // [1, 2, 3, 4, 5]

깊은 복사는 새로운 객체를 만들고 값을 받아온 것이기 때문에 참조형 == 연산자: 주소 비교에서 다른 주소를 가진다는 결과가 나온다.

  • .equals() 비교는 true

 

Programming [JAVA] 참조형 : 배열 초기화, 복사