JAVA 인자 전달 방법

nathan·2021년 3월 29일
1

JAVA

목록 보기
3/45

가끔 함수를 작성하곤 할 때, 인자 전달 및 매개변수의 전달 방식이 헷갈려 헤매던 경우가 있었다.

이를 방지하고자 이번 포스트에서 정리를 해보려고 한다.

우선 인자 전달 및 매개변수의 전달 방식에는 총 2가지 방법이 존재한다.

  1. 값의 전달(Call by value)
  2. 객체의 전달(Call by reference)

1. 기본 타입의 값 전달(call by value)

  • 값이 복사되어 전달 된다.
  • 메소드의 매개변수가 변경되어도 호출한 실인자 값은 변경되지 않는다.


2. 객체 혹은 배열 전달(call by reference)

  • 객체나 배열의 레퍼런스만 전달한다.
  • 객체 혹은 배열이 통째로 복사되어 전달되는 것이 아니다.
  • 메소드의 매개변수와 호출한 실인자 객체나 배열을 공유한다.

예제 코드

package week_4;

// 매개변수 전달 방법 비교

class myChar{
    char x;
    char y;
}

public class Ex04_09 {
    static char func1(char x, char y){
        char imsi;
        imsi = x;
        x = y;
        y = imsi;
    }

    static void func2(myChar ch){
        char imsi;
        imsi = ch.x;
        ch.x = ch.y;
        ch.y = imsi;

    }

    public static void main(String[] args) {
        char x = 'A', y = 'Z';
        System.out.printf("원래 값 : x = %c, y = %c\n", x, y); // A, Z
        func1(x, y);
        System.out.printf("값을 전달 후 : x = %c, y = %c\n", x, y); // A, Z (변함 없음 - 값이 복사된 것일 뿐이기 때문)

        myChar ch = new myChar();
        ch.x = 'A';
        ch.y = 'Z';
        System.out.printf("원래 값 : x = %c, y = %c\n", ch.x, ch.y); // A, Z
        func2(ch);
        System.out.printf("값을 전달 후 : x = %c, y = %c\n", ch.x, ch.y); // Z, A (변함 있음 - 레퍼런스를 전달하여 실제 값을 공유한다.)
    }
}
profile
나는 날마다 모든 면에서 점점 더 나아지고 있다.

0개의 댓글