Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

우주코딩

가변 파라미터와 배열 파라미터, 로컬변수와 파라미터, call by value, call by reference 본문

자바 본 강의

가변 파라미터와 배열 파라미터, 로컬변수와 파라미터, call by value, call by reference

우주코딩 2021. 7. 14. 17:55

가변 파라미터

[리턴타입] 메서드명 (타입 ... 변수){...}
0개 이상의 값을 받을 때 선언하는 방식
메서드 내부에서 배열처럼 사용한다.

static void hello(String... names){
    for (int i =0; i <names.length; i++) {
        Sysout("%s님 반갑습니다.\n");
    }
}
hello("홍길동", "임꺽정", "방우주")

이 경우 세개의 문자열이 저장되어 print 된다.
가변 파라미터 자리에 배열을 직접 넣어도 된다.

String[] arr = {"홍길동", "임꺽정", "방우주"};

다른 데이터 타입을 입력할 수 없다.
가변 파라미터는 변수 선언 맨 끝에 와야한다.

배열 파라미터

static void hello2(String[] names) {
 for (int i = 0; i < names.length; i++) {
  System.out.printf("%s님 반갑습니다.\n", names[i]);
 }
}

배열 파라미터의 메서드를 호출할 때는
=> 가변 파라미터와 달리 낱개의 값을 여러 개 줄 수 없다!
오직 배열에 담아서 전달해야 한다.

String[] arr2 = {"김구", "안중근", "윤봉길", "유관순"};
hello2(arr2);

가변 파라미터는
하나의 파라미터에 여러 배열을 선언할 수 없다.

배열 파라미터는
하나의 파라미터에 여러 배열을 선언할 수 있다.

로컬변수, 파라미터

로컬변수 - 메서드가 호출될 때 생성되는 변수 (JVM Stack에 저장됨) 호출 끝나면 사라짐
파라미터 - 메서드가 호출될 때 값을 넘겨받는 변수
파라미터 ⊂ 로컬변수

primitive data type 변수와 reference

int a;
float b;
boolean c; // 1 또는 0
char d; //유니코드 값


int[] arr; // arr는 배열의 주소
주소를 저장하는 변수를 "레퍼런스(reference)" 라고 한다.
C언어에서는 "포인터(pointer)"라고 한다.

primitive 변수는 '값' 을 저장하고 그 외 reference 는 '주소'를 저장한다

call by value

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

    swap(a, b);

swap() 메서드 호출할 때 main() 안의 a 변수의 값과 b 변수의 값을 넘긴다.
비록 swap()에서 a와 b라는 이름의 변수가 있지만,
이 변수는 main()에 있는 변수와 다른 변수이다.
call by value
아규먼트가 primitive data type인 경우,
메서드를 호출할 때 값을 넘긴다.
자바에서는 primitive data type에 대해서
메모리(변수) 주소를 넘기는 방법이 없다.

call by reference

call by value 와 다르게 변수의 값이 아닌 주소를 파라미터에 넘긴다.
예를 들어

static void main(String[] args) {
    int[] arr = new int[] {100, 200}
    swap(arr); // call by reference

static void swap(int[] arr){
    int temp = arr[0];
    arr[0] = arr[1];
    arr[1] = temp;
}

이라면 Method Area 에서 main() 이 실행될 때 Heap에 arr 주소 값이 형성된다.
그 주소값을 swap 메서드로 호출을 하면 Heap에 담긴 arr 값을 넘긴다. (call by reference)
swap() 메서드에서 배열의 값 변환이 이루어지고 나서 그대로 실행을 종료하면
변환된 배열 값이 그대로 arr 주소에 남아있고
main() 메서드에서 arr 주소를 출력하는 명령을 실행하면 swap에서 변환된 값이 그대로 출력된다.

Heap에 생성된 메모리는 JVM이 종료될 때 까지 남아있다.

Comments