콜스택

함수가 호출될때 그 함수들을 모아두는 자료구조

재귀 함수 VS 반복문

공통점 : 반복해서 값을 추출한다.

차이점

함수접근방식우위예시
재귀함수상향식 / 하향식하향식 접근팩토리얼 구현
반복문상향식상향식 접근일반적인 상황

상향식 / 하향식?

  • 상향식은 상위문제를 해결하기위해 하위문제를 사용하는 것
  • 하향식은 하위문제를 해결하는데 상위문제를 사용하는 것

재귀함수 한계점

  • 호출될 때마다 메모리에 스택이 쌓이고, 한계치 이상으로 호출이 되어 스택이 넘쳐버리면 메모리 부족으로 에러가 발생한다.

  • 반복문에 비해 시간이 오래 걸린다.

  • 함수 호출과 복귀를 하기 위한 context switching 비용이 발생하기 때문에, 속도가 상대적으로 느립니다. 즉, 오버헤드가 발생하여 속도가 느리게 됩니다.

꼬리 재귀

  • 재귀호출이 끈난 후 현재 함수에서 추가연산을 요구하지 않도록 구현하는 재귀의 형태이다.

  • 이를 이용하면 함수 호출이 반복되어 스택이 깊어지는 문제를 컴파일러가 선형으로 처리하도록 알고리즘을 바꿔 스택을 재사용할수 있게 된다.

nullish 병합 연산자

nullish 병합 연산자(nullish coalescing operator) ??를 사용하면 짧은 문법으로 여러 피연산자 중 그 값이 ‘확정되어있는’ 변수를 찾을 수 있습다.

let height = 0;

alert(height || 100); // 100
alert(height ?? 100); // 0

||는 height 에 0ㅇ을 할당했지만 0을 falsy 한 값으로 취급했기 때문에 null이나 undefined를 할당한 것과 동일하게 처리한다. 따라서 결과가 100이 나온다.

반면 ?? 는 height 가 정확하게 null 이나 undefined일 경우에만 100이 된다. 예시에서는 height에 0이라는 값을 할당했으므로 0이 출력된다.

javascript

클래스 부연설명

그냥 일반 메소드 처럼 만들면 될거 아닌가? 이거 뭐하러 만듦?

  • 만약 속성 중에서 메소드가 존재한다면, 일반 메소드처럼 만들어서 변수에 선언을 하면, 속성에 존재하는 메소드가 내용이 같지만 따로따로 변수마다 생성이 된다.

  • 만약 클래스로 작성하게 된다면 메소드는 하나만 생성되면 각각의 변수들은 그 메소드를 가져다 사용하는 것이다.

상속

기존 부모 클래스(비교적 추상적)를 상속받아 새로운 자식 클래스(비교적 구체적)를 추가할 수 있다. 부모 생성자의 기능을 물려 받으면서, 새로운 기능을 추가.

클래스를 만들어야 하는 상황

인스턴스를 사용해서 서로 다른 값으로 같은 메소드를 호출해야할 때

profile
개발자 꿈나무

0개의 댓글