19.7 프로토타입 체인 자바스크립트는 객체의 프로퍼티(메서드 포함)에 접근할 때 해당 객체에 접근하려는 프로퍼티가 없다면 [[Prototype]] 내부 슬릇의 참조를 따라 자신의 부모 역할을 하는 프로토타입의 프로퍼티를 순차적으로 검색한다. 이를 프로토타입 체인이라 한다. 그렇다면 아래의 코드를 확인하자 function Person(name) { this.name = name; } // 프로토타입 메서드 Person.prototype.sayHello = function () { console.log(`Hi! My name is ${this.name}`); }; const me = new Person('Juhyeon'); // hasOwnProperty는 Object.prototype의 메서드다. con..
분류 전체보기
Javascript는 명령형, 함수형, 프로토타입 기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 언어다. Javascript는 객체기반의 프로그래밍 언어이며, Javascript를 이루고 있는 거의 모든 것이 객체다. 원시 타입의 값을 제외한 나머지 값들(함수, 배열, 정규 표현식등)은 모두 객체다. 19.1 객체지향 프로그래밍 객체지향 프로그래밍은 프로그램을 여러 개의 독립적 단위인 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임을 의미한다. 객체지향 프로그래밍은 실체를 인식하는 철학적 사고를 프로그래밍에 접목하려는 시도에서 시작한다. 실체를 인식하거나 구별할 수 있는 속성을 갖는다. 다양한 속성 중에서 프로그램에 필요한 속성만 간추려 내어 표현하는 것을 추상화라 한다. // 실체의 특성을..
1. 일급 객체 일급 객체란 다음 조건을 만족하는 객체를 의미한다. 무명의 리터럴로 생성할 수 있다. => 런타임에 생성이 가능 변수나 자료구조(객체, 배열 등)에 저장할 수 있다. 함수의 매개변수에 사용할 수 있다. 함수의 반환값으로 사용할 수 있다. // 1, 2번 조건 const increase = (num) => { return ++num; }; const decrease = (num) => { return --num; }; // 2번 조건 const auxs = { yes: () => { console.log('yes') }, increase, decrease } // 3, 4번 조건 const makeCounter = (increase) => { let num = 0; return () => ..
이번 글을 단순 기록용으로 작성할 예정이다. 최근 가말다 프로젝트의 리펙토링을 하던 중 유저의 프로필 이미지가 불러오지 않는 오류를 발견했다. 처음에는 리펙토링 도중 새롭게 작성한 코드 때문인줄 알았다. 하지만 원인은 다른 곳에 있었다. 에러의 원인을 어떻게 찾았냐 하면.... 브라우저의 콘솔 창을 보고 알게 되었다. 최근 가말다 서비스의 도메인을 변경한 기록이 있다. 기존에 사용했던 도메인은 .site이었지만 새롭게 변경한 도메인은 .co.kr이다. 이미지 서버의 도메인도 당연히 변하게된다. 기존 http://gamalda.site:(이미지서버 포트)/(이미지 주소) 변경 http://gamalda.co.kr:(이미지서버 포트)/(이미지 주소) 그런데 이미지 서버에서 Client로 이미지 주소를 보내줄..
힙 Heap 정의 힙은 완전 이진 트리 자료구조 이다. 힙에서는 항상 루트 노드를 제거한다. 종류 최소힙 (min heap) 루트 노드가 가장 작은 값을 가진다. 가장 작은 데이터가 우선적으로 제거된다. 최대힙 (max heap) 루트 노드가 가장 큰 값을 갖는다. 값이 가장 큰 데이터가 우선적으로 제거된다. 완전 이진 트리란? 루트 노드 부터 시작하며 왼쪽 자식 노드, 오른쪽 자식 노드 순서로 데이터가 차례대로 삽입되는 트리를 의미한다. 힙에 새로운 원소가 삽입될 때 새로운 원소가 삽입되었을 때 O(log N)의 시간 복잡도로 힙 성질을 유지할 수 있다. 삽입시에 부모 노드와 크기를 비교하여 자리를 바꾼다. (최소힙은 부모노드 보다 작으면 up, 최대힙은 크면 up) 비교결과가 false 혹은 노드 도..
1 - var 키워드로 선언한 변수의 문제점 var는 JS만의 특이한 특징을 갖고 있어 사용하는데 주의를 요구하는 키워드이다. 이를 무시하고 무분별하게 사용하게 되면 아래와 같은 문제가 발생할 수 있다. 1-1. 변수 중복 선언 허용 var 키워드를 이용해 변수를 중복 선언하면 초기화문의 유무로 다르게 동작한다. 초기화문이 있는 경우는 선언문은 자바스크립트 엔진에 의해 var 키워드가 없는 것처럼 동작한다. 초기화문이 없는 경우는 변수 선언문은 무시된다. 변수를 중복 선언하게 되면 의도치 않게 먼저 선언한 변수의 값이 변경될 수 있는 문제가 발생한다. 1-2. 함수 레벨 스코프 var 키워드로 변수를 선언하면 오직 함수의 블럭만을 지역 스코프로 인정한다. 이것은 함수 이외의 다른 블럭(조건문 등 {}로 ..