전체보기 (286) 썸네일형 리스트형 자바스크립트 new를 이용한 객체 생성 과정 Cons() { this.value = 'value'; } var c = new Cons(); 1. new는 빈객체를 만든다. { } 2. this는 이 객체를 가리키게 된다. 3. Cons 함수가 실행된 다음에 자동으로 this가 return 된다. 그리하여 c는 this를 참조하게 되고 c.value로 생성된 객체의 'value' 값을 불러올 수 있다. 자바스크립트 함수 내부의 변수는 private이다? private 구현하는 법 아래의 함수에 접근하는 방법은 function func() { var value = 'private'; } func()로 호출하는 방법 뿐이다. new 연산자를 붙여 객체를 생성할 수도 있다. const obj = new func(); 그러나 내부의 value에는 접근할 수 없다. func()로 호출하면 내부 컨텍스트에서만 실행되고 말 뿐이고 new func()로 obj에 객체로 담는다고 해도 func() 실행시 value는 'private' 값을 담고 더 이상 쓰이지 못하기 때문에 바로 가비지 컬렉터로 간다? (이거는 확신하지 못하겠다.) 다만 value를 클로저에서 가져다 쓴다면 남겨둘 수 있다. (클로저란 이미 생명 주기가 끝난 외부 함수의 변수를 참조하는 함수다.) 때문에 함수 내부의 변수는 pr.. input 코딩 삽질 output 코딩 노하우 기록 (코딩 삽질) => return 1. 모든 곳을 꼼꼼히 살펴보자. 부모와 자식의 관계로 이루어진 재귀함수를 구현하는 패턴에서 재귀함수 안에서의 로직만 살펴보다가 정작 밖에 있는 조상 부모의 값을 바꾸지 않아 에러가 났었다. 이렇듯 작은 것 하나를 빼먹어서 오류가 생기는 경우가 있으니 이곳저곳을 유심히 봐야 한다. 2. 값을 대입해보자. 값이 변수에 담긴채로 코드가 진행되다 보니 변수가 가리키는 게 잘못돼 있어 오류가 나는 경우가 허다하다. 값을 하나하나 넣어서 어떤 식으로 코드가 흘러가는지 살펴보자. 그러다보면 어디에서 잘못됐는지를 찾을 수 있다. 3. 콘솔 로그를 이용하자. 오류가 났을 때 코드가 복잡하게 얽혀 있는 곳을 먼저 의심하게 된다. 어려워서 눈에 잘 들어오지도 않기 때문에 콘솔 로그를 써서 .. 클래스 사용법과 2가지 상속 (class, pseudoclassical) 기본 규칙 class는 사실 함수와 같다. 그러나 class 선언은 함수 선언과 달리 호이스팅이 일어나지 않는다. 때문에 선언되기 전에 사용하면 오류가 발생한다. 또 엄격 모드에서만 사용할 수 있다. class의 내부에 선언한 함수 앞에 static을 붙이면 인스턴스를 생성하지 않고도 사용할 수 있다. 대신 인스턴스를 통해서 사용할 수는 없다. class Book { static nextPage() { } } Book.nextPage(); // 가능 const book = new Book(); book.nextPage(); // 불가능 인스턴스의 속성은 일반 객체와 달리 클래스 메소드 안에 정의돼야 한다. 상속 클래스를 이용한 상속은 다음과 같다. class Human { constructor(name).. 시간 복잡도 (Time Complexity) 알고리즘마다 시간 복잡도를 측정하는 이유는 성능 때문이다. 데이터의 수가 늘어남에 따라서 알고리즘의 처리수가 어떻게 증가하는지를 알면 같은 문제를 해결할 때 어떤 알고리즘이 대량의 데이터를 다루기 적절한지를 파악할 수 있다. 컴퓨터의 연산 속도는 엄청 빨라서 작은 처리수의 증가는 의미 없고 처리수를 구하는 식에 가장 큰 영향을 주는 부분만 떼서 보는 식으로 시간 복잡도를 계산한다. 시간 복잡도는 Big O를 써서 다음과 같이 표현한다. O(1), O(log n), O(n), O(n²), O(c의 n제곱) O(1)은 데이터량과 관계없이 동일한 처리수를 가질 때를 말한다. O(log n)은 데이터량이 늘어날 때 처리수가 증가하지만 갈수록 늘어나는 폭이 줄어드는 때를 말한다. O(n)는 데이터량이 늘어나는만큼.. 리스트, 해시 테이블, 그래프, 트리 (Linked List, Hash Table, Graph, Tree) 1. Linked List 리스트는 데이터가 저장되는 노드에 데이터 필드와 링크를 마련해놓고 데이터 필드에 데이터를, 링크에 다음 노드가 무엇인지를 가리키는 정보를 저장한다. 때문에 정적 배열과 달리 중간의 노드를 삭제하더라도 삭제한 노드의 앞 노드의 링크를 뒤 노드에 연결시켜 단순한 작업으로 데이터를 수정할 수 있다. 노드를 추가하는 것도 마찬가지다. 다만 노드에 두 정보가 들어가니 정적 배열보다 용량이 클 수밖에 없다. 노드에 링크 하나가 있으면 Singly Linked List라고 하고 링크가 둘 있으면 Doubly Linked List라고 한다. 링크가 하나 더 있으면 양쪽 방향으로 움직일 수 있어 성능이 더 좋을 것으로 생각되지만 용량은 더 커진다. 끝 노드의 링크를 첫 노드에 연결시켜 Circ.. 프로토타입 체인 예제 위 예제에서의 p.number는 링크된 Cons.prototype.number를 호출하지만 아래 예제에서는 p.number에 10을 넣은 순간부터 p.number를 호출 했을 때 프로토타입 체인에 의해 밑에서부터 number 변수를 찾으면 p에 이미 number 변수를 찾을 수 있기 때문에 10이 호출된다. 스택과 큐 (Stack & Queue) 1. Stack LIFO (Last in First out) 스택이 데이터를 처리하는 방식을 일컫는 말이다. 나중에 들어온 데이터가 먼저 나간다. 데이터를 넣기 위해 push라는 함수를 쓰면 아무 데이터도 없을 때 null을 가리키고 있던 top이 새로 들어온 데이터를 가리키게 되고 이렇게 push를 할 때마다 top이 새로운 데이터를 가리킨다. 데이터를 빼기 위해 pop이라는 함수를 쓰면 top이 바로 아래의 데이터를 가리키게 되고 위의 데이터를 빼서 반환한다. 2. Queue FIFO (First in First out) 큐가 데이터를 처리하는 방식을 일컫는 말이다. 먼저 들어온 데이터가 먼저 나온다. 데이터를 넣기 위해 enqueue라는 함수를 쓰면 첫 데이터가 들어왔을 때 front와 end가 첫.. 이전 1 ··· 25 26 27 28 29 30 31 ··· 36 다음