Java 변수 타입 기본형, 참조형 - 메소드 호출
기본형은 실제 데이터를 복사하고, 참조형은 변수에 들어있는 참조 주소 값을 복사하여 대입한다.
메소드 호출은 사용하는 매개변수 또한 같은 변수이다. 메소드 호출의 매개변수에 값을 전달하는 것 또한 복사해서 전달하게 된다.
기본형 메소드 호출
다음 코드를 실행하여 어떤 값이 출력되는지 확인해보도록 한다.
public static void primitiveValue(int x) {
x = 100;
}
public static void main(String[] args) {
int a = 1;
System.out.println("메소드 호출 전 a의 값: " + a);
primitiveValue(a);
System.out.println("메소드 호출 후 a의 값: " + a);
}
실행결과
메소드 호출 전 a의 값: 1
메소드 호출 후 a의 값: 1
primitiveValue 메소드를 만들어 호출 시 a 의 값은 100으로 변하지 않는다.
참조형 메소드 호출
메소드 사용에는 이러한 참조형 호출 방법이 있다. 참조형 메소드 코드를 보고 출력 결과를 확인해보도록 한다.
public static class Date {
int day = 1;
}
public static void refereceValue(Date date) {
date.day = 100;
}
public static void main(String[] args) {
Date date = new Date();
System.out.println("메소드 호출 전 day의 값: " + date.day);
refereceValue(date);
System.out.println("메소드 호출 후 day의 값: " + date.day);
}
실행결과
메소드 호출 전 day의 값: 1
메소드 호출 후 day의 값: 100
- Date의 인스턴스를 생성하고, 참조 값을 date 변수로 멤버변수 day 는 값 1이 담겨 있다.
- 그리고
refereceValue(date);
로 참조형 변수를 전달하고 메소드 안에서 멤버변수 day 의 값을 100 으로 변경하게 된다. - 다시
main
클래스로 돌아와 date의 멤버변수 day 를 호출 시 100 으로 값을 출력하게 된다.
메서도 호출
- 기본형: 기본형 데이터를 메소드로 전달하면, 해당 값이 복사되어 전달되고, 메소드 내부에서는 값을 변경하여도 호출자의 파라미터 변수 값은 영향이 없다.
- 참조형: 참조형 데이터를 메소드로 전달하면, 해당 값이 복사되어 전달되고, 메소드 내부에서는 전달된 파라미터 객체가 변경하면, 호출자의 파라미터 객체 멤버에도 영향을 받게 된다.