1. ๊ถ๊ธ์ฆ์ ๊ฐ์ง ๊ณ๊ธฐ
function solution(s) {
const numbers = s.split(' ').map(Number);
const min = Math.min(...numbers);
const max = Math.max(...numbers);
return `${min} ${max}`;
}
์์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์์ spread syntax๋ฅผ ์ฌ์ฉํ์ง ์๊ณ Math.min( )๊ณผ Math.max( )๋ฅผ ์ ์ฉํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์์ง ์ฐพ์๋ณด๋ค๊ฐ apply ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌ.
2. apply ๋ฉ์๋๋?
apply( )๋ ํธ์ถํ ํจ์์ ์ธ์๋ฅผ ๋ฐฐ์ด ํํ๋ก ๋ฌถ์ด ์ ๋ฌํ๋ค. ๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ์ฝ๋์ ์ฃผ์ด์ง this ๊ฐ๊ณผ ๋ฐฐ์ด ํํ์ ์ธ์๋ฅผ ํจ์์ ์ ์ฉํ ์ ์๊ฒ ํด ์ค๋ค.
const numbers = [5, 6, 2, 3, 7];
const max = Math.max.apply(null, numbers);
console.log(max); // 7
const min = Math.min.apply(null, numbers);
console.log(min); // 2
3. apply( )๋ฅผ ์ฌ์ฉํ ์ด์
JavaScript์์ Math.max( )์ Math.min( ) ํจ์๋ ์ฌ๋ฌ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ ๊ทธ์ค ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋ฐํํ๋๋ฐ, ๋ฐฐ์ด์ ์ง์ ์ ์ผ๋ก ์ธ์๋ก ๋ฐ์ง ์๊ธฐ ๋๋ฌธ์, ๋ฐฐ์ด์ ์๋ ์ฌ๋ฌ ์์๋ค์ ๊ฐ๋ณ ์ธ์๋ก ์ ๋ฌํด์ผ ํ๋ค. ์ด๋ฅผ ์ํด apply( ) ๋ฉ์๋๊ฐ ์ฌ์ฉ๋๋ค.
ํจ์๊ฐ ์ด๋ค ๊ฐ์ฒด์ ๋ฉ์๋๋ก ํธ์ถ๋ ๋, this๋ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค. ํ์ง๋ง ์ผ๋ฐ ํจ์๋ก ํธ์ถ๋๊ฑฐ๋ apply, call ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋๋ this์ ๊ฐ์ด ๋ช
์์ ์ผ๋ก ์ ํด์ง ์ ์๋ค. apply ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋๋ thisArg๋ ํจ์ ๋ด๋ถ์์ ์ฌ์ฉ๋ this์ ๊ฐ์ด๋ค. ๋ณดํต์ ๊ฒฝ์ฐ, Math.max( )์ Math.min( ) ๋ฉ์๋๋ this๊ฐ ์ค์ํ์ง ์๊ธฐ์ null์ด๋ undefined๋ก ์ค์ ํ๋ค.
๊ฐ๋จํ ๋งํด, apply ๋ฉ์๋๋ ๋ฐฐ์ด์ ์์๋ฅผ ๋ณ๋์ ์ธ์๋ก ๋ถ๋ฆฌํ์ฌ ํจ์์ ์ ๋ฌํ๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ ํนํ ๋ฐฐ์ด์ ๋ค๋ฃฐ ๋ ํจ์์ ์ธ์๋ก ์ ๋ฌํด์ผ ํ ๋ ๋งค์ฐ ์ ์ฉํ๋ค.
4. apply( ) ์ฌ์ฉ์ ์ด์
์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ด ๋ฐฐ์ด numbers์ apply( ) ์์ด Math.max( )์ Math.min( )๋ฅผ ์ฌ์ฉํ๋ฉด NaN์ด ์ถ๋ ฅ๋๋ค.
const numbers = [5, 6, 2, 3, 7];
const max = Math.max(numbers);
console.log(max); // NaN
const min = Math.min(numbers);
console.log(min); // NaN
์ ๋ฆฌํ์๋ฉด apply( )๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์๋์ ๊ฐ๋ค.
(1) ๋ฐฐ์ด ์์๋ฅผ ๊ฐ๋ณ ์ธ์๋ก ๋ณํ
apply( ) ๋ฉ์๋๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ก this ๊ฐ(์ฌ๊ธฐ์๋ null ๋๋ undefined)์ ๋ฐ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ก ์ธ์ ๋ชฉ๋ก์ ๋ฐฐ์ด ํํ๋ก ๋ฐ๋๋ค. apply( )๋ ์ด ๋ฐฐ์ด์ ์์๋ค์ ๊ฐ๋ณ ์ธ์๋ก ํจ์์ ์ ๋ฌํ๋ค. ์ด๋ Math.max( )๋ Math.min( )๊ณผ ๊ฐ์ด ์ฌ๋ฌ ์ธ์๋ฅผ ๋ฐ๋ ํจ์์ ๋ฐฐ์ด์ ์์๋ค์ ๊ฐ๋ณ ์ธ์๋ก ์ ๋ฌํ๊ธฐ ์ํด ํ์ํ๋ค.
(2) ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ธ ์ฝ๋ ์์ฑ
๋ฐฐ์ด์ ์ ์ฅ๋ ์ฌ๋ฌ ๊ฐ์ Math.max( )๋ Math.min( )์ ์ ๋ฌํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐ์ด์ ํด์ฒดํด์ผ ํ๋ค. ํ์ง๋ง apply( )๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ์ค์ผ ์ ์์ด, ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค.
5. apply ์์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๊ทธ๋ฆฌํ์ฌ.. ES6 ์ดํ์๋ apply( )๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ ๊ฐ ๊ตฌ๋ฌธ(spread syntax) ๋ฌธ๋ฒ(...)์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด ์์๋ฅผ ๊ฐ๋ณ ์ธ์๋ก ํจ์์ ์ ๋ฌํ ์ ์๋ ๊ฒ์ด๋ค. spread syntax๋ฅผ ์ฌ์ฉํ๋ฉด apply( )์ ์ ์ฌํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ์ง๋ง ๋ ๊น๋ํ๊ณ ํ๋์ ์ธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ค.
const numbers = [5, 6, 2, 3, 7];
const max = Math.max(...numbers); // 7
const min = Math.min(...numbers); // 2
6. call๊ณผ์ ์ฐจ์ด
call( ) ๋ํ ํธ์ถํ ํจ์์ ์ธ์๋ฅผ ์ผํ๋ก ๊ตฌ๋ถํ ๋ฆฌ์คํธ ํ์์ผ๋ก ์ ๋ฌํ๋ค. ์ด์ฒ๋ผ apply( )์ call( )๋ ํธ์ถํ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์๋ง ๋ค๋ฅผ ๋ฟ, this๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋์ผํ๋ค.
function getThisBinding() {
console.log(arguments);
return this;
}
// this๋ก ์ฌ์ฉํ ๊ฐ์ฒด
const thisArg = { a: 1 };
console.log(getThisBinding.apply(thisArg, [1, 2, 3]));
// Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
// {a: 1}
console.log(getThisBinding.call(thisArg, 1, 2, 3));
// Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
// {a: 1}
7. splice์ ์ฌ์ฉํ๊ธฐ
const arr1 = [1, 4];
const arr2 = [2, 3];
arr1.splice(1, 0, arr2);
์ ์์ ์ ๋ฐ๋ฅด๋ฉด 3๋ฒ์งธ ์ธ์ arr2๋ฅผ ํด์ฒดํด ์ ๋ฌํด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด arr1์ arr2 ๋ฐฐ์ด์ด ์ถ๊ฐ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ apply()๋ฅผ ์ด์ฉํด splice()๋ฅผ ํธ์ถํด์ผ ํ๋ค. apply()์ ๋ ๋ฒ์งธ ์ธ์(๋ฐฐ์ด)๋ apply()๊ฐ ํธ์ถํ๋ ํจ์์ ํด์ฒด๋์ด ์ ๋ฌ๋๋ค.
const arr1 = [1, 4];
const arr2 = [2, 3];
Array.prototype.splice.apply(arr1, [1, 0].concat(arr2));
console.log(arr1) // [1, 2, 3, 4]
๋จ, ์๋์ ๊ฐ์ด ์คํ๋ ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋์ฑ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ ์ข๊ฒ ํํํ ์ ์๋ค.
const arr1 = [1, 4];
const arr2 = [2, 3];
arr1.splice(1, 0, ...arr2);
console.log(arr1) // [1, 2, 3, 4]
8. ๊ฒฐ๋ก
๊ฒฐ๋ก ์ ์ผ๋ก, apply( )๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฃผ๋ก ๊ตฌํ ์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์ ํ์ํ๋ฉฐ, ํ๋์ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ spread ๋ฌธ๋ฒ์ด ๋์ฑ ๊ฐ๊ฒฐํ๊ณ ์ ํธ๋๋ ๋ฐฉ์์ด๋ค.
'๐ Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด๋ฑํ์๋ ์ดํดํ๊ธฐ ์ฌ์ด ์๋ฐ์คํฌ๋ฆฝํธ '๋จ์ถํ๊ฐ' (0) | 2023.09.24 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ symbol์ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น? (0) | 2023.09.19 |
์ ๊ณ ์ฐจํจ์์์๋ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ์ ์ ๊ฑฐํ ๊น? (0) | 2023.09.17 |
์์๋๋ฉด ์ฌ๋ฏธ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ญ์ฌ (1) | 2023.09.10 |
์ ES6๋ถํฐ ํด๋์ค ๊ฐ๋ ์ด ์ถ๊ฐ๋๊ฑธ๊น? (0) | 2023.09.07 |
๋๊ธ