자바스크립트로 함수를 작성하고 사용할때, 흔히 parameter, 패러미터는 아주아주 편리하게 보편적으로 쓰인다. 자연스럽게 의심하지 않고 사용했었는데, 코드스테이츠 부트캠프에 참여하면서 내가 알고있던 parmeter가 함수를 작성할때와 함수를 호출할 때 각각 다르게 불린다는 것을 알게되었다.
사실 실무를 할 때에 이 명칭을 모른다고 의사소통이 어려웠던 적은 없으나, 용어를 나눠 놓은 만큼 두 가지에 대해 생각해 보면 좋겠다 싶어서 구글링을 해봤다.
플러스, 비전공자가 전문용어에 약해 기술면접에서 좋은 점수를 얻지 못한다고 하는데(뼈를 맞았다), 나름대로 정리를 한번 하는 것이 내 머리속에 더 잘 남을 것 같아서 이렇게 글을 쓰기로 했다.
🚩매개변수(parameter,인수)란 지역변수를 선언하는 것
수업중에 어떤 분이 '매개변수는 함수 안에서 let으로 선언을 하지 않아도 되나요?' 라고 질문을 하셨는데, 내가 당연하게 생각하고 있던 parameter의 특징을 짚어주신 것 같았다. 말그대로 매개변!수!! 변수인것이다!!!
parameter는 let으로 선언하지 않아도 함수내에서 통용되는 지역변수와 같다. let 대신 괄호안에 변수를 넣음으로써 선언을 대체하고, 함수 안에서 변수가 통용되도록 한다.
이렇게 생각해보니 인수란 것은 함수를 호출할때 간편하게 값을 전달할 수 있도록 괄호안에 지역변수를 선언하는 효율적인 표현법인걸 새삼 깨닫게 되었다.
function callCustomer(number,item){
console.log(`${number}번 고객님,주문하신 ${item}나왔습니다.`)
}
callCustomer(402,'아이스아메리카노');
//402번 고객님, 주문하신 아이스아메리카노 나왔습니다
callCustomer(403,'아이스라떼');
//403번 고객님, 주문하신 아이스라떼 나왔습니다
위의 코드처럼 함수로 변수를 전달하니까 엄청 편리한 자판기처럼 각각의 값에 맞는 결과가 튀어 나온다.
이걸 아래와 같이 전역변수로 바꾸어서 대응한다고 생각해보면 얼마나 지저분한지..🤮
let number,item;
function callCustomer(){
console.log(`${number}번 고객님,주문하신 ${item}나왔습니다.`)
}
number=402;
item='아이스아메리카노';
callCustomer();
//402번 고객님, 주문하신 아이스아메리카노 나왔습니다
number=403;
item='아이스라떼';
callCustomer();
//403번 고객님, 주문하신 아이스라떼 나왔습니다
🏷️전달인자(argument)란 지역변수에 값을 할당하는것
이렇게 parameter가 함수 내에서 지역변수를 선언하는 것이라면,
함수를 호출하면서 parameter로 선언된 변수로 사용될 값을 함께 전달하는 일은 곧, 값을 할당하는 과정이다.
function callCustomer(number,item){
console.log(`${number}번 고객님,주문하신 ${item}나왔습니다.`)
}
callCustomer(402,'아이스아메리카노');
위에서 호출되는 순간 함수 내에서는
number=402;
item='아이스아메리카노'; //지역변수에 값을 할당
console.log(`${number}번 고객님,주문하신 ${item}나왔습니다.`)
//402번 고객님, 주문하신 아이스아메리카노 나왔습니다
이렇게 값 할당이 이루어져서 임무를 수행하는 것이다.
😗그러니까 parameter와 argument 용어는 섞어 쓰면 안된다.
사소하고 대부분이 당연하게 여길것 같은 이런 내용을 장황하게 정리하는 것은 민망하게도 모두 내가 이전부터 이 둘을 섞어서 사용했기 때문이다.하하..
"parameter를 전달해서 이렇게 계산을 한 다음에..." 내가 평소에 할 법한 이 말은
"변수를 전달해서 이렇게 계산을 한 다음에..." 와 같다. 변수를 전달한다? 말이 안되지!
이보다는 "(선언된 변수에) 값을 할당해서 계산을 한 다음에... "가 의도에 맞을 것이다.
"argument를 할당해서 이렇게 계산을 한 다음에..." 이렇게!
새삼 당연하다고 생각하는 것을 한번 더 생각하는 것이 얼마나 중요한지 깨닫게 된다. 그냥 그런가보다~~ 하고 넘기는 나의 습관이 정말 무섭다.....당연하다고 생각하는 것을 설명해 보라면 항상 내 오만이었다는 것을 깨닫는달까... 😂
'개념 > javaScript' 카테고리의 다른 글
[javaScript] 스코프와 let,const,var (0) | 2022.07.12 |
---|---|
[javaScript]원시자료형과 참조자료형 (0) | 2022.07.11 |
[javaScript] for문과 제곱근 사용해서 소수인지 알아내기 (0) | 2022.06.29 |
[javaScript] 연산자 우선순위: 조건문에서 num1<num2<num3이 안되는 이유 (0) | 2022.06.27 |
[javaScript] 값의 타입에 대하여 (0) | 2022.06.24 |