마치 이런 것과 같다. 우리가 팀플을 한다. 내가 PPT의 원본을 가지고 있다고 할 때 그것을 팀원들과 공유하기 위해서 나는 클라우드 계정에 올려 팀원들에게 '이리 들어와서 봐' 라고 할 수 있고, 또는 파일의 원본을 팀원들에게 보낼 수 있다. 클라우드 계정에 올리는 것이 얕은 복사이고 직접 원본을 보내는 것이 데이터복사이다. 얕은 복사의 경우 내가 작업하는 내용이 바로바로 팀원들에게 보인다. 원본을 직접 보내면 그것은 이제 내 손을 떠난 아예 똑같은 복사본이다. 팀원들이 어떻게 고치든 그것은 이제 내 파일이 아니다.
※ 배열 변수의 복사는 데이터 복사, 주소값 복사 두 가지 형태가 존재한다.
주소값 복사(얕은 복사)→
원본을 수정하면 복사본에 영향을 미치게 되는 복사 방법
배열 뿐 아니라 모든 참조형 데이터에 해당하는 복사
데이터 복사(깊은 복사)→
실제 요소로 들어있는 값에 대한 복사로
원본을 수정해도 복사본에 영향을 미치지 않는 복사 방법
public class Test097
{
public static void main(String[] args)
{
int[] nums = {10, 20, 30, 40, 50}; // -- 배열 원본
int[] copys; // -- 복사본으로 만들 배열
int temp; // -- 실습진행(테스트)을 위한 임시 변수
// check!!
copys = nums; //배열에 배열을 대입하겠다 // -- 복사
temp = nums[0]; // nums배열의 첫번째 값 10을 넣겠다.
nums[0] = 1500; //temp에 10을 넣고 10을 다시 1500으로 바꿨을 때 어떻게 될까?
for (int i=0; i<copys.length; i++)
{
System.out.printf("%d\t", copys[i]);
}
System.out.println();
/*
1500 20 30 40 50
계속하려면 아무 키나 누르십시오 . . .
*/
System.out.println("temp : " + temp); //-==>>temp : 10 temp는 1500으로 바뀌지 않고 여전히 10이다.
}
}
public class Test098
{
public static void main(String[] args)
{
int[] nums = {10 , 20, 30, 40, 50};
int[] copy1 =nums; //-- 얕은 의미의 배열 복사 수행(주소값 복사)
int[] copy2 = copyArray(nums); //--깊은 의미의 배열 복사 수행(사용자 정의 메소드 호출)
int [] copy3 = (int[])nums.clone(); // -- 깊은 의미의 배열 복사 수행
// 자바가 제공하는 클론 메소드이다
// 원본 배열의 요소 수정 발생
nums[1] = 20000; //--원본 배열 1번째 요소 20 → 20000
// copy1 배열 전체 요소 출력
for (int i=0; i<copy1.length; i++)
{
System.out.print(copy1[i] + " ");
}System.out.println();
//--==>> 10 20000 30 40 50
for (int i=0; i<copy2.length; i++)
{
System.out.print(copy2[i] + " ");
}System.out.println();
//--==>> 10 20 30 40 50
for (int i=0; i<copy3.length; i++)
{
System.out.print(copy3[i] + " ");
}System.out.println();
//-==>> 10 20 30 40 50
}
public static int[] copyArray( int[] os)
{
//os 방 이 몇 개이냐에 따라 똑같이 만드는 메소드
int[] temp = new int[os.length];
//즉 매개변수로 넘겨받은 배열, 즉 원본 배열 만큼의 배열방(메모리공간)을
//확보한 복사할 배열방을 생성하겠다.
//각각의 원본 배열(os)에 담겨있는 요소들을 복사 배열 (temp)에 담아내기
for (int i=0; i<os.length; i++)
{
temp[i] = os[i];
}
// 복사한 배열 반환
return temp;
}
}
'📚Study Note > JAVA' 카테고리의 다른 글
[ JAVA ] 배열을 활용한 만능달력 (0) | 2021.03.27 |
---|---|
[ JAVA ] 배열 (Array)의 복사, 합집합 출력 (0) | 2021.03.27 |
[ JAVA ] 메소드 오버로딩 (Method Overloading) 이 가능한 경우와 아닌 경우 (0) | 2021.03.25 |
[ JAVA ] 흔해빠진 int[ ] 이 아닌 클래스 '객체' 가 들어있는 배열(feat. Record [ ] (0) | 2021.03.25 |
[ JAVA ] 정보은닉(private) , static 변수와 static 메소드 (0) | 2021.03.25 |