매개변수 전달방식에는 call-by-value방식과 call-by-reference방식이 있다.
call-by-value는 매개변수를 전달할 때 값을 복사하여 넘겨주는 방식이고
call-by-reference는 매개변수를 전달할 때 값이 아닌 해당 변수의 주소값을 넘겨주는 방식이다.
보통 int나 double같은 일반적인 변수타입은 call-by-value방식을 사용하고 배열이나 클래스같은 메모리를 많이 차지하는 타입은
call-by-reference를 사용한다.
C++나 다른 언어에서는 매개변수 방식을 프로그래머가 선택하여 사용한다.
하지만 자바에서는 컴파일러가 자동으로 매개변수 방식을 지정하여 준다. 즉 프로그래머는 일반적인 call-by-value이냐 call-by-reference이냐를 고민할 필요없이 call-by-value처럼 그냥 변수를 넘겨주면 컴파일러가 알아서 선택하여 준다.
이제 자바 컴파일러의 매개변수 선택방식을 알아보자
자바에서는 기본 자료형(byte, short, int, long, float, double, boolean, char)은 call-by-value방식으로 매개변수를 전달한다. 기본 변수형이 아닌 기본 자료형임을 유의하여야 한다. 즉 위의 변수타입말고도 위 변수타입과 같은 자료형을 가지는 포장 클래스(Byte, Short, Integer, Long, Double, Boolean, Character)도 call-by-value방식으로 매개변수를 전달한다.
위의 기본 자료형을 제외한 모든 것들은 call-by-reference방식이다. 위 자료형을 제외한 객체, 배열등이 포함된다. 기본 자료형인 배열도 call-by-value가 아니라 call-by-reference라는 것을 유의하자.
※ 참고
기본 자료형의 변수나 객체는 call-by-reference로 전달하려 하여도 컴파일러가 call-by-value로 전달을 한다. 기본 자료형인 변수를 여러 클래스에서 공유하기 위하여 call-by-reference방식을 사용하고 싶다면 위 자료형을 크기가1인 배열을 넘기면 간단하게 기본 자료형을 call-by-reference방식으로 넘길 수 있다.
'Language, IDE > JAVA, android' 카테고리의 다른 글
[JAVA 자바] instanceof - 객체(클래스)의 타입판별 (0) | 2013.07.24 |
---|---|
[JAVA 자바] super (0) | 2013.07.24 |
[JAVA 자바] StringTokenizer (0) | 2013.07.14 |
[JAVA 자바] Thread(쓰레드, 스레드) (0) | 2013.07.09 |
[Java 자바] string to int, int to string (0) | 2013.07.07 |