CodeStates/JavaScript13 [알고리즘] 시간복잡도 (빅오표기법) 시간 복잡도(Time Complexity) 시간 복잡도 표기법 Big-O(빅-오) : 최악의 경우를 고려 Big-Ω(빅-오메가) : 최선의 경우를 고려 Big-θ(빅-세타) : 중간(평균) 알고리즘이란 문제를 해결하는 최선의 선택 효율적인 방법을 고민한다는 것은 시간 복잡도를 고민한다는 것과 같은 말 입력값의 변화에 따라 연산을 실행할 때, 연산 횟수에 비해 시간이 얼마만큼 걸리는가를 의미 효율적인 알고리즘 구현 : 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화한 알고리즘 구성 시간 복잡도는 주로 빅-오 표기법을 사용해서 표기 1. Big-O 표기법 최악의 경우를 고려하므로, 프로그램이 실행되는 과정에서 소요되는 최악의 시간까지 고려할 수 있음 최소한 특정 시간 이상이 걸린다 혹은 이 정도 시간이 .. CodeStates/JavaScript 2022. 4. 21. [Node.js] 비동기 흐름 동기와 비동기 synchronous & asynchronous 동기적(synchronous) : 시작 시점과 완료 시점이 같은 상황으로 자바스크립트는 synchronous *코드가 나타나는 순서에 따라 시행되며 요청에 대한 결과가 나올 때 까지 기다림 비동기적(asynchronous) : 요청에 대한 결과가 나올 때까지 기다리지 않음(continue working) *콜백 함수를 많이 활용 blocking & non-blocking blocking : 요청에 대한 결과가 동시에 일어남 (하나의 작업이 끝날 때까지, 이어지는 작업을 "막는 것"을 blocking이라고 함) *전화처럼 하던 일을 멈춰야 함 non-blocking : 요청에 대한 결과가 동시에 일어나지 않음 *문자처럼 나중에 확인할 수 있음 .. CodeStates/JavaScript 2022. 3. 26. [자료구조] Stack, Queue, Graph, Tree 자료구조 여러 데이터들의 묶음을 저장하고 효율적으로 사용하는 방법을 정의한 것 *특정한 상황에 놓인 문제를 해결하는 데에 특화 데이터 : 문자, 숫자, 소리, 그림, 영상 등 실생활을 구성하고 있는 모든 값 *데이터는 분석하고 정리하여 활용해야만 의미를 가질 수 있으며, 사용 목적에 따라 형태를 구분하고 분류하여 사용 Stack 데이터를 순서대로 "쌓는" 구조 입력과 출력이 하나의 방향으로 이루어지는 제한적 접근 (일방통행) *이러한 Stack 자료구조의 정책을 LIFO(Last In First Out) 혹은 FILO(First In Last Out)이라고 부르기도 함 재귀 함수와 활용도가 높음 const stack = [] stack.push(1) // [1] stack.push(2) // [1, 2].. CodeStates/JavaScript 2022. 3. 14. [JSON] JavaScript Object Notation JSON 서로 다른 프로그램 사이에서 데이터 교환을 위해 만들어진 객체 형태의 포맷 JSON포멧 : 자바스크립트를 포함한 많은 언어에서 범용적으로 사용하는 포멧 수신자(reciever)와 발신자(sender)가 다른 프로그램을 사용하더라도 객체를 범용적으로 읽을 수 있는 문자열 형태로 만들어 줌 객체는 타입 변환(message.toString())을 통해 String으로 변환할 경우 객체 내용을 포함하지 않기 때문에 JSON의 형태로 변환 필요 JSON.stringify let myMessage = { sender : 'Despair', receiver : 'Monkey', date : '22.03.14', num : 1, } console.log(JSON.stringify(myMessage)) // '.. CodeStates/JavaScript 2022. 3. 14. [JavaScript] 재귀함수 재귀는 언제 사용하는게 좋을까? 주어진 문제를 비슷한 구조의 더 작은 문제로 나눌 수 있는 경우 중첩된 반복문이 많거나 반복문의 중첩 횟수(number of loops)를 예측하기 어려운 경우 function recursive(인자) { // 조건이 충족될 때 까지 자기 자신을 호출 if(조건 충족) { return 결과 } else { return recursive(작업된 인자) } } 재귀 : 문제를 해결할 때 동일한 구조의 더 작은 문제를 해결함으로써 주어진 문제를 해결하는 방법 *모든 재귀는 반복문으로 표현 가능 재귀 함수 : 스스로를 호출하는 함수 재귀 호출 : 재귀 함수는 실행 과정 중에 자기 자신을 호출하게 됨 *모든 재귀 함수는 함수의 호출 없이 while / for loop로 표현 가능 .. CodeStates/JavaScript 2022. 3. 14. [JavaScript] 객체 지향 프로그래밍 Object-Oriented Programming 하나의 모델이 되는 청사진(blueprint)을 만들고 (Class),그 청사진을 바탕으로 한 객체를(object) 만드는 (instance) 프로그래밍 패턴 속성과 메소드가 하나의 "객체"라는 개념에 포함 *자바스크립트 내장 타입인 object(이하, obj literal)와는 다르게 Class라는 이름 사용 instance : 청사진을 바탕으로 만들어진 인스턴트 객체 (instance object) 절차 지향 프로그래밍과 달리 데이터와 기능을 한곳에 묶어서 처리 *절차적 언어 : 순차적인 명령의 조합 자바스크립트 : 객체 지향 언어는 아니지만 객체 지향 패턴으로 작성 가능 OOP의 특징 1. 캡슐화(Encapsulation) 데이터(속성)와 기능(메소.. CodeStates/JavaScript 2022. 2. 28. [JavaScript] 고차함수 고차함수의 개념 1. 일급 객체(first-class citizen) 자바스크립트에서 일급객체는 함수가 대표적 변수에 할당 가능 //함수 표현식 let 변수1 = function() { return '함수를 변수1에 할당가능' //함수 선언식 function 변수2() { return '이렇게도 할당 가능' } //console.log를 찍어보면? console.log(변수1) ƒ () { return '함수를 변수1에 할당가능' } console.log(변수1) function 변수2() { return '이렇게도 할당 가능' } //함수 실행 값(함수를 실행시킨 형태)과 구분해서 헷갈리지 말자 변수1() '함수를 변수1에 할당가능' 변수2() '이렇게도 할당 가능' 다른 함수의 인자로 전달 가능 (.. CodeStates/JavaScript 2022. 2. 27. [JavaScript] 원시 자료형과 참조 자료형 역사 과거엔 데이터 저장소(메모리)의 용량이 제한되어 변수 하나에 하나의 원시 자료형 밖에 담을 수 밖에 없었다 띄어쓰기, 탭, 쉼표 등으로 데이터를 구분하여 배열과 비슷한 형태로 자료 구조를 구현(comma-separated values)했으나 보통 사이즈가 제한되어 번거로움 데이터의 크기가 동적으로 변하는 특별한 데이터 보관함의 필요성 대두 원시 타입(primitive type) 고정된 저장 공간을 차지하는 데이터로 하나의 정보를 가지고 있음 객체가 아니면서 method를 가지지 않는 6가지의 타입 number, string, boolean, undefined, symbol, (null) 변수에는 데이터의 크기와는 관계 없이 하나의 데이터만 담을 수 있으며 값 자체에 대한 변경이 불가능(immutab.. CodeStates/JavaScript 2022. 2. 9. [JavaScript] 호이스팅 Scope (유효범위) 호이스팅에 대해 알기 위해선 먼저 전역과 지역 스코프가 무엇인지 알아야 된다. 함수와 변수는 전역 또는 코드 블록, 함수 내에 선언되며, 선언된 위치에 따라 유효범위를 갖는다 어디에 선언되었는지에 따라 다른 코드가 자신을 참조할 수 있는지 결정됨 스코프의 범위 자바스크립트에서 스코프는 전역 스코프(Global)와 지역 스코프(Local Scope)로 나뉜다. 1. 전역 스코프 가장 바깥쪽 스코프 전역 스코프에 선언된 변수는 전역 변수 var 키워드로 선언된 전역 변수는 전역 스코프에 저장되어 console.log(window.변수명)으로 접근 가능 let, const 키워드로 선언된 전역 변수는 전역 스코프에 저장되지 않고 스크립트 스코프에 저장된다 var a = 1 let b =.. CodeStates/JavaScript 2022. 1. 21. [JavaScript] 배열과 객체 배열 Array 배열은 순서(index)가 있는 값이며, index는 0부터 번호를 매김 [ 대괄호 ] 를 이용해 배열을 만들고 각각의 element는 쉼표 , 로 구분 index를 이용해 값(요소(element))에 접근 가능 없는 인덱스 조회시 undefined 배열 안에 배열 중첩 가능 : 이차원 배열 등등 console.table(arr) : 인덱스와 값을 테이블로 보여줌 [ ] === [ ] → false 구조상으론 같은 배열로 보여도 주소가 다른 두 개의 빈배열 let myNumber = [1, 2, 3, 4, 5, 6]; //각각의 엘리먼트는 쉼표로 구분 myNumber[3]; //4 myNumber[2] = 8 //2번 인덱스의 값인 3이 8로 바뀜 [1, 2, 8, 4, 5, 6] myN.. CodeStates/JavaScript 2022. 1. 4. [JavaScript] 반복문 반복문의 구조 1. for문 초기화, 조건식, 증감문을 ';'으로 구분 초기화, 조건식, 증감문은 선택사항이지만 조건문 생략시 break 필요 상황에 따라 초기화, 조건식, 증감문 생략 가능 *생략해도 세미콜론 ; 표시 필수, 생략된 for문은 while문과 형태가 같음 초기화 : let 또는 var를 이용해 선언 var : 반복문에 제한되지 않음 let : 반복문의 지역변수가 됨 같은 타입일 경우 ';'를 이용해 하나 이상의 변수의 초기화 및 증감이 가능 for(초기화; 조건식; 증감문) { // 반복할 내용 } 2. while문 초기화, 증감문은 따로 작성 조건식만 괄호 안에 작성 초기화와 증감문이 필요없을 때 사용 기본적인 동작구조는 for문과 동일 초기화 while(조건식){ //반복할 내용 증감.. CodeStates/JavaScript 2021. 12. 19. [JavaScript] 문자열 문자열 문자열 : string 문자 하나 : character → char 1. str[index] index로 접근 가능 index : 0부터 시작 문자를 바꿀 수 없음 var str = 'UKKIKKI'; console.log(str[0]); //U str[0] = 'G'; //U가 G로 바뀌지 않음(에러 발생X) 2. + 연산자 string 타입과 다른 타입 사이에 + 연산자를 쓰면 string (문자열) 형식으로 변환 더하기( + ) : 문자열과 숫자 모두에 대해 정의되어 있으므로 '문자열 숫자' + 숫자는 연산이 아닌 문자열의 형태로 이어붙음 빼기( - ), 나누기( / ), 곱하기( * ) : 문자열이 아닌 숫자에 대해서만 정의되어 있으므로 '문자열 숫자'가 숫자의 형태로 전환되어 연산한 결과.. CodeStates/JavaScript 2021. 12. 19. 이전 1 2 다음 반응형