🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • Intro
  • Spread Operator (전개연산자)
  • 배열 리터럴 전개
  • 객체 리터럴 전개
  • Rest Parameter(잔여파라미터)
  • 정리
  • 추가할 만한 부분
  1. 프론트
  2. Java Script
  3. ES6+
  4. Destructuring문법

Rest(...) 문법

Destructuring문법과 궁합이 잘맞는 ...연산자에 대해 기술한 페이지

Intro

...연산자는 Spread Operator , Rest Parameter라고 부르는데 선언 위치에 따라 부르는 명칭과 기능이 다르다.

...연산자를 사용하는 위치가 값을 대입하는 위치에 있을 때는 전개 연산자(Spread Operator)라고 불린다.

...연산자를 사용하는 위치가 함수의 매개변수에 있을 때는 나머지 파라미터(Rest Parameter)라고 부른다

// 위치별 명칭
const sample_arr = [1,2,3,4];
const sample_obj = {name : 'mkm', job : 'teacher'};

function test(...rest){ // 나머지 파라미터
    console.log(rest);
}
test(...sample_arr); // 전개 연산자

Spread Operator (전개연산자)

배열이나 객체에 담겨있는 값(literal)을 꺼낸 후 쭉 펼쳐서 "전개"해주는 역할을 하는 연산자이다.

배열 리터럴 전개

const arr = [1,2,3,4];
console.log(arr); // [1,2,3,4] 배열 1개 만 출력
console.log(...arr); // 1 2 3 4 배열 내부의 4개의 값들이 출력
// [1,2,3,4]에서 []이 사라지고 내부의 값 1,2,3,4 들만 남았다.

// 전개연산자를 활용한 배열복사
const copy_arr = [...arr]; // arr배열 내부의 값 들을 꺼낸 후 다시 배열에 재포장 했다.
console.log(copy_arr); // [1,2,3,4]

객체 리터럴 전개

const person = {name : "mkm", job : 'teacher'}
const mkm = {...person }; // person객체 내부의 값들을 뚝 펼쳐서 전개하였다.
console.log(mkm);// // {name : "mkm", job : 'teacher'}

전개 연산자를 사용하지 않았다면 mkm 은 {person: {name : "mkm", job : 'teacher'}}로 출력되었을 것이다. 전개연산자는 마찬가지로 person의 {}을 없애고 내부의값 들을 전개하였다

정리하자면 ...(전개 연산자)는 배열과 객체를 감싸는 []와 {}을 지워준후 내부의 값을 펼쳐주는 역할을 한다고 볼 수 있다.

Rest Parameter(잔여파라미터)

...가 함수의 매개변수에 작성되었을 때는 함수의 매개변수로 들어온 인자들을 배열로 모아주는 역할을 한다.

function testRest(...args){
    console.log(args);
}

testRest('m','k','m'); // ['m','k','m']
testRest('r','e','s','t'); // ['r','e','s','t']
// 매개인자로 들어온 값을 모두 모아서 배열로 만들었다.

위의 기능만 가지고는 잔여 파라미터라는 의미가 잘 와닿지 않을 것이다. 아래 코드를 추가로 살펴보자

function printInfo(name, ...args){
    console.log(name , args);
}

printInfo('mkm','민경민','kh강사'); // 'mkm', ['민경민','kh강사']
printInfo('poobao','푸바오','판다'); // 'poobao', ['푸바오','kh판다']

위 코드를 보면 첫번째 매개변수 name에 들어온 파라미터를 제외한 잔여 파라미터들을 배열로 모아준다.

또한 변수의 Destructuring문법과 함께 사용될때도 잔여 파라미터로써 활용된다.

const array = [1,2,3,4];
const [first, ...rest] = array;
console.log(first , rest); // 1 , [2,3,4];

const person = {name : "mkm", job : 'teacher'};
const {name , ...rest} = person; // 'mkm', { job : 'teacher'}
console.log(name, rest);
const {...rest2} = person; // {name : "mkm", job : 'teacher'};
console.log(rest2);

//위 코드를 함수의 매개변수로 대입했을때는 다음과 같을것이다.
function printPeson({...rest}){
    console.log(rest);// {name : "mkm", job : 'teacher'};
    console.log(rest.name);
    console.log(rest.job);    
}

//또한 일반 파라미터로 전달받아도 똑같은 역할을 한다.
function printPeson2(rest){
    console.log(rest);// {name : "mkm", job : 'teacher'};
    console.log(rest.name);// mkm
    console.log(rest.job);// teacher
}
printPeson(person); 
printPeson2(person);

정리

...은 객체나 배열의 리터럴에서 사용될때는 전개연산자의 역할을 하며 함수의 매개변수나 Destructuring문법 함께 사용될때는 잔여파라미터 라고 부른다.

추가할 만한 부분

깊은복사 얕은복사 복습 - 그 외 복사방법

PreviousDestructuring문법NextArrow Function

Last updated 10 months ago