본문 바로가기
JS/JavaScript 강의

43. Default Parameters, Reference Arguments In Function

by 박기린 2022. 11. 25.

안녕하세요. 박기린 입니다.

이번엔 함수의 '인수'에 관련된 내용인 '기본값'과 'Reference type'에 대해 알아보겠습니다.

 

 

 

Default Parameters

ES6 부터는 함수의 인수 옆에 '= (할당연산자)'를 붙인 후, expression을 넣어주면 default value(기본값)으로 설정됩니다.

 

const bookings = [];
const createBooking = function(flightNum, numPassengers = 1, price = 199 * numPassengers) {

// ES5 방식
// numPassengers = numPassengers || 1;
// price = price || 199;

    const booking = {
        flightNum,
        numPassengers,
        price,
    };
    console.log(booking);
    bookings.push(booking);
};

ES5까지의 버전에는 OR( || )연산자를 이용해서 함수의 기본값을 설정해줘야 했습니다.

하지만 ES6와 함께 현대적인 프로그램 방식이 도입되었습니다.

 

 

 

createBooking('LH123');
createBooking('LH123', 2, 800);

결과값입니다.

 

 

 

createBooking('LH123', undefined, 800);

만약 처음과 끝이 아닌 중간에 선언된 인수인 경우, Undefined로 넘어가서 기본값이 불러와지게 끔 하면 됩니다.

 

 

 

 

 


Reference Type Arguments

함수에 인수를 전달할 때 전달한 인수의 데이터 타입이 Reference type (Object, Array, Function) 이라면, 함수 내에서 변경된 사항이 전역에서도 적용됩니다.

 

const checkIn = function(flightNum, passenger) {
    flightNum = 'LH999'; // primitve type이므로 단순 복사가 일어남
    passenger.name = 'Mr. ' + passenger.name; // object이므로 reference type이기에 참조 주소로 이어짐.

    if(passenger.passport === 1243242351) {
        alert('Checked In');
    } else {
        alert('Wrong Passport');
    }
}

checkIn 함수가 있습니다.

1. flightNum은 비행기 번호를 String Type으로 받습니다. - Primitive Type

2. passenger는 탑승객의 정보를 Object Type으로 받습니다. - Reference Type

 

flightNum은 'LH999'

passenger는 name property에 'Mr. ' String을 덧붙이는 작업이 있습니다.

 

 

 

const flight = 'LH234';
const giraffe = {
    name: 'park giraffe',
    passport: 1243242351,
}

이제 위와 같은 변수를 만들어 준 다음에,

 

checkIn(flight, giraffe);
console.log(flight); // LH234 <- primitive type
console.log(giraffe); // Mr. park yosep <- reference type

checkIn 함수에 인수로 전달한 후, 콘솔을 확인해줍니다.

 

 

 

결과값입니다.

flight는 checkIn 함수를 거쳤음에도 원본과 똑같지만, giraffe의 name property는 checkIn 함수를 거친 후 변화된 value가 그대로 이어지고 있음을 확인할 수 있습니다.

 

 

 

 

 


코드 전문

const bookings = [];
const createBooking = function(flightNum, numPassengers = 1, price = 199 * numPassengers) {

// ES5 방식
// numPassengers = numPassengers || 1;
// price = price || 199;

    const booking = {
        flightNum,
        numPassengers,
        price,
    };
    console.log(booking);
    bookings.push(booking);
};

createBooking('LH123');
createBooking('LH123', 2, 800);
createBooking('LH123', undefined, 800);
const flight = 'LH234';
const giraffe = {
    name: 'park giraffe',
    passport: 1243242351,
}

const checkIn = function(flightNum, passenger) {
    flightNum = 'LH999'; // primitve type이므로 단순 복사가 일어남
    passenger.name = 'Mr. ' + passenger.name; // object이므로 reference type이기에 참조 주소로 이어짐.

    if(passenger.passport === 1243242351) {
        alert('Checked In');
    } else {
        alert('Wrong Passport');
    }
}

checkIn(flight, giraffe);
console.log(flight); // LH234 <- primitive type
console.log(giraffe); // Mr. park yosep <- reference type

 

반응형