스터디 87

자료구조 : 트리(편향, 균형, 레드블랙, 다양한 이진트리..)

* 트리비선형 계층적 자료 구조(데이터 순차저장x)  / 재귀적 자료구조(트리 내 다른 트리 ㅇ)부모-자식 계층적 구조, 사이클이 없음.노드 : N, 간선 : N-1레벨 : 루트에서 노드까지 간선의 수  ** 트리 순회 방식- 전위 순회 : 루트 -> 왼 -> 오- 중위 순회 : 왼 -> 루트 -> 오- 후위 순회 : 왼 -> 오 -> 루트   1) 편향트리모든 노드가 한 쪽으로만 자식을 가지는 이진 트리   2) 이진트리각 자식노드 차수가 2이하  2-1) 정 이진트리자식 노드 수 0 or 2개(1개 불가능)   2-2) 완전 이진트리마지막 레벨을 제외하고는 다 채워져있고, 마지막 레벨은 왼쪽부터 채워져있음  2-3) 변질 이진트리모든 노드가 오직 한 개의 자식만 가지는 이진 트리   2-4) 포화 이..

자료구조 : 배열, 연결리스트, 해시

1. 배열(Array)같은 타입 데이터를 여러개 나열하는 선형 자료구조연속적인 메모리 공간에 순차적으로 데이터 저장 -> 관리 편하다는 장점선언시에 크기 지정, 인덱스 사용 가능정적 메모리 항당 (컴파일 타임 -> 스택영역) 장점 : 순서유지, 인덱스 통해 특정 위치 요소 접근이 빠름단점 : 크기 선언하면 그 뒤로 크기 제한, 배열 중간에 삽입/삭제 어려움, 지정한 크기 남으면 공간 낭비  2. Array List배열 형태의 리스트, 동적+ (정적)배열이 다 차면, 새로운 배열 만들어 기존 내용 복사자바의 arrayList, c++의 vector인덱스 접근 가능 장점 : 인덱스 통해 특정 위치 요소 접근이 빠름, 동적 크기 조정 가능단점 : 기존 배열의 요소를 새 배열로 복사하는 비용, 배열 중간에 삽입..

자료구조 : 스택, 큐, 힙

1. 스택후입선출 (LIFO) : 가장 최근에 들어온 데이터가 가장 먼저 나감삽입/삭제는 리스트의 한 쪽에서 발생 (출구가 top 하나 뿐)자료 출력 순서가 입력 순서의 역순일 때 유용함.undo 작업(되돌리기)에서 사용됨. 삽입 : push삭제 : pop 삽입 / 삭제 일어나는 곳 : top stack underflow : empty 상태일 때, pop 시도stack overflow : full 상태일 때, push 시도 삽입 / 단순 삭제 : O(1)검색 / 최악의 삭제 : O(N)  // 한 쪽으로만 넣고 뺄 수 있으므로, 최악의 경우에는 가장 밑에 있는 경우.    2. 큐 (선형 큐)선입선출 (FIFO) : 가장 먼저 들어온 데이터가 가장 먼저 나가고, 나중에 들어온 데이터가 나중에 나감(순서 ..

47장. 에러처리

0. 에러처리가 필요한 이유예외적 상황이 발생할 수 있는데, 에러처리를 하면 강제종료를 막을 수 있음  1. 에러 처리의 종류1) 예외 상황에는 null 또는 -1을 단축평가나 옵셔널 체이닝 연산자 통해 처리2) 에러 처리 코드 등록(try..catch..finally)   2. Error 객체Error 생성자 함수는 에러 객체를 생성함.Error 생성자 함수에는 에러를 설명하는 에러 메시지를 인수로 전달 할 수 있음 Error 생성자 함수가 생성한 에러 객체는 message 프로퍼티와 stack 프로퍼티를 가짐.1) message 프로퍼티 : Error 생성자 함수에 인수로 전달한 에러 메시지2) stack 프로퍼티 : 에러를 발생시킨 콜스택 호출정보 나타내는 문자열, 디버깅 목적 사용 자바스크립트에는..

46장. 제너레이터와 async/await

1. 제너레이터ES6 도입, 코드의 실행을 일시 중지 했다가 필요한 시점에 재개할 수 있는 특수한 함수일반함수 정의 방법과 유사하지만, function* 키워드로 선언, 하나 이상의 yield 표현식 포함한다는 점은 다름.  ** 제너레이터와 일반함수의 차이1.제네레이터 함수는 함수 호출자에게 함수 실행의 제어권을 양도할 수 있다.일반 함수를 호출하면 제어권이 함수에게 넘어가고, 함수코드 일괄 실행 - > 제어 불가제네레이터 함수는 함수 호출자가 함수 실행 중단 / 재개 시킬 수 있음.(next 메서드 호출하면 yield 표현식까지만 실행, 다음 next호출하면 재개하고 다음 yield까지 .., 끝까지 실행되면 done프로퍼티에 true 할당) -> 함수 제어권을 함수가 독점하는 것이 아니라, 함수 호..

45장. 프로미스

0. 프로미스 등장비동기 처리를 위해 콜백 함수 사용하지만, 에러 처리나 콜백 헬, 나쁜 가독성 같은 단점 해결위해 ES6부터 도입.콜백 패턴의 단점 보완하면서 비동기 처리 시점을 명확하게 표현 가능하다는 장점.  1. 콜백 패턴의 단점 1) 콜백 헬 사용 배경)비동기 함수 내부에 비동기 동작 코드가 있을 때,비동기 함수를 호출하면 비동기 코드가 완료되지 않아도 기다리지 않고 즉시 종료됨(비동기 함수 내부 비동기 코드는 비동기 함수 종료 이후에 완료됨)-> 외부로 반환하거나 상위 스코프에 할당하면, 예상치 않은 결과 비동기 함수는 비동기 처리 결과를 외부에 반환 불가, 상위 스코프 변수에 할당도 불가.비동기 함수 처리 결과에 대한 후속 처리는 비동기 함수 내부에서 해야함. -> 콜백함수 전달 이런 경우에..

44장. REST API

0. REST REST : REpresentational State TransferHTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍쳐 , 자원을 이름으로 구분해 자원의 상태를 주고 받는 모든 것을 의미   1. REST APIREST를 기반으로 서비스 API를 구현한 것자원, 행위, 표현의 3가지 요소로 구분.REST는 자체 표현 구조로 구성되어, REST API 만으로 HTTP 내용 이해 가능구성요소내용표현 방법자원자원URI(엔드포인트)행위자원에 대한 행위HTTP 요청 메서드표현자원에 대한 행위의 구체적 내용페이로드  2. REST API 설계 원칙1) URI는 리소스를 표현하는데 집중(동사보다는 명사 사용하기) -> ex. GET     /getTodos(x) ->  GE..

데이터베이스 : 인덱스, 이상현상, 정규화, 트랜잭션

1. 인덱스인덱스는 테이블에 있는 데이터를 효율적으로 검색하기 위해 사용하는 데이터 구조로, 레코드에 대한 물리적 저장 위치를 별도로 기록합니다.특정 키나 키의 조합에 대해 데이터를 빠르게 찾을 수 있습니다. - 사용 이유 : where 구문 해당하는 열을 빨리 찾기 위해 / join시에 다른 테이블 열을 빠르게 추출하기 위해 - 장점 : 순차검색 할 필요가 없기 때문에 검색이나 정렬등의 작업을 훨씬 빠르게 수행 가능 /  그룹화 작업 속도 빨라짐. - 단점 : 인덱스 저장을 위한 공간이 추가로 필요하고(DB의 약 10%) 이로 인해 파일 크기가 커짐 / 데이터 삽입, 삭제, 갱신 할 때마다 인덱스가 갱신되어 성능저하 될 수 음.  2. 인덱스 종류1) 해시 인덱스해시테이블 기반. 데이터 순서를 유지하지..

39장. DOM

0. DOM 브라우저의 렌더링 엔진은 HTML문서를 파싱하여 브라우저가 이해할 수 있는 자료구조 DOM 생성 (* DOM : HTML 문서의 계층적 구조와 정보를 표현하며 노드 타입에 따라 이를 제어하는 API인 프로퍼티와 메서드를 제공하는 트리 자료구조)   1. 노드HTML요소는 렌더링 엔진에 의해 파싱되어 DOM을 구성하는 요소노드 객체로 변환됨.HTML문서는 HTML요소들의 집합, 중첩관계를 가지며 이로 인해 계층적인 부자관계 형성.-> 트리 자료구조로 구성 (* 트리자료구조 : 부모-자식 노드들로 구성되어있는 노드간의 계층적 구조를 표현하는 비선형 구조) - 노드 객체 타입 : 총 12개   1) 문서 노드 : DOM 트리 최상위에 존재하는 루트노드,  document 객체(=브라우저가 렌더링한..

1. 디자인 패턴

* 디자인 패턴 : 프로그램 설계시 문제들을 객체간의 상호관계로 해결하기 위해 '규약' 형태로 만들어놓은 것. 1) 싱글톤 패턴 : 하나의 클래스 - 하나의 인스턴스  ex) db 연결 모듈   - 장점 : 의존성 낮아짐   - 단점 : 미리 생성된 인스턴스 기반이므로 tdd시에 독립적 인스턴스 만들기 어려움, 모듈 결합 강화 (극복 : 의존성 주입) + js 예시 : { }, new Object   2) 팩토리 패턴 : 객체 사용 코드에서 객체 생성 부분 떼어내서 추상화상속 관계의 두 클래스 중, 상위 클래스가 뼈대를 결정하고, 하위 클래스가 구체적 내용 결정   -  장점 : 유연성(클래스 분리), 유지보수성 + 예시 : 커피팩토리  3) 전략 패턴(= 정책 패턴) : 객체 행위 바꾸고  싶을 때, ..