쌓고 쌓다

[JAVA] 함수(메소드)의 매개변수 본문

프로그래밍/java

[JAVA] 함수(메소드)의 매개변수

승민아 2021. 12. 21. 20:12
    static void plusOne(int a)
    {
        a+=1;
    }

    public static void main(String[] args) {

        int num = 10;
        plusOne(num);
        System.out.print(num);

    }

plusOne함수는 매개변수를 1을 더해주는 함수이다.

여기다 int num = 10; 으로 선언된 num 함수의 인자로 전달해준다면

아래와 같은 출력을 보인다.

num에 1을 plusOne함수를 통해 1을 더헀지만 그대로 num은 10을 가지고 있다.

이는 아래의 경우라서 값의 증가는 이루어 지지 않았다.

매개변수로 기본 타입의 인자가 전달 되는 경우

매개변수로 기본 타입 ( byte, char, short, int, long, float, double, boolean ) 이 전달되는 경우

    static void plusOne(int a)
    {
        a+=1;
    }

함수 매개변수의 int a에는 num의 값이 복사가 될뿐 실제 num의 값 증가로 이어지진 않는다.

이런 걸 call by value로 그냥 값의 복사만 이루어지는 걸 뜻한다.

 

배열의 레퍼런스를 전달

public class Main {

    static void plusOne(int a[])
    {
        for(int i=0;i<a.length;i++)
            a[i]+=1;
    }

    public static void main(String[] args) {

        int num [] = {1,2,3,4,5};

        plusOne(num);

        for(int i=0;i<num.length;i++)
            System.out.print(num[i]+" ");

    }
}

int 배열 레퍼런스 num을 전달한다면 통채로 배열 복사가 이루어 지진 않고

num 레퍼런스 ( 배열에 대한 레퍼런스 )만 전달이 된다.

 

그러므로 실제 1,2,3,4,5를 원소로 갖던 값들이 1씩 증가해 2,3,4,5,6을 출력한다.

 

객체의 전달

class Person
{
    public int age;

    public Person(int age)
    {
        this.age=age;
    }

}


public class Main {

    static void plusAge(Person p)
    {
        p.age+=1;
    }

    public static void main(String[] args) {

        Person person = new Person(9);

        plusAge(person);

        System.out.print(person.age);


    }
}

plusAge는 perosn 객체의 레퍼런스를 받아 age를 1을 더해주는 함수이다.

실제로 person(객체의 레퍼런스)을 전달하였더니 age가 1이 증가가 된 것을 확인할 수 있다.

 

배열이 전달되는것과 같은 방식이다.

 

'프로그래밍 > java' 카테고리의 다른 글

[JAVA] 접근 지정  (0) 2021.12.22
[JAVA] 함수(메소드) 오버로딩  (0) 2021.12.22
[JAVA] 객체 배열  (0) 2021.12.21
[JAVA] this 와 this()  (0) 2021.12.21
[JAVA] 생성자  (0) 2021.12.20
Comments