[패스트캠퍼스 수강 후기] 프론트엔드 인강 100% 환급 챌린지 12회차 미션 - 27강 함수의 기본 파라미터, 조건문 스마트하게 쓰기, 비구조화할당

3 minute read

함수의 기본 파라미터

먼저 원의 너비를 구하는 함수를 만들어보자.

function calculateCircleArea(r){
  const radius = r || undifined;
  return Math.PI * r * r;
}
const area = calculateCircleArea();
console.log(area);  //NaN

여기서 calculateCircleArea가 빈값이면 NaN이라는 에러가 뜨는데 빈값일때 기본값을 반환하게 하고 싶다면?
어제 우리가 배운 단축평가 논리 계산법을 사용하면 된다.

function calculateCircleArea(r){
  const radius = r || 1; //r이 flase(빈값)이면 1로 대체하겠다.
  return Math.PI * radius * radius; //r대신 위에 변수 radius를 넣어줌.
}
const area = calculateCircleArea();
console.log(area); //3.141592653589793

그런데 여기서 함수의 기본 파라미터를 사용하면 더 짧은 코드가 가능하다.

function calculateCircleArea(r = 1){ //함수의 기본 파라미터 쓰는 법(r이 false일 경우 기본값으로는 1을 하겠다라는 의미).
  return Math.PI * r * r; 
}
const area = calculateCircleArea();
console.log(area); //3.141592653589793

함수의 기본 파라미터를 사용하는 법은 위와 같다.
그리고 function은 화살표 함수로도 바꿔줄 수 있는데 아래와 같다.

const calculateCircleArea = (r = 2) => {
  return Math.PI. * r * r;
}
const area = calculateCircleArea();
console.log(area);

한줄로 쓰려면 {}와, return을 뺀다.

const calculateCircleArea = (r = 1) => Math.PI * r * r;

const area = calculateCircleArea();
console.log(area);

조건문 스마트하게 쓰기

includes

function isAnimal(text){
  return(
    text === '고양이' || 
    text === '' || 
    text === '거북이' || 
    text === '너구리'
  );
}
console.log(isAnimal('')); //true

위와 같은 코드가 있다고 하자. console에 동물명이 들어가면 true를 반환한다. 그런데 이 받아오는 text들을 배열로 넣고 그 안에 속하는 것이 있으면 true를 반환해주는 배열 내장함수 includes가 있다. 이를 활용해보자.

function isAnimal(text){
  const animals = ['고양이','','거북이','너구리'];
  return animals.includes(text);
}
console.log(isAnimal('')); //true

이것을 화살표 함수로 바꿔보자.

const isAnimal = (text) => ['고양이','','거북이','너구리'].includes(text);
console.log(isAnimal(''));

객체와 단축평가논리계산법을 활용한 조건문

다른 예시를 들어보자.
조건에 따라 다른 값을 반환해야하는 코드가 있다.

function getSound(animal){
  if(animal === '') return '멍멍!'; //if문을 한줄로 쓸때는 {}를 생략할 수 있다.
  if(animal === '고양이') return '야옹~';
  if(animal === '참새') return '짹짹!';
  if(animal === '비둘기') return '구..구구구..구';
  return '....?'; // else인가보네.. 되게 간단하게 쓴다.
}

console.log(getSound('')); // ....? 반환

객체를 활용해서 조건문을 더 깔끔하게 써보자.

function getSound(animal){
  const sounds = {
    : '멍멍!',
    고양이: '야옹~',
    참새: '짹짹',
    비둘기: '구..구구구.구'
  }
  return sounds[animal] || '....?' // 객체[key] = value
}

console.log(getSound(''));

지금의 value자리에 함수를 넣어서 조건마다 다른 함수를 실행하게끔 만들 수도 있다.

function makeSound(animal){
  const tasks = {
    : () => console.log('멍멍!'), //화살표함수를 활용했다.
    고양이: () => console.log('야옹~'),
    참새: () => console.log('짹짹!'),
    비둘기: () => console.log('구..구구구.구')
  }
  return !tasks[animal] ? console.log('...?') : tasks[animal](); //삼항연산자를 활용했다.
}

makeSound('인간'); //...?
makeSound(''); //멍멍

더욱 깔끔한 조건문 구현이 완성 되었다.
객체 안에서 각자 함수를 만들고 그에 해당하는 파라미터가 주어질 시 객체 안에 있는 함수를 실행하게 했다. 그리고 삼항연산자를 활용하여 조건이 맞지 않을 시 ‘…?’를 반환하도록 했다.
ES6 넘 깔끔하고 좋네. 슬슬 익숙해져가고 있는 것 같다.

비구조화 할당(구조분해)

객체 비구조화 할당

const object = { a: 1 };
function print({ a = '비었습니다', b = '비었습니다' }){
  console.log(a);
  console.log(b);
}
print(object); //1, 비었습니다

{a}를 통해 객체안의 a값을 바로 할당해 준다. 구조가 없이 직관적으로 객체에서의 키명으로 값을 바로 가져오는 것이 비구조화 할당 인거 같다. a나 b의 값이 비었을 경우 a = ‘기본값’ 를 통해 기본값을 설정해 줄 수도 있다. 이 방식들은 함수의 파라미터 뿐만 아니라 변수로도 사용 가능하다.

const object = { a: 1 };
const { a, b = '비었습니다' } = object;
console.log(a); // 1
console.log(b); // 비었습니다

이렇게 비구조화 할당에서 기본값을 설정 할때는 ‘=’을 사용한다는 것을 잘 알아두자. 또 아래와 같이 key명을 바꾸는 데에도 사용할 수 있다.

const animal = {
  name : '멍멍이',
  type: ''
};
const {name : nickname} = animal; //key값을 바꿀 수 있다.
console.log(nickname);

이건 어떨때 유용하게 쓰이는지 잘 모르겠지만.. 일단 이렇게도 가능하다는 거.

배열 비구조화 할당

const array = [1, 2];
const one = array[0];
const two = array[1];

console.log(one); //1
console.log(two); //2

이런 배열이 있다고 가정하자.
one과 two를 비구조화 할당으로 합칠 수 있다.

const array = [1, 2];
const [one, two] = array; //array안의 값이 one, two로 꺼내짐

console.log(one); //1
console.log(two); //2

그리고 객체비구조화 할당과 마찬가지로 기본값을 아래와 같이 넣어줄 수 있다.

const array = [1];
const [one, two = '비었습니다'] = array;

console.log(one); //1
console.log(two); //비었습니다

객체의 깊숙한(?)곳에 있는 값 꺼내기

const deepObject = {
  state : {
    information : {
      name : 'keep',
      language : ['korean', 'english']
    }
  },
  value: 5
}

const {name, language} = deepObject.state.information;
const {value} = deepObject;
const extracted = {
  name,
  language,
  value
}
console.log(extracted);

이런식으로 객체 안에서 값을 꺼내올 수 있다.
이걸 더 쉽게 만들어보자.

const deepObject = {
  state : {
    information : {
      name : 'keep',
      language : ['korean', 'english']
    }
  },
  value: 5
}

const{
  state : {
    information : {
      name, language: [firstLang, secondLang]
    }
  },
  value
} = deepObject;

const extracted = {
  name,
  firstLang,
  value
}
console.log(extracted);

오호.. 이런식으로 찾아올수도 있다. 한방에. 근데 코드가 더 더러워 보이므로 이전 방법을 더 선호하면 그렇게 써도 상관없다. 개인의 선호에 따라 작성하면 된다. 아무튼 비구조화 할당이 이런식으로도 가능하다는 걸 알아두자.

마치면서

오늘은 여기까지..
시청 영상 27강 4~6까지 수강인증이미지 수강인증이미지 수강인증이미지

프론트엔드 개발 올인원 패키지 with React Online. 👉 https://bit.ly/31Cf1hp

Comments