foxpacking

Programming Lessons

Java 언어 Korean

Java 총 정리[39. Call by Reference]

Call by Reference

이전 걸음에서 Call by Value에 대해서 배웠습니다. 그럼 이런 개념이 하나만 있다고 하면 이런 Call by Value라는 말을 만들지 않았겠죠? 뭔가 상반되는 개념이 존재를 하기 때문에 이전 걸음에서 배운 Call by Value가 있던 것입니다. 그럼 이번에는 Call by Value와 반대의 개념인 것을 같이 보도록 하겠습니다. 

Call by Value의 상반되는 개념은 현재 배운 것에서 좀 더 공부가 되면 더 이해를 하고 활용을 할 수 있지만 어차피 메소드를 현재 공부를 하고 있기 때문에 이해를 하신다면 추후에 나오는 부분에서도 적용을 하고 활용을 할 수 있을 것입니다. 지금 볼 개념은 기본 자료형이 아닌 참조 자료형이거나 또는 배열 같은 자료형일 때 사용되는 메소드 개념입니다. Call by Value와 마찬가지로 매개변수의 내용인 것은 꼭 알고서 이해를 하셔야 합니다. 이 글을 끝까지 보신다면 확인을 하실 수 있습니다.

Call by Reference 입니다. Call by Reference은 호출을 하면 참조를 한다는 의미 입니다. 이 Call by Reference 같은 경우에는 return을 하지 않아도 같은 것을 바라보고 참조를 하고 있기 때문에 참조 자료형이나 배열인 경우 그 안에 값을 바꾸게 되면 그대로 바뀐 값이 적용이 되게 됩니다. 추후 main메소드에 확인을 하면 return 없이도 값이 바뀐 것을 확인을 할 수 있습니다. 이 글을 끝까지 읽는다면 Call by Reference에 대해서 이해하고 활용을 할 수 있습니다.

Call by Reference 란?

CallByReference사진

Call by Reference란 메소드를 호출시 매개변수를 참조 자료형 또는 배열이 전달 되면 그 자체를 참조를 하기 때문에 메소드 안에서 값의 변경이 일어나게 되면 굳이 return을 하지 않아도 값이 변경이 됩니다. 값의 변경이 바로 이루어지기 때문에 잘 알고 있다고 하면 굳이 리턴을 하지 않고 메소드를 만들 수 있습니다.

위에 사진처럼 바위는 내가 보거나 다른 사람이 봐도 똑같이 바위입니다. Call by Reference도 같은 개념으로 이해를 하시면 됩니다. 같은 것을 서로 바라봐서 뭔가 변경이 가해지면 다른 바라보는 사람도 변경되게 보이게 됩니다.

※ Call by Reference는 return을 하지 않아도 값이 변경 된다.

Call by Reference 예제

    
public class CallByreferenceTest {

	static void abc(int[] a) {
		a[0] = 10;
		a[1] = 20;
	}
		
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a= new int[3];
		abc(a);
		System.out.println(a[0]+","+a[1]+","+a[2]);
		
	}
}
    
CallByReference소스설명사진
CallByReference결과사진

위의 소스를 분석을 하면 main메소드에서 int 배열 3크기에 객체를 생성하고 abc 메소드에 배열을 넘겨줍니다. 그러면 abc메소드에서 매개변수 a를 가지고 0번 인덱스에 10을 대입 1번 인덱스 20을 대입을 하게 됩니다. 이렇게 배열이 넘어오게 되면 Call by Reference가 되어서 리턴을 하지 않아도 매개변수와 main메소드에 있는 배열 변수는 같은 배열 객체를 바라보기 때문에 하나를 같이 조정하는 효과가 나타납니다. 그렇기 때문에 굳이 return을 하지 않아도 main메소드에서 출력을 하면 10, 20 ,0이 나오게 됩니다.

함께 보면 좋은 글

§ Java 첫 걸음 변수와 자료형
§ Java 두 걸음 연산자
§ Java 세 걸음 형 변환
§ Java 네 걸음 Eclipse 설치
§ Java 다섯 걸음 Eclipse 개발 준비
§ Java 여섯 걸음 출력
§ Java 일곱 걸음 출력
§ Java 여덟 걸음 문제 풀기 1
§ Java 아홉 걸음 한글 깨짐
§ Java 열 걸음 제어문
§ Java 열 한걸음 if문
§ Java 열 두걸음 switch문
§ Java 열 세걸음 while문
§ Java 열 네걸음 for문
§ Java 열 다섯걸음 중첩 및 주의 사항
§ Java 열 여섯걸음 문제 1
§ Java 열 일곱걸음 문제 2
§ Java 열 여덟걸음 break continue
§ Java 열 아홉걸음 random
§ Java 스물 걸음 별 찍기 1
§ Java 스물 한걸음 별 찍기 2
§ Java 스물 두걸음 가위 바위 보 게임
§ Java 스물 세걸음 배열
§ Java 스물 네걸음 배열 활용
§ Java 스물 다섯걸음 Rando 활용 문제
§ Java 스물 여섯걸음 숫자 야구 게임
§ Java 스물 일곱 걸음 배열 숫자 야구 게임
§ Java 스물 여덟 걸음 다차원 배열
§ Java 스물 아홉 걸음 다차원 배열 심화
§ Java 서른 걸음 다차원 배열 문제
§ Java 서른 한 걸음 가변 배열
§ Java 서른 두 걸음 메소드(함수)
§ Java 서른 세 걸음 메소드형태
§ Java 서른 네 걸음 메소드 기초활용
§ Java 서른 다섯 걸음 메소드 문제1
§ Java 서른 여섯 걸음 메소드 구조 및 활용
§ Java 서른 일곱 걸음 메소드문제 2
§ Java 서른 여덟 걸음 Call by Value

Dolphin

About Author

Leave a comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You may also like

Korean Programming 기초

IT 개발자 VS 프로축구선수 비교?

IT 개발자와 프로축구선수의 같은 점과 다른 점? 프로그래밍 공부를 하시면서 개발자로 취업을 하려고 하는데 과연 취업을 할 수 있을까? IT
Korean 클라우드

AWS 로그인 불가능, AWS고객 센터 이메일 문의 결과는?

AWS 고객센터 이메일 문의 솔직후기 AWS를 사용하기 위해 로그인을 하는 경우 이메일로 코드 번호를 보내지만 이메일로 받을 수 없는 상황이거나