객체지향 프로그래밍 프로그램을 명령어 또는 함수의 목록으로 보는 전통적인 명령형 프로그래밍의 절차지향적 관점에서 벗어나 여러 개의 독립적 단위, 즉 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임 실세계에서 실체는 특징이나 성질을 나타내는 속성(attribute/property)를 가지고 있고, 이를 통해 실체를 인식하거나 구별한다. 이를 프로그래밍에 접목시켜 사람에게는 다양한 속성(이름, 주소, 성별, 나이 등)이 있으나 구현하려는 프로그램에서는 사람의 이름과 주소라는 속성에만 관심있다고 가정하자. 이처럼 다양한 속성 중에서 프로그램에 필요한 속성만 간추려 내어 표현하는 것을 추상화라고 한다. 상속과 프로토타입 상속: 어떤 객체의 프로퍼티나 메서드를 다른 객체가 상속받아 그대로 사용할 수 있는..
일급 객체 자바스크립트의 함수는 일급 객체이다. 다음과 같은 조건을 만족하는 객체를 일급 객체라고 한다. 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다. 변수나 자료구조(객체, 배열 등)에 저장할 수 있다. 함수의 매개변수에 전달할 수 있다. 함수의 반환값으로 사용할 수 있다. // 1. 무명의 리터럴로 표현이 가능하다. // 2. 변수나 자료 구조에 저장할 수 있다. // 런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고, 변수에 할당된다. const increase = function (num) { return ++num; }; consst decrease = function (num) { return --num; }; // 2. 함수는 객체에 저장할 수 있다. co..
객체 생성 방식 이전에 다양한 객체 생성 방식 중 객체 리터럴을 사용한 객체 생성 방식을 살펴보았다. 이번에는 생성자 함수를 사용하여 객체를 생성하는 방법에 대해 알아보자. 2022.07.25 - [JavaScript/모던 자바스크립트 Deep Dive] - 8. 객체 리터럴 Object 생성자 함수 생성자 함수란 new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수이다. 생성자 함수에 의해 생성된 객체를 인스턴스(Instance)라고 한다. new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환한다. 빈 객체를 생성한 이후 프로퍼티 또는 메서드를 추가할 수 있다. 자바스크립트는 Object 생성자 함수 외에도 String, Number, Boolean, Functio..
문제 링크 First Unique Character in a String - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 유형 해쉬 맵(Hash Map) 문제 풀이 이 문제는 문자열이 주어지고, 문자열에서 처음으로 중복되지 않는 문자의 인덱스를 반환하는 문제이다. 해당 문제는 해쉬 맵을 사용하면 쉽게 해결할 수 있다. 먼저, 각 문자를 확인하면서 키를 각 문자를 저장하고, 값에 중복된 횟수를 저장하는 해쉬 맵을 만든다. 다시 각 문자를 확인하면서 해당 문..
스코프 다른 코드가 식별자를 참조할 수 있는 유효 범위 식별자가 유효한 범위 식별자를 검색하는 규칙 식별자의 이름이 같아도 스코프가 다르기 때문에 같은 이름의 변수를 사용할 수 있다. 스코프 구분 코드의 가장 바깥 영역(전역)에 선언된 변수는 전역 스코프를 갖는 전역 변수로, 어디서든 참조 가능하다. 함수 몸체 내부에서 선언된 변수는 지역 스코프를 갖는 지역 변수로, 함수 내부와 내부 함수에서 참조 가능하다. 함수 레벨 스코프 자바스크립트의 var 키워드는 함수의 코드 블록만을 지역 스코프로 인정한다. 이러한 특성을 함수 레벨 스코프라고 한다. var i = 10; // for문에서 선언한 i는 전역 변수다. 이미 선언된 전역 변수 i가 있으므로 중복 선언되어 전역 변수의 값이 재할당된다. for (va..
함수 일련의 과정을 문(statement)로 표현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것 함수는 함수 정의를 통해 생성하고, 함수 호출을 통해 실행한다. 함수를 언제 사용하는 것이 좋을까? 동일한 작업을 반복적으로 수행해야 하는 경우에는 정의된 함수를 재사용하는 것이 효율적이다. 함수 리터럴 함수 리터럴은 function 키워드, 함수 이름, 매개변수 목록, 함수 몸체로 구성된다. 함수 이름은 생략할 수 있다. 이름이 없는 함수를 무명 함수라고 한다. 함수 이름은 함수 몸체 내에서만 참조할 수 있는 식별자다. (함수 내에서 재귀적 호출이 가능하다) 함수 리터럴은 평가되어 값을 생성하며, 이 값은 객체이다. 즉, 자바스크립트에서 함수는 객체다. 함수는 일급 객체로 일반 객체와 달라 호출할 ..
원시 타입 vs 객체 타입 원시 값 원시 타입의 값은 변경 불가능한 값이다. 원시 값을 변수에 할당하면 변수(확보된 메모리 공간)에는 실제 값이 저장된다. 원시 값을 갖는 변수를 다른 변수에 할당하면 원시 값이 복사되어 전달된다. 이를 값에 의한 전달이라 한다. 객체 값 객체는 변경 가능한 값이다. 객체를 변수에 할당하면 변수(확보된 메모리 공간)에는 참조된 값이 저장된다. 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달된다. 이를 참조에 의한 전달이라 한다. 원시 값 원시 값은 변경 불가능한 값, 읽기 전용 값이다. (불변성) 변수는 원시 값의 재할당을 통해 값을 변경할 수 있다. 변수에 원시 값을 재할당하면 새로운 메모리 공간을 확보하고 재할당된 원시 값을 저장한다. 이때..
객체 (Object) 0개 이상의 프로퍼티로 구성된 집합 프로퍼티 (Property) 프로퍼티는 키(key)와 값(value)로 구성된다. var person = { name: 'Lee', // 프로퍼티(name: 키, 'Lee': 값) age: 20 // 프로퍼티 }; 메서드 (Method) 프로퍼티 값(value)이 함수인 경우 일반 함수와 구분하기 위해 메서드라고 부른다. var counter = { num: 0, // 프로퍼티 increase: function () { // 메서드 this.num++; // this: 객체 자신을 가리키는 참조변수 } }; 객체: 프로퍼티와 메서드로 구성된 집합체 프로퍼티: 객체의 상태를 나타내는 값 메서드: 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작..