혼돈의 매개변수와 인수간의 호칭

잘 알고 쓰는 사람도 많지만, 코드를 설명하거나 할 때 이 매개변수와 인수라는 용어의 차이를 구분하지 못해서 단어가 계속 뒤섞이고 혼동해서 사용하는 개발자들이 많다. 다음 코드를 보며 얘기를 해보자.

public class TestClass{
	public void execute(Collection<Integer> list){
		for(Integer num : list){
			System.out.println("num: "+ num);
		}
	}
}

public class Main {
	public static void main(String[] args){
		TestClass tc = new TestClass();
		List<Integer> list = new ArrayList<>();

		list.add(1);
		list.add(2);

		tc.execute(list);
	}
}

여기서 로직을 설명할때 Collection<Integer> list는 인수일까 매개변수일까? 그리고 tc.execute(list)부분의 list는 인수일까 매개변수일까?

매개변수는 메서드 선언에 정의한 변수

인수는 메서드 호출 시 넘기는 실제 값

즉, Collection<Integer> list는 매개변수가 되고, main 로직안의 list는 인수값이 된다.

그래서, 매개변수 타입은 Collection 이라 하고 인수 타입은 List라고 불러야 함이 맞다.

보통은 이 두 개의 단어를 명확하게 구분하지 않고, 다들 적당히 섞어서 말해도 알아서 이해하기에 크게 신경쓸 내용은 아니지만, 나 역시 포스팅을 하고 얘기를 할 때 이 두 단어가 계속 섞이면서 반대로 말하는 경우도 많았다.

자바 언어 명세에서는 위와같이 정의를 했으니, 소소하지만 헷갈리지 말고 사용하도록 하자.