자바스크립트 코딩의 기술_매개변수와 return 문을 정리하라_1
자바스크립트 2021. 6. 19. 20:32(본 포스팅은 길벗의 '자바스크립트-코딩의 기술' 책을 공부하면서 작성되었습니다_내돈내산)
1. 매개변수 기본값을 생성하라
- 초기 매개변수를 정한 후, 코드가 늘어나고 예외적인 경우가 늘어나면 처음 지정했던 매개변수로 문제를 다 처리할 수 없는 상황이 발생한다.
- 이런경우 매개변수를 처리하는데 다양한 기법이 있는데, 가장 쉬운 방법은 매개변수 기본값을 사용하는 방법이다.
- 자바스크립트에서는 함수에 모든 매개변수를 전달할 필요가 없다. 매개변수를 누락하게 되면 값은 undefined가 되어 함수에서 작동하게 된다.
// 매개변수값의 전달여부에 따라 값이 바뀌도록 코딩한 경우
function convertWeight(weight, ounces, roundTo) {
const oz = ounces / 16 || 0; // ounces 값이 있냐없냐에따라 값이 두가지로 나누어짐
const total = weight + oz;
const conversion = total / 2.2;
// 반올림자릿수를 지정하기 위함. 삼항연산자를 쓰지 않은 이유는 0이 false로 처리되는 오류를 방지하기 위함.
const round = roundTo === undefined ? 2 : roundTo;
return roundToDecimalPlace(conversion, round);
}
// 매개변수 기본값을 지정해준 경우
// 본 코드의 경우 개발자에게 각 변수의 자료형까지 명시적으로 알려줄 수 있음.
// 매개변수에 undefined를 넣으면 저절로 지정된 변수를 사용하도록 함.
// 하지만 이런경우 undefined가 아닌 null을 보내는 경우 오류를 발생시킬 수 있으니 주의를 기울여야한다.
function convertWeight(weight, ounces = 0, roundTo = 2) {
const total = weight + (ounces / 16);
const conversion = total / 2.2;
return roundToDecimalPlace(conversion, roundTo);
}
2. 해체 할당으로 객체 속성에 접근하라.
- 매개변수는 항상 순서를 지켜야 한다. 두 번째 매개변수는 중요하지 않으면서 세번째 매개변수를 입력하고 싶은 경우에도 반드시 두 번째 매개변수에 값을 입력해야 한다.
- 함수에 인수가 여러개 필요한경우, 또는 함수 요구사항이 변경될 것을 미리 알고 있는 경우 자바스크립트에서는 추가적인 인수를 객체에 담아 함수의 마지막 매개변수로 전달하게 된다.
- 엄청많은 정보를 가지고 있는 객체를 함수의 매개변수로 전달하게 되는 경우, 필요한 정보를 꺼내기 위해 점표기법을 사용하거나 객체를 조작하는 행위가 있을 수 있다. 하지만 이런경우 상당히 복잡하고 번거로운 작업이 이루어져야함을 알 수 있다.
function displayPhoto(photo) {
const title = photo.title;
const photographer = photo.photographer || 'Anonymous';
const location = photo.location;
const url = photo.src;
const copy = { ...photo };
delete copy.title;
delete copy.photographer;
delete copy.location;
delete copy.src;
const additional = Object.keys(copy).map(key => `${key}: ${copy[key]}`);
return (`
<img alt="Photo of ${title} by ${photographer}" src="${url}" />
<div>${title}</div>
<div>${photographer}</div>
<div>Latitude: ${location[0]} </div>
<div>Longitude: ${location[1]} </div>
<div>${additional.join(' <br/> ')}</div>
`);
}
// 이런 경우 코드의 절반이상을 객체에서 정보를 가져오는데 할애하고 있는 것을 알 수 있다.
- 위와같은 경우 자바스크립트에서는 해체할당이라는 과정을 통해 객체에 있는 정보를 곧바로 변수에 할당할 수 있게 된다. 해체할당의 경우
- 객체에 있는 키와 같은 이름의 변수를 생성하고,
- 객체에 있는 키에 연결된 값을
- 생성된 변수의 값으로 할당함으로 이루어진다.
const landscape = {
photographer: 'Nathan',
}
const { photographer } = landscape
// photographer변수에 landscape.photographer 의 값이 할당됨.
photographer // 'Nathan'
- 해체할당의 경우
- const 의 사용을 추천하며.
- 값을 할당하는 변수의 이름은 객체에 있는 키값과 반드시 일치해야 함.
- 변수가 객체를 이용해서 선언되었음.
(중괄호가 의미하는 것은 변수에 할당되는 값이 객체에 있다는 것을 나타내게 됨.)
- 만일 객체에 키가 존재하지 않는 경우 값이 undefined가 되지만, 해체할당 하면서 동시에 기본값을 설정할수있음.
- 키의 이름을 모르고, 객체에 남아있는 정보를 가져오고 싶은 경우 '...additional' 을 사용해 가져올 수 있다. - g해체할당의 큰 장점은 해체할당을 함수의 매개변수에 적용할 수 있다는 점이다. 해체할당을 매개변수에 사용하면, 변수를 선언하지 않아도 마치 정보를 함수 몸체에서 할당한 것처럼 작동한다. 참고로 해체할당은 let으로 변수를 할당하기 때문에 해당 변수의 재할당 또한 가능하다.
const landscape = {};
const { photographer = 'Anonymous', title } = landscape
console.log(photographer) // 'Anonymous'
console.log(title) // undefined
-------------------------------------------------------------------------------------
const landsacpe = {
photographer : 'Nathan',
equipment : 'Canon',
format : 'digiral'
};
const {
photographer,
...additional
} = landscape;
additional;
// { equipment: 'Canon', format: 'digital' } // additional 이외의 다른 키값의 정보는 삭제한 것과 같은 결과
-------------------------------------------------------------------------------------
const landscape = {
src : '/landscape-nm.jpg'
};
// 객체의 src의 내용을 url 이라는 변수에 할당하는 경우
const { src: url } = landscape;
src;
//ReferenceError: scr is not defined
url;
// 'landscape-nm.jpg'
-------------------------------------------------------------------------------------
// 배열에 해체할당을 진행하는 경우
// 객체를 꺼내고 배열을 해체할당하는 경우
const landscpae = {
location : [32.712222, -103.1405556],
};
const { location } = landscape;
const [latitude, longitude] = location
// 객체를 꺼내지않고 바로 해체할당하는 경우
const { location: [latitude,longitude] } = landscape;
latitude // 32.712222
longitude // -103.140555
function displayPhoto({
title,
photographer = 'Anonymous',
location: [latitude, longitude],
src: url,
...other
}) {
const additional = Object.keys(other).map(key => `${key}: ${other[key]}`);
return (`
<img alt="Photo of ${title} by ${photographer}" src="${url}" />
<div>${title}</div>
<div>${photographer}</div>
<div>Latitude: ${latitude} </div>
<div>Longitude: ${longitude} </div>
<div>${additional.join(' <br/> ')}</div>
`);
}
- 최종적으로 위와같은 방법을 통해 변수에 해체할당을 넣어줌으로써, 객체를 매개변수로 전달해 조금더 원활하게 사용이 가능하다.
'자바스크립트' 카테고리의 다른 글
자바스크립트 코딩의 기술_유연한 함수를 만들어라 (0) | 2021.06.20 |
---|---|
자바스크립트 코딩의 기술_매개변수와 return 문을 정리하라_2 (0) | 2021.06.20 |
자바스크립트 코딩의 기술_반복문 작성의 기술_2 (0) | 2021.05.30 |
자바스크립트 코딩의 기술_반복문 작성의 기술_1 (0) | 2021.05.30 |
자바스크립트 코딩의 기술_조건문 깔끔하게 작성하기 (0) | 2021.05.29 |