/* ===================
■■■ 배열 ■■■
====================*/
//배열의 복사
// Test098.java 파일과 비교~!
// ※ 배열 변수의 복사에는 데이터 복사, 주소값 복사, 두 가지 형태가 존재한다.
// 주소값 복사 → 얕은 복사 → 원본을 수정하면 복사본에 영향을 미치게 되는 복사 방법.
// (배열 뿐 아니라 모든 참조형 데이터에 해당하는 복사 방법.)
// 복사는 어디든 해당됌(배열뿐안 아니라 참조하는 모든 것에대한. 클래스든 메소드든)
// 잘 알아야 한다.
// 데이터 복사 → 깊은 복사 → 실제 요소로 들어있는 값에 대한 복사로
// 원본을 수정해도 복사본에 영향을 미치지 않는 복사 방법.
// 데이터 복사
// - int 형 배열에 대한 깊은 의미의 복사를 처리하는
// 메소드를 정의하는 형태로 실습
public class Test099
{
public static void main(String[] args)
{
int[] nums = {10, 20, 30, 40, 50}; // - 배열의 원본
int[] copys1 = nums; // - 얕은 의미의 배열 복사
// (주솟값 복사)
int[] copys2 = copyArray(nums); // - 깊은 의미의 배열 복사 수행
// (사용자 정의 메소드 호출)
// 복사해주는 메소드
// 객체 형식으로 반환
int[] copys3 = (int[])nums.clone(); // - 깊은 의미의 배열 복사 수행
// (자바 제공 → clone() 메소드 )
// 원본 배열 요소의 수정 발생~!!
nums[1] = 2; // 20 → 2로 수정
// 결과 확인
for (int i = 0;i < nums.length ;i++ )
{
System.out.printf("%4d", nums[i]);
}
System.out.println();
for (int i =0;i < copys1.length ; i++)
{
System.out.printf("%4d", copys1[i]);
}
System.out.println();
for (int i =0; i < copys2.length ;i++ )
{
System.out.printf("%4d", copys2[i]);
}
System.out.println();
for (int i =0;i < copys3.length;i++ )
{
System.out.printf("%4d", copys3[i]);
}
System.out.println();
}
// 매개변수로 int 배열 타입을 넘겨받아
// 이를 복사한 후
// 복사한 배열을 반환하는
// 기능을 가진 메소드 정의
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];
}
// 복사한 배열(temp) 반환
return temp;
}
}
728x90
'JAVA' 카테고리의 다른 글
Test101.java / 클래스와 인스턴스 / 클래스 설계 - 접근제어지시자와 정보은닉 (1) | 2022.10.14 |
---|---|
Test100.java / 클래스와 인스턴스 / 정보은닉(information hiding) 과 접근제어지시자(access control speifiers) 접근지정자, 접근제한자 (1) | 2022.09.11 |
Test098.java / 배열 / 배열의 복사 (0) | 2022.09.11 |
Test097.java / 배열 / 배열과 난수(Random 클래스)처리 (0) | 2022.09.11 |
Test096.java / 배열 / 2차원 배열 실습 (0) | 2022.09.11 |
댓글