개발자 박가나

[241014 TIL] 본캠프 9일차 본문

내일배움캠프/본캠프

[241014 TIL] 본캠프 9일차

gnchoco97 2024. 10. 14. 20:38

 Today 1. [JavaScript 문법 종합반] 강의 

  • 콜백 함수
    • 다른 코드의 인자로 넘겨주는 함수
    • 콜백 함수를 인자로 넘겨받는 함수가 실행에 대한 제어권을 가짐
  • 제어권
    • 콜백 함수 호출 시점에 대한 제어권
    • 인자(의 순서)에 대한 제어권
    • this가 가리킬 대상을 지정할 수 있음
  • 콜백 지옥
    • 콜백 함수를 반복적으로 사용함으로써 들여쓰기가 깊어져서 가독성이 떨어지는 현상
    • 동기 : 현재 실행 중인 코드가 끝난 후 다음 코드를 실행
    • 비동기 : 현재 실행 중인 코드의 완료 여부와 무관하게 즉시 다음 코드를 실행
  • 비동기 제어 - Promise
    • new 연산자로 호출
    • 비동기 작업이 완료된 후 resolve 또는 reject 함수 호출
  • 비동기 제어 - Generator
    • *가 붙은 함수로, 실행 시 Iterator 객체 반환
    • 비동기 작업이 완료되는 시점마다 next 메서드 호출
  • async/await
    • 비동기 작업을 수행할 함수 앞에 async 삽입
    • 함수 내부에서 실질적인 비동기 작업이 필요한 위치에 await 삽입
실무에 있을 때 정말 많이 사용했던 문법이 바로 Promise와 async/await이었는데, 정작 효율을 위해서 비동기식으로 코드를 처리하는데 왜 굳이 비동기식 코드를 다시 동기식으로 처리를 하지?라는 의문을 한 번도 가져본 적이 없었던 것 같다. 오늘 강의를 통해서 비로소 동기식 처리가 필요한 이유는 무엇인지, 이를 처리하기 위한 방법에는 무엇이 있는지에 대해서 명확히 알 수 있게 되었다.

 Today 2. 개인 공부 - 블로그 포스팅 

  • 콜백 함수
 

[JavaScript] 콜백 함수

콜백 함수 (Callback Function다른 함수의 인자로 넘겨주는 함수이다. 🔥 인자로 넘겨줌으로써 실행에 대한 제어권을 함께 위임한다.제어권콜백 함수는 제어권을 넘겨주는 대신 로직에 맞춰서 처리

dev-gana.tistory.com

 

  • 콜백 지옥과 비동기 제어
 

[JavaScript] 콜백 지옥과 비동기 제어

콜백 지옥콜백 함수를 반복적으로 사용함으로써 코드의 들여쓰기가 너무 깊어져서 가독성이 떨어지는 현상을 의미한다.동기 : 현재 실행 중인 코드가 끝난 후 다음 코드를 실행하는 방식비동기

dev-gana.tistory.com

 

오늘 강의에서 콜백 함수와 비동기 제어 관련 내용을 배웠는데 실무에서 너무나도 자주 접하는 개념이기도 하고 마냥 쉬운 내용도 아니었기 때문에 블로그 포스팅을 하면서 복습을 하면 나중을 위해서라도 좋을 것 같다는 생각이 들었다. 강의를 들을 때는 이해를 했다고 생각한 내용도 포스팅으로 정리를 하려고 하니 생각보다 어려웠지만 내가 이해할 수 있는 문장들로 정리를 하면서 복습을 하니까 이해도가 훨씬 높아지는 기분이었다. 이전에 배웠던 개념들도 시간적으로 여유가 될 때 틈틈이 포스팅을 해놓아야 겠다는 생각이 들었다. 

 Today 3. [달리기반] 이론 수업 1회차  

  • 변수 (Variable)
    • var / let / const
  • 데이터 타입 (Data Type)
    • 기본 타입 / 참조 타입
  • 연산자 (Operator)
    • 산술 연산자 / 할당 연산자 / 비교 연산자 / 논리 연산자
  • 함수 (Function)
    • 함수 선언식 / 함수 표현식 / 화살표 함수 / 즉시 실행 함수
  • 조건문 (Condition Statement)
    • if문 / if - else문 / if - else if - else문 / switch문 / 삼항 연산자
  • 반복문 (Loop)
    • for문
오늘 이론 수업에서는 [JavaScript 문법 종합반] 강의 1주차에서 배웠던 내용에 대해서 다시 한 번 정리하는 시간을 가지게 되었다. 이미 강의를 통해서 배웠던 내용이기도 하고 비교적 쉬운 내용이었기 때문에 이해하는데 큰 무리가 없었지만 단순히 느낌적으로 알고 있는 것과 누군가에게 설명할 수 있는 것은 큰 차이가 있다는 튜터님의 말씀을 듣고 순간적으로 멈칫하게 되었다. 솔직히 쉬운 내용이어서 강의만 듣고 제대로 복습하지 않고 넘어왔는데 블로그 포스팅을 통해 내용을 다시 한 번 정리하는 시간을 가져야겠다는 생각이 들었다.

 Today 4. [알고리즘] 특강 3회차  

  • [문제풀이] 없는 숫자 더하기
    • 방법 1 : 없는 숫자가 무엇인지 찾기
    • 방법 2 : 없는 숫자의 합 구하기 (45 - numbers에 들어있는 숫자의 합)
  • [문제풀이] 핸드폰 번호 가리기
    • 방법 1 : 반복문 사용
    • 방법 2 : 메서드 사용
    • 기타 : padStart()
  • [문제풀이] 나누어 떨어지는 숫자 배열
    • 배열의 요소를 모두 탐색하여 나누어 떨어지는지 확인 (완전탐색)
    • 요소의 index 값이 필요없을 경우 for문 대신 for-of문을 사용하는 것이 바람직
  • [문제풀이] 최소 직사각형
  • 시간 복잡도
    • 코드의 효율성은 Big-O 표기법 기반의 시간 복잡도로 나타낼 수 있음
    • 가능한 시간 복잡도가 낮은 알고리즘을 사용하는 것이 좋음
    • Lv.2 이상의 문제의 경우, 시간 복잡도가 낮은 방법으로 풀어야만 점수를 주는 항목도 존재
  • 공간 복잡도
    • 프로그램의 실행에 얼마나 많은 메모리가 필요한지 나타내는 척도
    • 가능한 적은 메모리를 사용해서 문제를 푸는 것이 좋음
알고리즘 문제를 풀다보면 낑낑대면서 코드를 작성했는데 정작 내용을 지원하는 메소드가 있어서 한 줄로 코드를 줄일 수 있는 경우가 종종 있다. 당장 오늘 특강에서도 padStart()라는 메소드를 알게 되었다. 앞으로 매일 일정 시간을 알고리즘 문제를 푸는 것에 투자하게 될텐데 그 시간 중에서 10분 정도는 JavaScript 메서드를 찾아보고 사용해보는 것에 할애를 하는 것도 많은 도움이 될 것 같다는 생각이 들었다.