JavaScript에서 Class가 결국 함수라는 게 어떤 의미일까?
·
Backend/TypeScript
JavaScript에서 Class는 Function이다.자바스크립트의 클래스는 내부적으로 함수로 구현되어 있습니다. Person 클래스를 통해 어떤 의미인 지 이해해보도록 하겠습니다. Person 클래스는 name 필드와 생성자, sayHello 메소드를 갖고 있습니다. 먼저, 생성자 함수를 살펴보겠습니다.class Person { name: string; constructor(name) { this.name = name; } sayHello() { console.log(`Hello, I'm ${this.name}`); }} 생성자는 자바스크립트 내부적으로 아래와 같은 함수의 형태를 가집니다. this는 새로 생성되는 객체를 가리키고, constructor 내부의 코드가 여기서 실행됩..
추상클래스와 제네릭 (실습)
·
Backend/TypeScript
요구사항에 맞게 코드를 작성하는 과제입니다. 1. 클래스 구조- PublicOfficer: 추상 클래스로, 공무원의 기본 속성과 메서드를 정의- 하위 클래스: Police, Firefighter, Doctor가 상속 2. 핵심 static 클래스들- CentralArchives: 모든 공무원 정보를 중앙 저장소에서 관리- TrainingCenter: 공무원 객체 생성을 담당하는 팩토리 클래스 (제네릭 활용)- Extractor: 특정 타입의 공무원 목록을 필터링하는 유틸리티 클래스 3. 주요 기능- 공무원 등록/제거 (CentralArchives)- 타입별 공무원 목록 조회 (Extractor)- 근속연수(짝수/홀수)별 필터링 기능- 제네릭을 활용한 타입 안전성 보장// 1. PublicOfficer 를..
아이템13. type과 interface 차이점 알기
·
Backend/TypeScript
타입스크립트에서 named type을 정의하는 방법은 두 가지가 있습니다. 대부분의 경우에는 타입을 사용해도 되고 인터페이스를 사용해도 됩니다. 그러나 타입과 인터페이스 사이에 존재하는 차이를 분명하게 알고, 같은 상황에서는 동일한 방ㅂ버으로 명명된 타입을 정의해 일관성을 유지해야 합니다. type TState = { name: string; capital: string;}interface IState { name: string; capital: string;} type과 interface의 비슷한 점1. 인덱스 시그니처는 인터페이스와 타입에서 모두 사용할 수 있다.type TDict = { [key:string]: string};interface IDict { [key:str..
Interface (인터페이스)
·
Backend/TypeScript
기본적인 인터페이스 사용 방법타입 검사는 printLabel을 호출합니다. printLabel 함수는 string 타입 label을 갖는 객체를 하나의 매개변수로 가집니다. 이 객체가 실제로는 더 많은 프로퍼티를 갖고 있지만, 컴파일러는 최소한 필요한 프로퍼티가 있는지와 타입이 잘 맞는지만 검사합니다. function printLabel(labeledObj: {label: string}) { console.log(labeledObj.label);}let myObj = {size:10, label: "Size 10"};printLabel(myObj); LabeledValue 인터페이스는 숫자 타입의 size 프로퍼티와 문자열 타입의 label 프로퍼티를 가지고 있습니다. 다른 언어처럼 printLab..
Iteration Protocol (+Symbol)
·
Backend/TypeScript
이터레이션 프로토콜ES6에서 도입된 이터레이션 프로토콜은 데이터 컬렉션을 순회하기 위한 프로토콜입니다. ES6에서 도입되었으며 크게 두 가지로 구분됩니다.  1. 이터러블 프로토콜Symbol.iterator 메서드를 구현하여 이터레이터를 반환하고, 자바스크립트의 대표적인 이터러블한 데이터 컬렉션은 Array, String, Map, Set 등이 있습니다. for ... of 문으로 순회가 가능하며, ...(스프레드 연산자)를 사용할 수 있습니다. 2. 이터레이터 프로토콜next() 메소드를 갖고 있습니다. next() 메소드는 value와 done 프로퍼티를 가진 객체를 반환합니다. value는 현재 순회 중인 값을 나타내고, done은 순회 완료 여부를 나타내는 boolean 값입니다.   여기서 Sy..
non-null 단언 연산자(!), null 병합 연산자(??) 그리고 옵셔널 체이닝(.?)
·
Backend/TypeScript
! (Non-null assertion operator)!연산자는 개발자가 "이 값은 확실히 null/undefined가 아니다"라고 TypeScript 컴파일러에게 알려주는 것입니다. 하지만 실제 런타임에서는 아무런 체크도 하지 않기 때문에, 확실히 보장될때만 사용해야 하며, 가능하다면 if 문으로 null 체크를 하거나 옵셔널 체이닝을 사용하는 것이 더 안전한 방법입니다. 1. Null 체크 우회name은 string | null 이지만, 개발자가 이 시점에서 확실히 null이 아님을 알고 있을 때 사용하면 됩니다. // 1. NULL 체크 우회let name: string | null = "Ecount";let nameLength = name!.length;  2. 초기화 체크 우회클래스 필드 na..