[Javascript] 재귀,JSON.stringify

노호준·2023년 2월 13일
0

재귀의 개념

  • 자기자신을 호출하는 함수
  • 재귀를 사용하는 경우
  1. 주어진 문제를 비슷한 구조의 더 작은 문제로 나눌 수 있는 경우
  2. 중첩된 반복문이 많거나 반복문의 중첩횟수를 예측하기 어려운 경우
  • 재귀로 문제 해결하기
    ex) 자연수 배열을 입력받고, 리스트의 합을 리턴하는 함수 arrSum을 작성하시오
  1. 문제를 좀더작게 쪼갭니다.
    (1,2,3,4,5)합을 구한다 치자. arrSum(1,2,3,4,5) === 1+ arrSum(2,3,4,5)이다.
    arrSum(2,3,4,5)=== 2+arrSum(3,4,5)이다.
    2.문제를 가장 작은 단위로 쪼개기
    ...
    arrSum(4,5) === 4+arrSum(5)
    arrSum(5) === 5+ arrSum()
  2. 문제 해결하기
    이제 가장 작은단위의 문제를 해결한다.
    arrsum() === 0
    arrsum(5) === 5+arrsum()
    arrsum(4,5) === 4+arrsum(5)
    ...
    위 단계를 반영해서 arrSum함수를 완성해보면
    let arrSum (arr) => arr.shift()+arrSum(arr)

재귀의 활용

  • 재귀적으로 사고하기
  • 재귀함수의 입력값과 출력값 정의하기
  • arrSum의 경우 number타입 배열을 입력으로받고, number타입을 리턴한다.
    arrSum: [number] => number
  • 문제를 쪼개고 경우의 수를 나누기
    문제를 어떻게 쪼갤것인지 고민. 기준을 정하고 문제를 더 큰경우와 작은경우로 구분할수있는지 확인
    입력값, 문제의 순서, 크기
  • 단순한 문제 해결하기
  • 복잡한 문제 해결하기
function recursive(input1, input2, ...) {
  // base case : 문제를 더 이상 쪼갤 수 없는 경우
  if (문제를 더 이상 쪼갤 수 없을 경우) {    //base case
    return 단순한 문제의 해답;
  }

  // recursive case : 그렇지 않은 경우, 문제를 쪼개나가는 방법
  return 더 작은 문제로 새롭게 정의된 문제
}

JSON

  • 탄생배경
  • 데이터 교환을 위해 만들어진 객체형태 포맷
  • 객체 내용을 다른 프로그램에게 전송한다면 어떻게 할것인가?
  • 메시지 객체가 전송가능하려면, 메시지를 보내는 발신자와 수신자가 같은 프로그램을 사용하거나, 문자열처럼 범용적으로 읽을수 있는 선택이어야 한다.
  • 객체는 타입변환을 이용해 String으로 변환할 경우 객체 내용을 포함하지 않는다.
  • 이문제를 해결하려면 객체를 JSON형태로 변환하거나 JSON을 객체형태로 변환하는 방법이다.
  • 이를위한 메서드는 다음과 같다.
  • JSON.stringify : 객체를 JSON으로 변환합니다.
  • JSON.parse: JSON을 객체로 변환합니다.
let transferableMessage = JSON.stringify(message)

console.log(transferableMessage) 
// `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`

console.log(typeof(transferableMessage))
// `string`
  • stringfy하는 이 과정을 직렬화한다고 함
  • json으로 변환된 객체의 타입은 문자열이다. 발신자는 직렬화한 문자열을 누군가에게 보낼수있다.
  • 그럼 수신자는 문자열을 어떻게 다시 객체형태로 만들수있는가? > JSON.parse("{문자열}")
  • JSON.parse하는 이 과정을 역직렬화라고 한다.
  • 이처럼 JSON은 서로다른 프로그램사이에서 데이터를 교환하기위한 포맷임. 여러 언어에서 범용적으로 씀
  • JSON의 객체는 반드시 키,값에 쌍따옴표 붙여야하고, {"key":"property"} ''도안되고 스페이스바도 안됨.
  • 팁: 문자열만드는 세가지방법
  1. obj.toString()
  2. String(obj)
  3. 백틱 달러 중괄호 obj 중괄호 백틱
  • 팁2. 배열내 for > let el of arr, 객체내 키 for > for(let key in obj) : key로 키 접근, obj[key]로 값에 접근

  • html을 객체로 만든게 dom

0개의 댓글