본문 바로가기

프로그래밍언어68

[모던 자바스크립트 Deep Dive] 24장 클로저 클로저는 자바스크립트 고유의 개념이 아니다. 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 중요한 특성이다. MDN에서는 클로저에 대해 다음과 같이 정의하고 있다. 클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합니다. const x = 1; function outerFunc(){ const x = 10; function innerFunc(){ console.log(x); //10 } innerFunc(); } outerFunc(); 중첩 함수 innerFunc의 상위 스코프는 외부 함수 outerFunc의 스코프다. 따라서 중첩 함수 innerFunc 내부에서 자신을 포함하고 있는 외부 함수 outerFunc의 x 변수에 접근할 수 있다. 24.1 렉시컬 스코프 자바스크립트 엔진.. 2023. 8. 29.
[C++] C++ 언어의 기초 (2) - 흐름제어, 구초체와 클래스, 포인터 조건문 if문 if(조건) { 문장 1; //조건이 참일 때 실행할 문장 } else{ 문장 2; //조건이 거짓일 때 실행할 문장 } switch문 switch(정수형_수식) { case 값1: 문장1; //정수형 수식의 값이 값1일 대 실행할 문장들을 나열 break; //switch문을 빠져나가게 함 case 값2: 문장2; //정수형 수식의 값이 값2일 대 실행할 문장들을 나열 break; //switch문을 빠져나가게 함 ..... default : //정수형 수식의 값과 일치하는 case 값이 없을 때 문장n; //실행할 문장들을 나열 } 반복문 for문 for(초기화; 반복조건; 증감) { 문장; } for(원소선언 : 데이터집합) { 문장; } while문 while(반복 조건) { 문장;.. 2023. 8. 23.
[C++] C++ 언어의 기초 (1) - 기본 자료형, 연산자 식별자 프로그램을 만들 때 여러 가지 대상을 구분하기 위해 이름을 만들 필요가 있다. 이러한 이름을 식별자(identifier)라고 한다. 변수나 함수, 클래스 등의 이름이 식별자에 해당한다. 기본 자료형 유형 자료형 기억공간 (byte) 정수형 char 1 unsigned char 1 short 2 unsigned short 2 int 4 unsigned int 4 long 4 unsigned long 4 long long 8 unsigned long long 8 wchar_t 2/4 bool 1 실수형 float 4 double 8 long double 8 정수형 자료형 이름 앞에 unsigned라는 키워드를 사용하면 음수를 제외한 정수를 표현할 수 있게 된다. 양·음을 모두 표현할 수 있는 부호가 .. 2023. 8. 23.
[C++] C++ 언어의 개요 C와C++ C++는 AT&T 벨 연구소의 비야네 스트롭스트룹(Bjarne Stroustrup)이 C 언어를 확장하여 만든 객체지향 프로그래밍 언어이다. 따라서 C가 가지고 있는 모든 기능이 C++ 안에 포함되어 있다. C는 절차적 프로그래밍 언어 C++는 객체지향 프로그래밍 언어 선행처리 C++ 소스 프로그램은 컴파일되기 전에 먼저 선행처리 과정을 거친다. 이 과정은 소스 프로그램을 가공하여 실제로 컴파일러가 번역할 소스 프로그램을 만드는데, 선행처리기가 이 작업을 수행한다. 선행처리기가 어떤 작업을 할 것인가를 지시하는 명령어를 선행처리기 지시어라고 한다. 선행처리기 지시어는 '#'으로 시작하며, 한 행에 한 문장씩 작성한다. #include : 헤더 파일을 소스 프로그램에 결합하기 #definde, .. 2023. 8. 23.
[모던 자바스크립트 Deep Dive] 23장 실행 컨텍스트 실행 컨텍스트는 자바스크립트의 동작 원리를 담고 있는 핵심 개념이다. 23.1 소스코드의 타입 ECMAScript 사양은 소스코드를 4가지 타입으로 구분한다. 소스코드 타입 설명 전역 코드 전역에 존재하는 소스코드를 말한다. 전역에 정의된 함수, 클래스 등의 내부 코드는 포함되지 않는다. 함수 코드 함수 내부에 존재하는 소스코드를 말한다. 함수 내부에 중첩된 함수, 클래스 등의 코드는 포함되지 않는다. eval 코드 빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드를 말한다. 모듈 코드 모듈 내부에 존재하는 소스코드를 말한다. 모듈 내부의 함수, 클래스 등의 내부 코드는 포함되지 않는다. 23.2 소스코드의 평가와 실행 모든 소스코드는 실행에 앞서 평가 과정을 거치며 코드를 실행하기 .. 2023. 8. 19.
[모던 자바스크립트 Deep Dive] 22장 this 22.1 this 키워드 메서드가 자신이 속한 객체의 프로퍼티를 참조하려면 먼저 자신이 속한 객체를 가리키는 식별자를 참조할 수 있어야 한다. this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수다. this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조할 수 있다. this는 자바스크립트 엔진에 의해 암묵적으로 생성되며, 코드 어디서든 참조할 수 있다. 함수를 호출하면 arguments 객체와 this가 암묵적으로 함수 내부에 전달된다. //객체 리터럴 const circle = { radius: 5, getDiameter(){ //this는 메서드를 호출한 객체를 가리킨다. return 2 * this.radius; } }; consol.. 2023. 8. 17.
[모던 자바스크립트 Deep Dive] 21장 빌트인 객체 21.1 자바스크립트 객체의 분류 자바스크립트 객체는 다음과 같이 크게 3개의 객체로 분류할 수 있다. 표준 빌트인 객체 ECMAScript 사양에 정의된 객체 호스트 객체 ECMAScript 사양에 정의되어 있지 않지만 자바스크립트 실행 환경에서 추가로 제공하는 객체 사용자 정의 객체 사용자가 직접 정의한 객체 21.2 표준 빌트인 객체 자바스크립트는 Object, String Number, Boolean, Symbol, Date, Math, RegExp, Array, Map/Set, WeakMap/WeakSet, Function, Promise, Reflect, Proxy, JSON, Error 등 40여 개의 표준 빌트인 객체를 제공한다. Math, Reflect, JSON을 제외한 표준 빌트인 객.. 2023. 8. 16.
[모던 자바스크립트 Deep Dive] 20장 strict mode 20.1 strict mode란? function foo() { x = 10; } foo(); console.log(x); //? foo 함수 내에서 선언하지 않은 x 변수에 값 10을 할당했다. 자바스크립트 엔진은 암묵적으로 전역 객체에 x 프로퍼티를 동적 생성한다. 이때 전역 객체의 x 프로퍼티는 마치 전역 변수처럼 사용할 수 있다. 이러한 현상을 암묵적 전역이라 한다. strict mode는 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성을 높이거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킨다. *ESLint(린트) 도구의 사용을 선호한다. 20.2 strict mode의 적용 'use strict'; //strict mo.. 2023. 8. 15.
[모던 자바스크립트 Deep Dive] 19장 프로토타입 19.1 객체지향 프로그래밍 속성을 통해 여러 개의 값을 하나의 단위로 구성한 복합적인 자료구조를 객체라 하며, 객체지향 프로그래밍은 독립적인 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임이다. 객체는 상태 데이터와 동작을 하나의 논리적인 단위로 묶은 복합적 자료구조라고 할 수 있다. 이때 객체의 상태 데이터를 프로퍼티, 동작을 메서드라 부른다. 19.2 상속과 프로토타입 상속은 객체지향 프로그래밍의 핵심 개념으로, 어떤 객체의 프로퍼티 또는 메서드를 다른 객체가 상속받아 그대로 사용할 수 있는 것을 말한다. 자바스크립트는 프로토타입을 기반으로 상속을 구현한다. //생성자 함수 function Circle(radius) { this.radius =radius; } //Circle 생성자 함수가.. 2023. 8. 15.
[모던 자바스크립트 Deep Dive] 18장 함수와 일급 객체 18.1 일급 객체 다음과 같은 조건을 만족하는 객체를 일급 객체라 한다. 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다. 변수나 자료구조(객체, 배열 등)에 저장할 수 있다. 함수의 매개변수에 전달할 수 있다. 함수의 반환값으로 사용할 수 있다. 자바스크립트는 위의 조건을 모두 만족하므로 일급 객체다. //1. 함수는 무명의 리터럴로 생성할 수 있다. //2. 함수는 변수에 저장할 수 있다. //런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다. const increase = function (num) { return ++num; }; const decrease = function (num) { return --num; }; //2. 함수는 객체에 저장.. 2023. 8. 13.
[모던 자바스크립트 Deep Dive] 17장 생성자 함수에 의한 객체 생성 17.1 Object 생성자 함수 생성자 함수란 new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수를 말한다. 생성자 함수에 의해 생성된 객체를 인스턴스라 한다. //빈 객체의 생성 const person = new Object{}; //String 생성자 함수에 의한 String 객체 생성 const strObj = new String('Lee'); console.log(typeof strObj); //object console.log(strObj); //String{"Lee"} 17.2 생성자 함수 17.2.1 객체 리터럴에 의한 객체 생성 방식의 문제점 객체 리터럴에 의한 객체 생성 방식은 단 하나의 객체만 생성한다. 객체는 프로퍼티를 통해 객체 고유의 상태를 표현한다. 그리고 메서드를 .. 2023. 8. 12.
[모던 자바스크립트 Deep Dive] 16장 프로퍼티 어트리뷰트 16.1 내부 슬롯과 내부 메서드 내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드다. ECMAScript 사양에 등장하는 이중 대괄호 ([[ ... ]])로 감싼 이름들이 내무 슬롯과 내부 메서드다. 16.2 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다. 프로퍼티의 상태란 프로퍼티의 값, 값의 갱신 가능 여부, 열거 가능 여부, 재정의 가능 여부를 말한다. 16.3 데이터 프로퍼티와 접근자 프로퍼티 프로퍼티는 데이터 프로퍼티와 접근자 프로퍼티로 구분할 수 있다. 16.3.1 데이터 프로퍼티 데이터.. 2023. 8. 12.