sanhaa
sanha story
sanhaa
전체 방문자
오늘
어제
  • 분류 전체보기 (93)
    • 일상 (3)
    • Programming (42)
      • Back-end Language (32)
      • Front-end Language (8)
      • Database Language (2)
    • Etc. (35)
      • Coding Test (23)
      • Algorithm (7)
      • Data structure (1)
      • IDE (1)
      • Job Preparation (3)
    • Project (3)
    • Engineer Information Proces.. (10)
    • secret space (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Java
  • JAVA 구간 합 구하기
  • JAVA #백준 #구간합
  • 자바
  • 큐
  • 사이드 프로젝트 #여기로모여라 #web socket #실시간 위치공유
  • spring #java #k6 #
  • 백준
  • 정처기 #DCL #SQL #DB
  • 백준 2018번
  • 신고받기
  • 주몽의명령
  • DDL #SQL #DB #정보처리기사 #SQL응용 #MySQL
  • 투 포인트 알고리즘
  • DML #정처기 #시나공 #SQL #MYSQL #SPRING #JAVA
  • 1253번
  • Spring
  • 알고리즘
  • connection reset by peer
  • 연속된 자연수의 합 구하기
  • 삼발자 #일상
  • 프로그래머스
  • 스택
  • 코딩테스트
  • DFS #백준
  • 정보처리기사 #정처기 #기출 #2021기출
  • iterator #
  • oEmebed
  • hash #java #프로그래머스 #코딩테세트 #백준
  • 시간복잡도 #JAVA #코딩테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sanhaa

sanha story

[JAVA]Call by value와 Call by referenece
Programming/Back-end Language

[JAVA]Call by value와 Call by referenece

2022. 2. 13. 22:12

함수의 호출 방식에는 Call by value와 Call by reference가 있다.

 

"값에 의한 호출" , "참조에 의한 호출" 차이가 있다. 예제를 통해 알아보자,

 

Call by value

package JAVA;

public class CallByValue {
    int value;
    public static void swap(int x, int y){
        int temp =x;
        x=y;
        y=temp;
    }

    public static void main(String[] args) {
        int a=10;
        int b=20;

        System.out.println("Swap() 호출 전: a=" +a+",b=" +b);
        swap(a,b);
        System.out.println("Swap() 호출 후: a=" +a+",b=" +b);
    }
}

 

값이 그대로 이다. 왜냐하면 swap() 메서드 호출 시에 사용한 인자 a,b와 swap() 메서드내의 매개변수 x,y는 서로 다르기 때문이다.

main()에서 선언 된 변수 a,b는 0x005, 0x001번지에 할당 되었다고 가정한다. 할당 된 메모리 변수에는 각각 10,20이 저장이 된다. 이후 swap()메서드 호출 시에 x,y의 값이 변하고 다시 a,b를 출력을 한다. 따라서 결과 값에 변화가 없다.

 

따라서 Call by value는 메서드 호출 시에 사용되는 인자의 메모리에 저장되어 있는 값(value)을 복사하여 보낸다.

 

Call by reference

call by reference는 메서드 호출 시에 사용되는 인자가, 값이 아닌 주소를 넘겨줌으로써 주소를 참조하여 데이터를 변경할 수 있다.

 

package JAVA;


public class CallByReference {
    int value;

    public CallByReference(int value) {
        this.value = value;
    }

    public static void swap(CallByReference x, CallByReference y){
    int temp = x.value;
    x.value = y.value;
    y.value = temp;
    }

    public static void main(String[] args) {
        CallByReference a = new CallByReference(10);
        CallByReference b = new CallByReference(20);

        System.out.println("Swap() 호출 전: a=" +a.value+",b=" +b.value);
        swap(a,b);
        System.out.println("Swap() 호출 후: a=" +a.value+",b=" +b.value);

    }
}

이번에는 a,b 값이 바뀌어서 나왔다. 

main에 선언된 CallByReference 타입의 변수 a와 b는 각각 객체를 생성하여 번지에 저장된 10과 20의 주소 값을 저장하게 된다. 이후 swap() 메서드 호출 시에 주소값을 참조하여 연산하기 때문에 데이터가 변한다. 

 

따라서 Call by reference는 메서드 호출 시 사용되는 인자 값의 메모리에 저장되어있는 주소를 복사하여 보낸다.

 

 

 

 

참고.

 

[Java] Call by value와 Call by reference

이번에 다룰 주제는 Call by value, Call by reference 입니다. 함수의 호출 방식에는 Call by value와 Call by reference가 있습니다. 말 그대로 '값에 의한 호출'이냐, '참조에 의한 호출'이냐 라고 할 수 있는..

re-build.tistory.com

 

'Programming > Back-end Language' 카테고리의 다른 글

[개발환경] Spring boot+React 연동하기  (0) 2022.03.23
[Spring] The import org.springframework.boot.test cannot be resolved 해결 방법  (0) 2022.02.21
[JAVA] Servlet 로그인 페이지 만들기 (2) 마지막  (1) 2022.01.05
[JAVA] Servlet 로그인 페이지 만들기 (1)  (1) 2022.01.05
[JAVA] 서블릿 경로설정과 Cycle  (0) 2022.01.04
    'Programming/Back-end Language' 카테고리의 다른 글
    • [개발환경] Spring boot+React 연동하기
    • [Spring] The import org.springframework.boot.test cannot be resolved 해결 방법
    • [JAVA] Servlet 로그인 페이지 만들기 (2) 마지막
    • [JAVA] Servlet 로그인 페이지 만들기 (1)
    sanhaa
    sanhaa
    sanha history book

    티스토리툴바