02. Rest 파라미터 - 스프레드(Spread) 연산자와 Rest  파라미터  


Spread 연산자로 파라미터를 작성한 형태를 Rest 파라미터라고 한다.
function(param, paramN, ...rest);
const number = [1,2,3]
getNum(...number);

function getNumt(num1, num2, num3){
    console.log(num1, num2, num3);
}

결과 값
num1 = 1
num2 = 2
num3 = 3

호출하는 함수의 파라미터에 3개의 값을 쓰고 
호출받는 함수의 파라미터를 2개의 값만 썼을 경우 3번째 파라미터 값은 설정되지 않는다.(예제1)
이때, rest 파라미터를 사용함으로써 배열 엘리먼트로 저장할 수 있다.(예제2)
(예제1)

getNum(...[1,2,3]);

function getNum(num){
    console.log(num);
}

결과 값
1

=============================================
(예제2)

getNum(...[1,2,3]);

function getNum(...rest){
    console.log(rest);
}

결과 값
[1,2,3]

...rest라고 적어 둔 arguments 명은 변경되어도 된다. (...number, ...test 등등)

Spread와 Rest가 '...'으로 표현하는게 같아서 뭐가 다르지? 생각할 수도 있다.
기능적으로 차이가 있다.

Spread 파라미터는 분리,전개
1.호출하는 함수의 파라미터에 사용한다.
2.파라미터로 사용 시 전개하는 기능을 한다.

Rest 파라미터는 전개된 엘리먼트 배열로 설정
1.호출받는 함수의 파라미터에 사용한다.
2.파라미터 값을 설정하고 설정되지 못한 나머지 파라미터 값들을 배열에 설정한다. 



01. Spread 연산자 - 스프레드(Spread) 연산자와 Rest  파라미터  


iterable object의 element를 하나씩 분리하여 전개한다.
iterable 객체는 반복 객체로써 객체의 원소에 하나씩 차례로 접근 가능하다.

' ... ' 점 세개로 시작해서 뒤에 이터러블 오브젝트를 써주면 된다.
[...iterableObj]
function(...iterableObj){ }

예시
let first = [1,2];
let last = [9,10];
let result = [...first, 3,4,5,6,7,8, ...last];

console.log(result);

결과 값
1,2,3,4,5,6,7,8,9,10

...first를 전개하여 1,2의 값을 result의 배열에 넣어준다.
그 후 3~8까지의 숫자가 배열에 들어있고 ...last를 전개하여 9,10을 result의 배열에 넣어줌으로써
1~10까지의 결과 값이 나온다.
(전개 시 result의 length 값은 10, 전개가 안되면 8)

문자열 전개 시에는 string 오브젝트가 iterable 오브젝트 이므로 쓸 수 없다.
let spreadObj = [...'okayoon'];

console.log(spreadObj);

결과 값
['o','k','y','o','o','n']

파라미터로 넘길 때 (spread parameter)
const number = [1,2,3];
getNum(...number);

function getNum(num1,num2,num3){
    console.log(num1, num2, num3);
}

결과 값
num1 = 1
num2 = 2
num3 = 3
함수 호출 전에 ...number를 전개한 후 파라미터로 전달하기 때문에 결과 값과 같은 형태가 된다.

호출하는 함수의 파라미터 값이 분리된 형태를 spread 파라미터라고 한다.


 

사전작업으로 구글 인증키를 발급 받은 후 진행해야 합니다.
 
예시
HTML
<body>
  <section>
    <h1>남산타워</h1>
    <div id="google-map"></div>
  </section>
  
  <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDSaNN-dG5G4UMVIrrYU2M5-h2JTMxUdQE&callback=initMap"
      async defer></script>
            
      <script>
      	// 이곳에 코드 작성
      </script>
</body>
</body> 위에 google API script를 추가해줍니다.

그리고 API가 로드된 후에 script가 읽혀질 수 있도록 아래에 <script> 영역을 생성합니다.

 

 

CSS

#google-map {
  width:500px;
  height: 300px;
}
*필수로 맵 엘리먼트의 높이 값을 지정해줘야 합니다.
 

JS

<script>
  var map;
  function initMap() {
    map = new google.maps.Map(document.getElementById('google-map'), {
      center: {
      	lat: 37.551073, 
        lng: 126.987893
      },
      zoom: 15
    });
  }
</script>

위에 작성했던 <script>안에 코드를 넣어줍니다.

center에서 lat과 lng의 값은 좌표 값입니다. 여기에서 좌표값을 참조할 수 있습니다.

zoom은 얼마나 지도를 확대할 수 있는지입니다. 숫자가 클수록 더 커집니다.

 

lat(latitude), lng(longitude) 값 구하기

place name에 주소를 입력해줍니다.
lat, lng값을 복사해서 위의 스크립트 내부에 붙여넣기하면 해당하는 좌표로 설정된 맵이 나옵니다.

 

 

예제

*무료 사용 건 수가 넘으면 콘솔에 에러가 납니다.

See the Pen zmyVrE by leeyoonseo (@okayoon) on CodePen.

 

 

백엔드와 작업 시 파라미터 값을 보내야 하는 일이 빈번한데, 이번에 처음 겪은 이슈가 있어 작성해둔다.

이건 내가 작성한 ajax 코드가 아니었고, 유지보수 업무였다.

(ajax 옵션을 잘 몰랐던 문제가 가장 컸다)

 

아래와 같이 작성했던 ajax 코드가 있었다.

데이터가 전송이 안되서 문제를 찾아보던 중에 processData를 알게되었다.

 

JS

$.ajax({
  url : '',
  processData : false,
  contentType : "application/json",
  data : {
    id : 'abcd'
  },
  type : "GET",
  success : function(res){
    //.......    
  }
});

 

processData 란?

기본값은 true다.

ajax 통신을 통해 데이터를 전송할때, 기본적으로 key와 value값을 Query String으로 변환해서 보낸다. 

데이터 값에 따라 (key=value&key=value) 또는 (key:value, key:value) 이런 식으로 보내게되는데,

이때 이 processData가 false로 되어 있으면 Query String으로 설정하지 않는다.

processData는 파일 전송 시에 사용한다고 한다.

 

그래서 processData를 false하고 데이터를 보낸 후 피들러를 확인해보면 [object object]로 찍힌다.

processData값을 지워서 해결했다.

 

 

 

 

+ Recent posts