Coding 공부/Java

[Java_Summary] 메소드에서 배열, 예제

CBJH 2024. 2. 1.
728x90
반응형

1. 메소드에서 배열 리턴

배열 공간 전체가 아니라 배열에 대한 레퍼런스만 리턴된다.

리턴 타입을 선언할 때, []안에 배열의 크기를 지정하지 않는다.

[Java_Summary] 메소드에서 배열, 예제 - undefined - 1. 메소드에서 배열 리턴

 

 

 

2. (앞서 만든)팀 할당하는 예제를 메서드로 만들기

 

[Java_Summary] 메소드에서 배열, 예제 - undefined - 2. (앞서 만든)팀 할당하는 예제를 메서드로 만들기
[Java_Summary] 메소드에서 배열, 예제 - undefined - 2. (앞서 만든)팀 할당하는 예제를 메서드로 만들기

>>4번째 줄에서 매개변수로 String[][] team를 사용한다면, String[][] team = main.team이랑 같은 의미이다. 주소값을 참조하므로 메서드 내에서 값을 바꾸면 main메서드의 String[][]team도 수정된다.

 

 


3. 메소드에서의 지역 변수

 

for(int i =0;....){} 에서 i같이 지역변수는 다른 메서드에서 수정하거나 불러올수 없고 해당 메서드가 끝나면 사라지는 휘발성이 있는 변수이다.

 

 

깊은 복사와 얕은 복사?

메소드에서 매개변수로 배열을 받을 경우 그 매개변수는 메인에 있는 배열과 같은 것인가? 아닌가? 
값을 받는 것인지? 주소를 참조하는 것인지?

1) 깊은 복사 예시(값을 받음)
int a = 15;
int b = a;
>>상수에서는 값을 받는다.

2) 얕은 복사 예시(참조)
String s = "Hello";
String k = s;
>> 문자열, 배열에서는 주소를 참조받는다. 즉 같은 주소를 가르킨다. 

 

자바에서 객체의 복사는 크게 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)로 나눌 수 있습니다.

얕은 복사 (Shallow Copy):
얕은 복사는 객체를 복사할 때, 원본 객체와 복사본 객체가 같은 객체를 참조하는 방식입니다. 복사된 객체는 원본 객체의 필드 값들을 그대로 복사하게 되지만, 필드 값 중 참조 타입의 경우 참조 주소만을 복사하므로 참조하는 객체는 같은 객체를 가리킵니다.


깊은 복사 (Deep Copy):
깊은 복사는 객체를 복사할 때, 원본 객체와 복사본 객체가 완전히 별개의 객체를 참조하도록 하는 방식입니다. 즉, 참조 타입의 필드도 새로운 객체로 복사하여 새로운 참조 주소를 가지게 합니다.

깊은 복사는 객체의 복사본이 원본과 독립적으로 사용되어야 할 때 유용합니다. 주의할 점은 깊은 복사를 구현할 때 모든 객체와 객체 내부의 객체들까지 재귀적으로 복사해주어야 합니다.

[Java_Summary] 메소드에서 배열, 예제 - undefined - 3. 메소드에서의 지역 변수

 

 

9번째 줄의 s += "oooo";에서 자바에서 문자열은 수정이 안되므로 새로운 s의 주소를 만들어 Helooooo를 만드므로 k를 출력해도 안 변한 것처럼 보인다.

문자열 배열에서 요소값을 변경하는 것은 가능하기 때문에 s1에서 수정한 값이 s2에서도 같이 수정되어 print에 출력된다.

 

[Java_Summary] 메소드에서 배열, 예제 - undefined - 3. 메소드에서의 지역 변수
기본 자료형의 깊은 복사 & 참조변수의 얕은 복사 & 참조 변수의 깊은 복사

 

3-1) 메서드 깊은 복사와 얕은 복사 예제

 

[Java_Summary] 메소드에서 배열, 예제 - undefined - 3. 메소드에서의 지역 변수 - 3-1) 메서드 깊은 복사와 얕은 복사 예제
[Java_Summary] 메소드에서 배열, 예제 - undefined - 3. 메소드에서의 지역 변수 - 3-1) 메서드 깊은 복사와 얕은 복사 예제

 

댓글