타입스크립트의 필요성 및 개요

  • 타입스크립트란? 자바스크립트에 '타입(Type)'이라는 개념을 추가하여 더 안전하고 예측 가능한 코드를 작성할 수 있게 해주는 언어입니다. 결국 자바스크립트로 변환되어 실행됩니다.
  • 타입스크립트의 필요성 (쓰는 이유): 자바스크립트가 데이터를 확정 짓는 능력(동적 타입)이 부족하여 런타임 오류가 발생하기 쉽기 때문에, 타입스크립트는 : (콜론)이라는 한정사(타입 어노테이션)를 사용하여 변수나 함수의 데이터 형식을 미리 선언(확정)함으로써, 코드 실행 전에 오류를 찾아내고 안정성을 높입니다. 이를 통해 대규모 프로젝트의 유지보수성과 협업 효율성을 크게 향상시킵니다.

type과 interface의 차이점

  • interface (인터페이스):
    접점(Interface): 이름 그대로 '접점'의 역할을 합니다. 주로 객체의 구조를 정의하고, 다른 클래스가 특정 인터페이스의 형태를 따르도록 implements 키워드를 통해 강제할 수 있습니다 (객체 지향적 관점).

    확장 가능: 다른 인터페이스를 extends 키워드를 통해 상속받아 확장할 수 있습니다.

    선언적 병합(Declaration Merging) 가능: 같은 이름으로 여러 번 선언하면 타입스크립트가 이를 하나로 합쳐줍니다. 라이브러리 타입 확장에 유리합니다.
  • type (타입 별칭 / Type Aliases):

    타입의 형식 지정: 기존 타입에 새로운 이름을 부여하여 복잡한 타입을 간결하게 표현하거나, 유니언 타입, 인터섹션 타입 등 복합적인 타입들을 정의할 때 주로 사용됩니다.

    확장 불가능 (결합): extends를 통한 상속은 불가능하지만, & (인터섹션 타입)을 사용해 여러 타입을 '결합'하는 방식으로 유사한 효과를 낼 수 있습니다.

    선언적 병합 불가능: 같은 이름으로 여러 번 선언하면 오류가 발생합니다.

    객체의 구조를 타입으로 정의하는 예시:위 코드는 직접 객체 리터럴의 타입을 정의하는 방식으로, 매번 동일한 구조의 객체 타입을 반복해서 정의해야 하는 비효율성이 있습니다. 이럴 때 type이나 interface를 사용하면 코드 재사용성과 가독성을 높일 수 있습니다:
    type UserType = { name: string; age: number; }; // type을 사용하여 객체 구조를 타입으로 정의
    const user1: UserType = { name: "John", age: 30 };
    const user2: UserType = { name: "Jane", age: 20 };
    
    const user: { name: string; age: number; } = { name: "Alice", age: 30 };
    

타입스크립트의 다양한 타입들

  • 유니언 타입 (Union Types): | (파이프) 기호를 사용하여 둘 이상의 타입 중 하나를 가질 수 있음을 나타냅니다. 예: let value: string | undefined = "Hello"; (값은 문자열이거나 undefined일 수 있음)
  • 리터럴 타입 (Literal Types): 변수가 특정 고정된 값만 가질 수 있도록 형식(타입)을 제한하는 것입니다. 문자열, 숫자, 불리언 리터럴을 타입으로 사용할 수 있습니다. 예: let direction: "up" | "down" = "up"; (변수는 "up" 또는 "down" 값만 가질 수 있음)
  • 열거형 (Enum Types): enum 키워드를 사용하여 숫자 값 집합에 이름을 부여하는 타입입니다. "리터럴과 80% 비슷하며 둘 중 하나를 선택하여 사용할 수 있다."는 설명은 리터럴 타입처럼 특정 값들을 제한한다는 점에서 유사하지만, 숫자에 이름을 부여하여 가독성을 높이고 특정 값들의 집합을 '미리 정의된 코드'로 사용할 때 더 유용하다는 의미입니다.
    • 목적: 숫자 형태를 이해하기 쉬운 문자로 만들어 코드 가독성을 높입니다.
    • 예시: enum Direction { Up, Down, Left, Right }
    • 특징: Up은 자동으로 0, Down은 1 등으로 숫자가 할당되며, 필요하면 직접 숫자를 지정할 수도 있습니다 (예: enum HttpStatus { OK = 200, NotFound = 404 }).
    • 정적이고 엄격한 사용: 상수로 선언하여 리터럴 타입을 사용하는 것보다 더 엄격하게, 더 정적으로 사용될 수 있습니다.

4. 객체 지향 프로그래밍 (OOP)과 클래스

  • 객체 지향 프로그래밍(OOP) (방법론): 프로그래밍 방법론 중 하나로, 프로그램을 객체 위주, 객체 중심으로 구성하여 현실 세계의 사물처럼 데이터(속성)와 기능을 묶어 관리합니다. 재사용성, 유지보수성, 확장성 등을 높이는 데 목적이 있습니다.
  • class (클래스): 자바스크립트의 객체 지향에서 class는 객체를 생성하기 위한 '설계도' 또는 '템플릿' 역할을 합니다. 클래스 안에는 속성(property)과 메서드(method)를 정의할 수 있습니다.
    • constructor: 클래스의 객체(인스턴스)가 생성될 때 호출되는 특별한 메서드입니다. 속성들을 초기화하는 역할을 합니다.
    • private: 클래스 내부에서만 접근할 수 있는 속성(예: private speed)을 정의할 때 사용합니다.
    • has A inheritance (포함 관계): GamePanel 클래스에서 private car: SUVCar;와 같이 선언하는 것은 "GamePanel이 SUVCar를 가지고 있다"는 의미의 포함 관계(Composition)를 나타냅니다. 이는 상속(Inheritance)과는 다른 개념으로, 한 클래스가 다른 클래스의 객체를 자신의 속성으로 가지는 것입니다.
    • 실체화(Instantiation) 및 객체 생성: this.car = new SUVCar()와 같이 new 키워드를 사용하여 클래스의 실체(객체, 인스턴스)를 만들어야만, 해당 객체의 속성과 메서드를 사용할 수 있습니다. "실체화하여야 사용이 가능, 객체가 있어야 사용 가능." 이 바로 이 부분을 설명합니다.

제네릭 (Generic)

제네릭선언할 때(함수나 클래스를 정의할 때) 타입을 마치 함수의 파라미터처럼 사용하는 것을 의미합니다. 코드를 작성할 때는 타입을 확정하지 않고, 실제로 사용할 때(호출할 때) 타입을 지정할 수 있게 해주는 기능이에요.

  • 목적: 한 번 작성한 코드를 여러 타입에서 재사용할 수 있도록 하여 코드 중복을 줄이고 유연성을 높입니다.
  • 기본 문법: <T>와 같이 꺾쇠 괄호 안에 타입 파라미터(관례적으로 T, U, K 등을 사용)를 넣어 사용합니다.
  • 예시: function print<T>(value: T): void { ... }
    • print<string>("Hello, World!"); // T는 string으로 지정
    • print<number>(42); // T는 number로 지정
    • getText<string>('hi');
    • getText<number>(10);
    • getText<boolean>(true);
728x90

타입스크립트란?

타입스립트란 자바스크립트에 타입을 부여한 언어입니다. 타입스크립트는 자바스크립트와 다르게 브라우저에서 실행하기 위하여 변환하는 '컴파일(compile)' 과정이 필요합니다.


타입스크립트를 사용하는 이유

에러의 사전 방지

자바스크립트는 유연함이 장점인 언어이지만 데이터를 확정짓는 능력은 부족합니다. 이러한 자바스크립트의 안정성과 구조를 더해주는 도구인 타입스크립트를 사용하고, 컴파일 과정을 통하여 데이터를 확정짓는 능력을 축소하며 의도하지 않은 코드의 동작을 막을 수 있습니다.

 

코드 가독성 및 유지보수성 향상

코드에 명시적으로 타입 정보가 드러나므로, 개발자가 변수나 함수의 역할과 데이터를 더 쉽게 이해할 수 있습니다. 이는 팀원 간의 협업이나 시간이 지난 후 코드를 다시 볼 때 매우 유용합니다.

 

확장성과 안정성

 대규모 프로젝트에서 복잡한 구조를 관리하고 예측 불가능한 버그를 줄이는 데 큰 도움이 됩니다.

728x90

'TypeScript' 카테고리의 다른 글

[Type Script] 타입스크립트의 타입 정리  (0) 2025.06.28

다중 작업 환경과 CPU 컨텍스트 스위칭

컴퓨터가 한 번에 여러 프로그램을 실행하는 것처럼 보이는 것을 다중 작업(Multitasking)이라고 합니다. 이는 두 가지 방식으로 나뉩니다.

  • 멀티프로세스(Multiprocess): 여러 독립적인 프로그램(예: 웹 브라우저, 워드 프로세서)이 동시에 실행되는 것입니다. 각각의 프로그램은 운영체제로부터 독립적인 메모리 공간을 할당받습니다.

  • 멀티스레드(Multithread): 하나의 프로그램(프로세스) 안에서 여러 작은 작업 단위(스레드)가 동시에 실행되는 것입니다. 스레드들은 프로세스의 메모리 공간을 공유해요.

과거에 CPU가 하나밖에 없을 때, CPU는 한 번에 하나의 작업만 처리할 수 있기 때문에 실제로 여러 프로세스가 동시에 완벽히 병렬로 실행되는 건 불가능했습니다.  하지만 운영체제(OS)가 '시분할(Time-sharing)'이라는 기술을 사용해서 마치 여러 프로그램이 동시에 실행되는 것처럼 보이게 만듭니다. 여기서 중요한 개념이 바로 컨텍스트 스위칭(Context Switching)입니다.

  • 컨텍스트 스위칭: CPU가 한 프로세스(또는 스레드)에서 다른 프로세스로 작업을 전환할 때, 현재 실행 중인 프로세스의 상태(어디까지 작업했는지, 어떤 값을 가지고 있었는지 등)를 잠시 저장하고, 다음에 실행할 프로세스의 상태를 불러와서 작업을 이어서 진행하는 과정이에요. 이 '프로세스의 문맥 개체'가 바로 그때 저장하고 불러오는 정보 묶음을 말합니다. 컨텍스트 스위칭은 매우 빠르게 일어나서 사용자 입장에서는 프로그램들이 동시에 실행되는 것처럼 느껴집니다.


모듈이란?

모듈(Module)은 프로그램을 구성하는 독립적인 '작은 부품 단위'입니다. 하나의 프로그램 코드를 기능별로 쪼개어 놓은 작은 파일이나 코드 묶음이라고 생각하면 이해하기 쉽습니다.

  1. 코드의 재사용성:
    • 특정 기능(예: 날짜를 특정 형식으로 변환하는 함수, 사용자 정보를 검증하는 함수)을 하나의 모듈로 만들면, 해당 기능을 여러 프로젝트나 프로그램의 여러 부분에서 필요할 때마다 가져다 쓸 수 있어요.
    • 똑같은 코드를 여러 번 작성할 필요 없이, 이미 검증된 모듈을 '재활용'하여 개발 시간을 단축시킵니다.
  2. 유지보수 용이성:
    • 프로그램이 커질수록 모든 코드를 하나의 거대한 파일에 넣는 것은 비효율적이에요. 모듈로 나누면 각 기능별로 코드가 분리되어 있어서, 특정 기능에 문제가 발생해도 해당 모듈만 집중적으로 수정하고 테스트할 수 있어요. 이는 전체 코드에 미치는 영향을 최소화하고 유지보수를 훨씬 쉽게 만듭니다.
  3. 코드의 조직화 및 가독성:
    • 관련 있는 코드들을 하나의 모듈 안에 묶어 놓으면, 프로그램의 논리적인 구조를 한눈에 파악하기 쉽고 코드의 가독성이 높아집니다.
    • 개발자가 특정 기능을 찾거나 이해하는 데 시간을 덜 들이게 됩니다.
  4. 네임스페이스 오염 방지:
    • 모듈을 사용하지 않고 모든 변수나 함수를 전역(Global) 공간에 선언하면, 다른 파일에서 같은 이름의 변수를 선언했을 때 서로 충돌하여 예기치 못한 오류가 발생할 수 있습니다.
    • 모듈은 자신만의 독립적인 스코프를 가집니다. 따라서 모듈 내부의 변수나 함수는 기본적으로 외부에서 접근할 수 없어요. 필요한 것만 명시적으로 **export(내보내기)**하고, 필요한 곳에서만 **import(가져오기)**하여 전역 스코프를 깨끗하게 유지할 수 있습니다.

자바스크립트에서의 모듈:

과거에는 여러 모듈 시스템(CommonJS, AMD 등)이 있었지만, 현재는 ES2015(ES6)에서 공식적으로 도입된 **ES 모듈(ES Modules, ESM)**이 표준으로 널리 사용됩니다.

  • export: 모듈 내부의 변수, 함수, 클래스 등을 외부에서 사용할 수 있도록 공개할 때 사용합니다.
  • import: 다른 모듈에서 export된 것들을 가져와서 현재 파일에서 사용합니다.
728x90

동기식 (Synchronous)

동기식은 작업을 순차적으로, 즉 한 번에 하나씩 처리하는 방식입니다. 마치 한 줄로 서서 차례를 기다리는 것과 같습니다.

 

  • 순차적 실행: 첫 번째 작업이 완전히 끝나야만 다음 작업이 시작됩니다.
  • 블로킹(Blocking): 현재 작업이 완료될 때까지 이후의 모든 작업은 대기(멈춤)합니다.
  • 예측 가능한 흐름: 코드의 작성 순서대로 작업이 실행되기 때문에 흐름을 이해하기 쉽고 예측하기 용이합니다.

장점

  • 구현이 단순하고 직관적: 코드를 작성하고 이해하기 쉽습니다.
  • 실행 순서가 명확: 디버깅(오류 찾기)이 비교적 용이합니다.

단점

  • 효율성 저하 (블로킹): 시간이 오래 걸리는 작업(예: 네트워크 통신, 파일 읽기)이 발생하면, 그 작업이 끝날 때까지 전체 프로그램이 멈춰 버립니다. 사용자 인터페이스(UI)가 멈추는 '먹통' 현상이 발생할 수 있습니다.
  • 자원 낭비: 대기하는 동안 다른 유용한 작업을 할 수 없으므로 자원 활용이 비효율적일 수 있습니다.

비동기식 (Asynchronous)

비동기식은 작업을 동시에, 또는 독립적으로 처리하는 방식입니다. 작업을 시작해두고 완료되기를 기다리지 않고 바로 다음 작업을 시작합니다. 마치 여러 손님이 동시에 주문을 하고, 커피가 나오는 대로 받아 가는 것과 같습니다.

 

 

  • 비순차적 실행: 작업을 시작한 후, 그 작업이 완료되기를 기다리지 않고 다음 코드를 실행합니다.
  • 논블로킹(Non-blocking): 오래 걸리는 작업이 백그라운드에서 진행되는 동안에도 메인 프로그램은 다른 작업을 계속 처리할 수 있습니다.
  • 콜백, Promise, async/await: 작업 완료 시점을 알리거나 결과를 처리하기 위해 콜백 함수, Promise, async/await 같은 메커니즘을 사용합니다.
  • 자식 프로세스: 비동기 처리를 위해 프로세스가 다른 프로세스를 생성하여 작업을 위임할 수 있습니다.
  • 오래 걸리는 작업을 메인 스레드에서 직접 처리하지 않고, 버퍼에 저장하거나 별도의 스레드에 작업을 위임하여 메인 스레드가 멈추지 않고 다른 일을 할 수 있게 합니다.

장점

  • 성능 및 효율성 향상: 오래 걸리는 작업 동안에도 다른 작업을 처리할 수 있어, 시스템 자원을 효율적으로 사용하고 전반적인 응답 속도가 빨라집니다.
  • 사용자 경험 개선: 웹 애플리케이션에서 페이지가 멈추지 않고 계속 상호작용이 가능하여 사용자 경험이 향상됩니다.

단점

  • 구현 복잡성 증가: 코드의 실행 순서가 명확하지 않아 로직이 복잡해질 수 있고, 디버깅이 어려울 수 있습니다. (흔히 '콜백 지옥'이라 불리는 문제)
  • 예측 불가능성: 나중에 시작된 작업이 먼저 끝날 수도 있어서, 작업 간의 엄격한 순서가 필요한 경우에는 별도의 동기화 메커니즘이 필요할 수 있습니다.

 

 

728x90

'CS' 카테고리의 다른 글

세션(Session)이란?  (1) 2025.08.03
Prisma ORM에 대하여  (0) 2025.08.02
클린 아키텍쳐(Clean Architecture)란?  (0) 2025.07.12
객체 지향이란?  (0) 2025.06.29
데이터 정규화(Normalization)란?  (0) 2025.06.26

1. DOM과 MVW 아키텍처 방식의 차이

  • DOM (Document Object Model) 프로그래밍: 웹 페이지의 모든 내용을 객체처럼 다룰 수 있게 해주는 인터페이스입니다. 전통적으로 웹 페이지의 요소를 직접 선택하고 조작하는 방식입니다. 하지만 대규모 애플리케이션에서는 코드가 복잡해지고 유지보수가 어려워지는 경향이 있습니다.

  • MVW (Model-View-Whatever) : MVC(Model-View-Controller)나 MVVM(Model-View-ViewModel) 등 다양한 아키텍처 패턴을 통칭하는 말입니다. 데이터(Model)와 화면(View)을 분리하여 관리하는 것이 핵심입니다.

    "데이터와 제어를 고립화시키지 않는다."라는 말은, MVW 패턴들이 데이터와 UI를 느슨하게 연결하여, 데이터 변경이 UI에 자동으로 반영되거나(바인딩), UI 상호작용이 데이터 변경을 일으키도록 하는 특징을 설명하는 것으로 생각했습니다. 즉, DOM을 직접 조작하기보다 데이터 변화에 따라 UI가 동기화되는 방식입니다.

  • 바인딩 : 데이터(Model)와 화면(View) 요소를 연결하여 한쪽이 변하면 다른 쪽도 자동으로 업데이트되도록 하는 과정을 의미합니다. MVW 아키텍처의 핵심 원리 중 하나입니다.
    모델 : "바인딩에 사용되는 것"으로 언급된 '모델'은 애플리케이션이 다루는 데이터 그 자체를 지칭합니다.

2. Vue.js 관련 개념 (Directives와 바인딩)

  • Built-ins / Directives: Vue.js에서 HTML 요소에 특수한 동작을 부여하는 특별한 속성(attribute)들 입니다. 주로 v- 로 시작하며, 데이터와 DOM을 연결(바인딩)하는 데 사용됩니다.
    • v-text: 요소의 텍스트 내용을 데이터에 바인딩합니다.
    • v-html: 요소의 HTML 내용을 데이터에 바인딩합니다 (HTML 태그가 그대로 렌더링됨).
    • v-show: 조건에 따라 요소의 display CSS 속성을 토글하여 요소를 보이고 숨깁니다.
    • v-if / v-else / v-else-if: 조건에 따라 요소를 렌더링할지 말지 결정합니다 (DOM 자체를 추가/제거).
    • v-for: 배열 데이터를 기반으로 목록을 렌더링합니다.
    • v-on: DOM 이벤트(클릭, 키보드 입력 등)를 수신하고 자바스크립트 코드를 실행합니다 (@ 단축 문법 사용).
    • v-bind: HTML 속성(attributes), 클래스(classes), 스타일(styles) 등을 데이터에 바인딩합니다 (: 단축 문법 사용).
    • v-model: 폼 입력 요소(input, textarea, select)에 양방향 바인딩을 설정합니다. 사용자 입력이 데이터에 즉시 반영되고, 데이터 변경이 입력 필드에 즉시 반영됩니다. 특히, "2way binding은 문자열로 입력된다. 바꾸기 위해서는 v-model을 사용한다."는 이 v-model의 중요한 특징과 용도를 잘 나타냅니다.
    • v-slot: 컴포넌트의 콘텐츠 배포를 위한 특수 속성입니다.
    • v-pre: 요소와 그 자식 요소의 Vue 컴파일을 건너뜁니다.
    • v-once: 요소를 한 번만 렌더링하고 이후 데이터 변경에 반응하지 않게 합니다.
    • v-memo: 요소와 컴포넌트 서브트리를 메모하여 특정 의존성이 변경될 때만 업데이트되도록 합니다.
    • v-cloak: Vue 인스턴스가 마운트되기 전까지 요소를 숨기는 데 사용됩니다 (초기 깜빡임 방지).
  • MVC와 DOM: "MVC는 도큐먼트를 쓰지 않기 위한 것이다."라는 말은 MVC 패턴이 DOM을 직접 조작하는 것보다는 추상화된 모델과 뷰를 통해 데이터를 관리하고 화면을 업데이트하는 방식임을 의미하는 것이라고 생각했습니다. 즉, 개발자가 직접 DOM API를 호출할 필요를 줄여주는 효과가 있다는 뜻입니다.

3. 데이터 동기화와 Flux 아키텍처

  • 모델에 대한 줄세우기 (동기화) = FLUX에 유리하며 리액트가 유리하다.
    • 이는 복잡한 애플리케이션에서 여러 컴포넌트가 하나의 공유된 상태(모델)를 참조하고 업데이트할 때 발생하는 문제를 해결하기 위해 Flux 아키텍처가 등장했음을 설명합니다.

    • Flux는 데이터 흐름을 단방향(Unidirectional Data Flow)으로 강제하여 데이터의 변경 경로를 예측 가능하게 만듭니다. 모든 상태 변경은 액션(Action)을 통해 디스패처(Dispatcher)로 전달되고, 스토어(Store)에서 처리된 후 뷰(View)에 반영됩니다. 이렇게 '줄을 세워서' 데이터를 관리하므로, 복잡한 데이터 동기화 문제를 효율적으로 해결할 수 있습니다.

    • React는 이러한 단방향 데이터 흐름과 Flux(혹은 Redux와 같은 파생 라이브러리) 아키텍처와 잘 어울려 사용됩니다.

4. Node.js와 번들링

  • Node.js: 웹 브라우저 밖에서 자바스크립트를 실행할 수 있게 해주는 런타임 환경입니다. 이를 통해 자바스크립트로 서버 개발, 데스크톱 애플리케이션 개발, 개발 도구(예: 번들러) 등을 만들 수 있게 되었습니다.

  • 번들(Bundle): 여러 개의 자바스크립트, CSS, 이미지 파일 등을 웹 브라우저에서 효율적으로 로드하고 실행할 수 있도록 하나의 파일 또는 몇 개의 파일로 합치고 최적화하는 과정입니다. "배포에 알맞게 포장하는 것"이라고 생각이 가능합니다. 웹팩(Webpack), Parcel 등의 번들러가 이 역할을 합니다.

  • left-pad 사건: NPM(Node Package Manager) 생태계에서 발생했던 유명한 사건으로, 아주 작은 유틸리티 모듈 하나에 전 세계 수많은 프로젝트가 의존하고 있었는데, 해당 모듈이 갑자기 삭제되면서 대규모 장애가 발생했던 사례입니다. 이는 모듈 의존성 관리의 중요성과 복잡성을 보여줍니다.

5. 비동기 처리

  • 동기식 / 동기화: 작업을 순차적으로 처리하는 방식입니다. 한 작업이 완료될 때까지 다음 작업이 줄을 서서 기다리는 형태입니다.

  • 비동기식: 작업을 동시에 처리하거나, 한 작업의 완료를 기다리지 않고 다음 작업을 시작하는 방식입니다. "버퍼(완충지)에 저장 후에 필요할 때, 꺼내서 쓴다"는 것은 작업이 완료되기를 기다리지 않고 일단 요청을 보낸 뒤, 나중에 작업이 완료되면 결과(콜백 함수나 프로미스)를 받는 방식을 의미합니다.
    • 비동기식이 요구되는 상황 : 작업이 둘 이상일 경우
       예를 들어, 웹에서 데이터를 받아오는 네트워크 요청(오래 걸리는 작업)이 있을 때, 이 요청이 끝날 때까지 UI가 멈추지 않고 다른 작업을 할 수 있게 하기 위해 비동기 처리가 필요합니다.
  • UI 스레드 (메인 스레드) / 보조 스레드: 웹 브라우저는 UI를 렌더링하고 사용자 이벤트를 처리하는 메인 스레드(UI 스레드)를 가집니다. 오래 걸리는 동기 작업은 이 메인 스레드를 막아 UI가 멈추게(freeze) 합니다. 비동기 작업은 이러한 블로킹을 피하기 위해 사용됩니다. 자바스크립트 자체는 싱글 스레드 언어이지만, 브라우저나 Node.js 환경에서 제공하는 Web APIs (Node.js의 경우 C++ 바인딩 등)를 통해 비동기 작업을 처리하여 메인 스레드의 블로킹을 막습니다.

  • Promise (프로미스) 함수: 자바스크립트에서 비동기 작업의 최종 완료 또는 실패를 나타내는 객체입니다. 비동기 작업의 결과를 마치 동기적인 값처럼 다룰 수 있게 하여 콜백 지옥(callback hell) 문제를 해결하고 코드를 더 깔끔하게 작성할 수 있게 해줍니다.

  • 스레드, 프로세스, 콜백
    프로세스: 운영체제에서 실행되는 프로그램의 독립적인 인스턴스입니다. 각각의 프로세스는 자신만의 메모리 공간을 가집니다.
    스레드: 프로세스 내에서 실행되는 실행 단위입니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 스레드들은 프로세스의 메모리 공간을 공유합니다.
    콜백(Callback): 특정 이벤트가 발생하거나 비동기 작업이 완료된 후 나중에 호출될 함수입니다. 비동기 처리의 가장 기본적인 방법입니다.
728x90