Categories: 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 란?

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]);
  
 }
}
    

위의 소스를 분석을 하면 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

Recent Posts

Java 총정리[97. Java GUI]

Java GUI Java GUI에 대해서 이번 걸음에서 배움으로써 GUI에 전반적인 지식과 Java GUI를 구현하는 방법…

7개월 ago

Java 총정리[96. Java TCP 통신 프로그램 구현]

Java TCP 통신 프로그램 구현 Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한…

7개월 ago

Java 총정리[95.쓰레드 통신]

쓰레드 통신 이전 걸음에서 쓰레드의 임계영역에 대해서 같이 공부를 했습니다. 동기화에 대한 개념을 계속적으로 하고…

7개월 ago

Java 총 정리[94. 쓰레드 임계영역]

쓰레드 임계영역 이전 걸음에서 쓰레드의 동기화에 대해서 같이 공부를 했습니다. 동기화에 대한 전반적인 내용을 공부하고…

8개월 ago

Java 총 정리[93. 쓰레드 동기화]

쓰레드 동기화 이전 걸음에서 계속 쓰레드에 대해서 공부를 하고 있습니다. 쓰레드는 상당히 중요한 개념이기 때문에…

8개월 ago

Java 총 정리[92. 쓰레드 join()]

쓰레드 join() 이전 걸음에서 쓰레드의 전반적인 실행 흐름에 대해서 공부를 했습니다. 이제 배운 실행 흐름…

8개월 ago

This website uses cookies.