public static
int add (int a,int b)
메서드 호출과 용어 정리
메서드를 호출할 때는 다음과 같이 메서드에 넘기는 값과 매개변수(파라미터)의 타입이 맞아야 한다. 물론 넘기는 값과 매개변수(파라미터)의 순서와 갯수도 맞아야한다.
호출 : call("hello",20)
메서드 정리 : int call(String str, int age)
인수(Argument)
여기서 "hello",20 처럼 넘기는 값을 영어로 Argumnet라고 한다 한글로는 (인수,인자) 라고 한다.. 실무에서는 아규먼트,인수,인자라고 모두 사용!!
매개변수(Parameter)
메서드를 정의할때 선언한 변수 String str , int age 를 매개변수 , 파라미터라고 함..
메서드 정의
public static int add(int a, int b) {
//메서드 본문, 실행 코드
}
제어자 반환타입 메서드이름(매개변수 목록) {
메서드 본문
}
매개변수가 없는 경우
선언: public static void printHeader() 와 같이 매개변수를 비워두고 정의하면 된다.
호출: printHeader(); 와 같이 인수를 비워두고 호출하면 된다.
반환 타입이 없는 경우
선언: public static void printHeader() 와 같이 반환 타입을 void 로 정의하면 된다.
호출: printHeader(); 와 같이 반환 타입이 없으므로 메서드만 호출하고 반환 값을 받지 않으면
된다.
String str = printHeader(); 반환 타입이 void 이기 때문에 이렇게 반환 값을 받으면 컴파일 오류가 발생한다.
자바는 항상 변수의 값을 복사해서 대입한다
package method;
public class MethodValue0 {
public static void main(String[] args) {
int num1 = 5;
int num2 = num1;
num2 = 10;
System.out.println("num1=" + num1);
System.out.println("num2=" + num2);
}
}
실행 결과
num1=5
num2=10
실행 과정
int num2 = num1; //num1의 값은 5이다. num1(5)
int num2 = 5; //num2 변수에 대입하기 전에 num1의 값 5를 읽는다. 결과: num1(5), num2(5)
num2 = 10; // num2에 10을 대입한다. 결과: num1(5), num2(10)
여기서 값을 복사해서 대입한다는 부분이 바로 이 부분이다.
int num2 = num1;
이 부분은 생각해보면 num1 에 있는 값 5 를 복사해서 num2 에 넣는 것이다.
복사한다고 표현한 이유는 num1 의 값을 읽어도 num1 에 있는 기존 값이 유지되고, 새로운 값이
num2 에 들어가기 때문이다. 마치 num1 의 값이 num2 에 복사가 된 것 같다.
num1 이라는 변수 자체가 num2 에 들어가는 것이 아니다.
num1 에 들어있는 값을 읽고 복사해서 num2 에 넣는 것이다.
간단하게 num1 에 있는 값을 num2 에 대입한다고 표현한다. 하지만 실제로는 그 값을 복사해서 대입
하는 것이다.
너무 당연한 이야기를 왜 이렇게 장황하게 풀어서 하지? 라고 생각한다면 이제 진짜 문제를 만나보자