Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

비전공 프론트엔드 개발자

회고. 재귀함수 & JSON.stringify & parse 본문

회고

회고. 재귀함수 & JSON.stringify & parse

JJ_hyun 2022. 6. 25. 00:12

Q. 재귀함수의 의미란?

-> 재귀함수란 자기 자신을 호출하는 함수이다. 

 

Q. 재귀함수는 언제 사용하는게 좋은가?

첫번째. 중첩된 반복문이 많거나 반복문의 중첩 횟수를 예측하기 어려울때 사용된다.

-> 반복문이 여러번 충접된다면 마치 callback hell 같은 코드가 될 수도 있다. 

-> 얼마나 반복해야 하는지 안다면 몇번이고 중첩을 하겠지만 만약 데이터가 너무 많아서 몇번 반복해야 할지

감이 안잡힌다면? 이때야 말로 재귀함수를 사용하기 좋은 예시라 할 수 있다. 

 

두번째. 반복문으로 작성된 코드를 더욱 간결하고 이해하기 쉽게 작성하고 싶은 경우.

-> 만약 다섯번을 반복해야 한다고 우리가 이미 알고 있다면 우리는 그냥 다섯번 반복문을 써서

원하는 값을 만들어 낼 수 있을 것이다. 하지만 이는 가독성이 떨어져 코드의 결과를 쉽게 예측하기 어려워진다.

이때 재귀함수를 사용함으로써 같은 패턴의 문제를 작은 단위로 쪼개고 문제를 해결한다면 결과를 예측하기

쉬워질 것이다. 

 

Q. 재귀함수의 탈출조건

-> 재귀 함수의 탈출 조건은 base case에 따라 달라진다. 

 

Q. 제기함수의 base case 와 recursive case 설명.

Base case

-> 탈출 조건이자, 문제를 더 이상 쪼갤 수 없는 경우라고 설명 할 수 있다.

Recursive

-> base case을 통해 재귀함수에서 탈출을 하지 못할 경우 더 작은 문제로 새롭게 정의한다.

 

 

Q. JSON.stringify 와 JSON.parse 에 대한 설명 

이 두 메서드를 왜 써야하나? 

우리는 부득이하게 객체를 문자열로 바꿔야 하는 경우가 생길것이다. 

이때 객체는 toString 메서드나 String(data) 와 같은 형변화를 시도한다면 [object,object] 를 보게 될 것이다.

그래서 객체를 문자열로 문자열을 객체로 왓다 갓다 할 수 있는 메서드가 필요한 것이다.

 

JSON.stringify

-> 객체를 JSON으로 변환한다. ( 타입은 string 이다. ) ( 직렬화 라고도 한다. serialize )

-> JSON.stringify(값, [replacer],[spec]) 

( replacer 는 배열 혹은 함수가 될 수 있다. spec 은 마지막 문자열을 조절할 수 있다. 이렇게만 알아두자.)

 

JSON.parse

-> JSON을 객체로 변환한다. ( 타입은 object 이다. ) ( 역직렬화 라고도 한다. deserialize )

-> JSON.parse(값,[reviver])

( reviver 은 함수이며 결과를 반환하기 전에 변형할 수 있게 해준다. )

JSON.parse('{"p": 5}', (key, value) =>
  typeof value === 'number'
    ? value * 2 // 숫자라면 2배
    : value     // 나머진 그대로
);

// { p: 10 }

 예외의 경우...

변환할 문자열이 유효한 JSON이 아닐 경우 SyntaxError를 보냄.

 

TIL. 22.6.24

더미데이터를 갖고 javascript 에서 DOM을 재귀함수를 사용해서 조작해 보았다.

생각보다 재밌었고, 이럴때 쓸 수 있구나 라고 생각이 들었다.

 

코플릿 문제를 풀 때는 반복문을 못쓰는 경우가 많아 어려움이 많았는데 반복문 혹은 map() 메서드까지써보니 조금은 재미를 느꼈다.

 

let exam = {
    id:1,
    name:"Jade"
}

JSON.stringify(exam)

// '{"id":1,"name":"Jade"}'

새로 알게된 조금은 흥미로운 사실을 예시로 만들어 보았다.

 

JSON.stringify() 메서드를 통해 객체를 string 형태로 변환해 주었다. 

exam 예시를 보면 key 는 전부 따옴표를 쓰지 않았다.

결과를 보면 key에 따옴표가 생긴다. 여기까지는 이미 알고있는내용,

하지만 숫자 1 을 보면 따옴표시가 안되어 있는 것을 볼 수 있다. 이는 숫자 타입은 아니고, 문자타입이 맞다

하지만 "1" 과 1 은 엄연히 타입이 다르고, 이는 우리가 필요시 알 수 있어야 한다. 

 

-> 결과를 보고 우리는 1이라는 값이 문자타입으로 들어간게 아닌 숫자로 들어갔구나 라는걸 알 수 있게 해준다. 

 

JSON은 JavaScript 와 다른 규칙을 갖고있다. 항상 명심하자!!

 

재귀함수를 사용할때 반드시 기억하고 참고해야 하는 키워드 문장 3가지!

1. 문제를 잘게 쪼개본다.

2. 1번과 같은 방식으로 문제가 더 이상 작아지지 않을 때 까지 잘개 쪼개본다.

3. 가장 작은 단위의 문제를 풀어봄으로써 재귀함수를 호출한다. 

 

재귀함수의 사고를 높히기 위한 몇가지 팁

1. 재귀함수의 입력값과 출력값을 정의한다.

-> 문제를 가장 추상적으로 또는 가장 단순하게 정의해 보는 것이다. 

2. 문제를 쪼개고 경우의 수를 나누기

-> 문제를 어떤식으로 쪼갤지 생각해보고 정한 방법으로 가장 작은 경우와 큰 경우로 구분할 수 있는지 확인해본다.

( 일반적으로 입력값을 이 기준으로 정한다. )

3. 단순 문제 해결

-> 문제를 여러 경우로 정의한 다음, 가장 쉬운 문제부터 해결해 본다. ( base case  === 탈출조건 )

'회고' 카테고리의 다른 글

회고. 22.07.26  (0) 2022.07.28
회고. 22.07.12  (0) 2022.07.14
회고. 22.07.07  (0) 2022.07.08
회고. 22.07.06  (0) 2022.07.05
Web Server 기초 express 및 http 로 간단한 서버 만들기 회고  (0) 2022.06.20