[React.js] React 사용을 위한 자바스크립트 응용 - 단락 회로 평가

2022. 4. 27. 22:57·공부/React.js
반응형

 

React 게시글은 대부분 인프런의 '한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지' 강의를 기반으로 내용을 정리했습니다.

 

단락 회로 평가

논리 연산자를 알고 계신가요? 

  • true && true : true
  • false || true : true
  • !true : false

이렇게 세 가지의 연산자 &&(and), ||(or), !(not)를 논리 연산자라고 한다. 논리 연산자는 왼쪽에서부터 오른쪽 순서로 연산을 수행하는데 바로 이 점을 이용해서 단락 회로 평가를 사용?할 수 있다.

 

console.log(false && true); // false
console.log(true || false); // true
console.log(!true); // false

위의 코드 중에서 우리가 눈여겨 볼 코드는 &&와 || 연산자이다. not의 경우는 단일 연산자이니 패스!
&&의 경우는 둘 다 true 값을 가져야지만 true이다. 그러니 && 앞 피연산자가 false인 경우는 뒤에 false가 와도 true가 와도 false임은 변함 없다. 그래서 처음 피연산자가 false인 경우에는 연산을 바로 끝내버리는게 단락 회로 평가다.
||도 마찬가지이다. ||의 앞 피연산자가 true면 뒤에 false 혹은 true가 와도 값은 언제가 true가 반환 될 것이다. 그래서 앞 부분의 피연산자만 보고 연산을 끝내버린다.

반응형

 

이런 단락 회로 평가의 특징과 Truthy, Falsy를 이용해 코드를 보다 간결하게 작성해보자.
전에 만들었었던 객체의 name을 가져오는 getName 함수를 작성해보자.

const getName = (person) => {
  if(!person) {
    return "객체가 아닙니다.";
  }
  return person.name;
};

let person;
const name = getName(person);
console.log(name); // 객체가 아닙니다

getName 함수는 화살표 함수로 작성되었고 person의 객체가 없으면 false를 반환하는데 !(not)을 붙여줬으므로 '객체가 아닙니다'가 리턴되어 콘솔에 출력된다. 이 코드를 조금 더 줄여보자.

 

const getName = (person) => {
  const name = person && person.name; // false && false
  return name || "객체가 아닙니다"; // false(undefined) || true
};

let person;
const name = getName(person);
console.log(name);// 객체가 아닙니다

Truthy, Falsy 그리고 단락 회로 평가의 특징을 이용해 줄인 코드이다. 
일단 person은 undefined를 담고있다. 그래서 getName() 첫 줄에서 person은 Falsy하므로 false 값을 가지고 있어 연산을 끝내버리고 undefined를 name에 담는다. 그리고 return에서 name은 undefined를 갖고 있으므로 false이다. ||는 첫 피연산자가 false인 경우 뒤의 피연산자가 false인지 true인지 확인해야한다. 그래서 "객체가 아닙니다"를 보고 문자열이 true임을 확인해 결국엔 "객체가 아닙니다"를 리턴하게 된다.

반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/React.js' 카테고리의 다른 글
  • [React.js] React 사용을 위한 자바스크립트 응용 - 비 구조화 할당
  • [React.js] React 사용을 위한 자바스크립트 응용 - 조건문 업그레이드
  • [React.js] React 사용을 위한 자바스크립트 응용 - 삼항 연산자
  • [React.js] React 사용을 위한 자바스크립트 응용 - Truthy & Falsy
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    전자정부프레임워크
    알고리즘
    Spring
    에러해결
    프로그래머스
    백준
    인프런
    프론트엔드
    기출문제
    SQL
    IT
    egov
    토비의스프링부트
    MSA
    토이프로젝트
    springboot
    넥사크로
    스프링부트
    운영체제
    QueryDSL
    Java
    방통대
    RESTful
    자바스크립트
    SpringBoot를 이용한 RESTful Web Service 개발
    react
    JPA
    개발자
    oracle
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
[React.js] React 사용을 위한 자바스크립트 응용 - 단락 회로 평가
상단으로

티스토리툴바