본문 바로가기
카테고리 없음

[JAVA] 김영한의 자바 입문 - 메서드 호출과 값 전달1

by 집돌이디벨로퍼 2025. 1. 12.

메서드 호출과 값 전달1

자바는 항상 변수의 값을 복사해서 대입한다.

int num2 = num1;
int num2 = 5;
num2 = 10;

int num2 = num1;

num1 이라는 변수 자체가 num2 에 들어가는 것이 아니라 num1 에 들어있는 값을 읽고 복사해서 num2에 넣는 것이다.
간단하게 num1 에 있는 값을 num2 에 대입한다고 표현한다

 

    public static void main(String[] args) {
        int num1 = 5;
        System.out.println("1. changeNumber 호출 전, num1: "+ num1);
        changeNumber(num1);
        //System.out.println("4. changeNumber 호출 후, num1: "+ num1);
    }
    public  static void changeNumber(int num2){
        System.out.println("2. changeNumber 변경 전, num2: "+ num2);
        num2 = num2 * 2;
        System.out.println("3. changeNumber 변경 후, num2: "+ num2);
    }
}

changeNumber 메서드 안에는 num1 자체가 들어간 것이 아니고  num1의 값만 복사해서 넣었기 때문에 기존 num1의 값은 10이 아닌 5로 유지가 된다

 


   public static void main(String[] args) {
        int number = 5;
        System.out.println("1. changeNumber 호출 전, number: "+ number);
        changeNumber(number); // 안쪽에선 값이 바뀐다.
        System.out.println("4. changeNumber 호출 후, number: "+ number);
    }
    public  static void changeNumber(int number){
        System.out.println("2. changeNumber 변경 전, number: "+ number);
        number = number * 2;
        System.out.println("3. changeNumber 변경 후, number: "+ number);
    }

이름이 같아도 변수 number 와 메서드 안에서 사용되는 number 이 number 둘은 다른 메모리에있는  완전히 다른 것


자동 형변환

int < long < double

    int number = 100;
    printNumber(number);
}
// double에 int형 변수를 전달하는 것은 문제가 없다 ==> 자동 형변환이 일어남
// 하지만 int에 double형 변수를 전달하는 것은 문제가 있다.
//
public static void printNumber(double n){
    System.out.println("숫자: "+ n);
}

메서드 오버로딩

 

이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것을 메서드 오버로딩(Overloading) 이라고 한다.

 

오버로딩 규칙

메서드의 이름이 같아도 매개변수의 타입 및 순서가 다르면 오버로딩을 할 수 있다. 참고로 반환 타입은 인정하지 않는다.

다음 케이스는 메서드 이름과 매개변수의 타입이 같으므로 컴파일 오류가 발생한다.반환 타입은 인정하지 않는다.

 

오버로딩 실패

int add(int a, int b)
double add(int a, int b)

 

 

매서드 시그니처 = 메서드 이름 + 매개변수 타입(순서)

 

1.매개변수에 적합한 메서드를 찾는다 
2.없다면 자동형변환해서 호출할수있는 메서드를 찾는다 

public static void main(String[] args) {
    System.out.println("1: "+ add(1,2));
    System.out.println("2: "+ add(1.2,1.5));
}


public static double add (double a, double b){
    System.out.println("2번 호출");
    return  a + b;
} //매개변수의 타입이 다를경우의 오버로딩

//매개변수에 적합한 메서드를 찾는다 =>1
// 없다면 자동형변환해서 호출할수있는 메서드를 찾는다 =>2