인자와 매개변수

mingseok·2022년 5월 14일
0

객체 지향 1

목록 보기
10/10

메서드를 호출할 때 괄호( ) 안에 지정해준 값들을 ‘인자’ 또는 ‘인수’ 라고 한다.

인자의 개수와 순서는 호출된 메서드에 선언된 매개변수(파라미터) 와 일치해야 한다.

int result = add(1, 2, 3); // '인자' 또는 '인수'


그리고 인자는 메서드가 호출되면서 매개변수에 대입되므로,
인자의 타입은 매개변수의 타입과 일치하거나 자동 형변환이 가능한 것이어야 한다.


만일 메서드에 선언된 매개변수의 개수보다 많은 값을 괄호( ) 에
넣거나 타입이 다른 값을 넣으면 컴파일러가 에러를 발생 시킨다.

class aaa {
	int add(int x, int y) {
	     int result = x + y;
         return result;
	}
}

class bbb {
    public static void main(String[] args) {
		int result = add(1, 2, 3); // 에러. 매개변수의 개수가 다름
		int result = add(1.0, 2.0); // 매개변수의 타입이 다름	               
        }
}

메서드의 실행흐름

같은 클래스 내의 메서드끼리는 참조변수를 사용하지 않고도 서로 호출이 가능하지만
static 메서드는 같은 클래스 내의 인스턴스 메서드를 호출할 수 없다.


aaa 클래스의 add(int x, int y)를 호출하기 위해서는 먼저 aaa a = new aaa( ); 와 같이 해서,
aaa클래스의 인스턴스를 생성한 다음 참조변수 a을 통해서 해야 한다.

class aaa {
    int add(int x, int y) {
	int result = x + y;
        return result;
	}
}	

class bbb {  
    public static void main(String[] args) {
		aaa a = new aaa();
		int result = a.add(5L, 3L);
	}
}

자동 형변환

호출 시에 입력된 값은 메서드의 매개변수에 대입되는 값이므로,
long형의 값을 double 형변수에 저장하는 것과 같아서 ‘double a = 5L;’ 을 수행 했을 때와
같이 long형의 값인 5L은 double형 값인 5.0으로 자동 형변환 되어 divide의 매개변수 a에 저장된다.


그래서 divide 메서드에 두 개의 정수값(5L, 3L)을 입력하여 호출하였음에도 불구하고
연산결과가 double형의 값이 된다.


이와 마찬가지로 add(long a, long b) 메서드에도 매개변수 a, b 에 int형의 값을
넣어 add(5, 3) 과 같이 호출하는 것이 가능하다.


코드로 보면 이렇다. (자세히 봐야 할건 double 과 int 자동형변환 부분이다.)

class My {
    long add(long a, long b) {
        long result = a + b;
        return result;
    }

    long subtract(long a, long b) {
        return a - b;
    }

    long multiply(long a, long b) {
        return a * b;
    }

    double divide(double a, double b) {
        return a / b;
    }
}

class aaa {
    public static void main(String[] args) {

        My mm = new My();
        long result1 = mm.add(5, 3); // 업케스팅
        long result2 = mm.subtract(5L, 3L);
        long result3 = mm.multiply(5L, 3L);
        double result4 = mm.divide(5L, 3L); // 업케스팅

        System.out.println("add :" + result1);
        System.out.println("subtract :" + result2);
        System.out.println("multiply :" + result3);
        System.out.println("divide :" + result4);

    }
}

출력 값.

add : 8
<br/>subtract : 2
<br/>multiply : 15
<br/>divide : 1.6666666666666667

Reference
남궁 성 지음, 『자바의 정석』, 도우출판.

profile
블로그 이사 했습니다.

0개의 댓글