728x90
Java에서 기본형 매개변수, 참조형 매개변수, 참조형 반환값 사용하기
기본형 매개변수 vs 참조형 매개변수
자바에서 메서드를 호출할 때 매개변수로 지정한 값은 메서드의 매개변수에 복사됩니다.
하지만, 매개변수의 타입에 따라 복사되는 내용이 다릅니다.
기본형 매개변수
- 변수의 값이 복사됩니다.
- 즉, 메서드 안에서 매개변수 값을 변경해도 원본 변수의 값에는 영향을 미치지 않습니다.
class Data { int x; } class aaa { public static void main(String[] args) { Data d = new Data(); d.x = 10; System.out.println("main() : x = " + d.x); change(d.x); System.out.println("After change(d.x)"); System.out.println("main() : x = " + d.x); } static void change(int x) { x = 1000; System.out.println("change() : x = " + x); } } //출력값 main() : x = 10 change() : x = 1000 After change(d.x) main() : x = 10
참조형 매개변수
- 변수의 주소(reference) 가 복사됩니다.
- 즉, 메서드 안에서 매개변수가 참조하는 객체의 값을 변경하면 원본 객체의 값도 변경됩니다.
class Data { int x; } class aaa { public static void main(String[] args) { Data d = new Data(); d.x = 10; System.out.println("main() : x = " + d.x); change(d); System.out.println("After change(d)"); System.out.println("main() : x = " + d.x); } static void change(Data d) { d.x = 1000; System.out.println("change() : x = " + d.x); } } 출력값. main() : x = 10 change() : x = 1000 After change(d) main() : x = 1000
참조형 반환값
메서드의 반환값 또한 참조형일 수 있습니다. 참조형 반환값은 메서드가 생성하거나 참조하는 객체의 주소를 반환합니다.
- 메서드를 호출한 코드에서 반환된 객체 주소를 사용하여 객체의 필드나 메서드에 접근하고 변경할 수 있습니다.
class Data { int x; } class aaa { public static void main(String[] args) { Data d = new Data(); d.x = 10; Data d2 = copy(d); System.out.println("d.x = " + d.x); System.out.println("d2.x = " + d2.x); } static Data copy(Data d) { Data tmp = new Data(); // 새로운 객체 tmp를 생성한다. tmp.x = d.x; // d.x의 값을 tmp.x에 복사한다. return tmp; // 복사한 객체의 주소를 반환한다. } }
주의 사항
- 참조형 매개변수를 사용할 때, 메서드 안에서 매개변수가 참조하는 객체를 변경하면 원본 객체도 변경됩니다. 이는 의도하지 않은 변경을 유발할 수 있으므로 주의해야 합니다.
- 참조형 반환값을 사용할 때, 반환된 객체는 메서드가 종료되면 메모리에서 해제될 수 있습니다. 따라서, 반환된 객체를 영구적으로 사용하려면 반환된 객체의 주소를 새로운 변수에 저장해야 합니다.
활용
- 기본형 매개변수는 값을 전달하는 데 사용되고, 참조형 매개변수는 객체를 전달하고 변경하는 데 사용됩니다.
- 참조형 반환값은 메서드가 생성하거나 참조하는 객체를 반환하는 데 사용됩니다.
- 이러한 개념들을 올바르게 이해하고 사용하면 코드를 더욱 효율적이고 명확하게 작성할 수 있습니다.
728x90
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] java.io 패키지 - 스트림으로 배우는 자바 입출력 (0) | 2024.07.31 |
---|---|
[JAVA] 자바 파일 권한 변경 방법 (0) | 2024.07.30 |
[JAVA] 자바 타이머 Timer, TimerTask (0) | 2024.06.10 |
[JAVA] 비어있는 문자열(String) 체크하는 방법 (0) | 2024.04.24 |
[JAVA] e.printStackTrace to String (0) | 2024.02.21 |