Rust정적타입언어- 변수의 타입이 컴파일 시점에 정해져있어야함스네이크케이스 사용cargo빌드 시스템, 패키지 매니저carge new ${name} 로 디렉토리 생성toml은 카고 설정에서 사용하는 포맷카고가 코드 컴파일할 때 필요한 설정 정보 등이 담겨져있음cargo build : 빌드carge run : 컴파일 + 실행cargo check : 컴파일 되는지 확인cargo build --release 릴리즈 빌드 생성, 컴파일 최적화를 진행하여 build로 생성한 결과물보다 코드가 더 빨리 동작함cargo doc --open : dep에 존재하는 크레이트(외부 라이브러리) 문서를 브라우저에서 열어줌use 프렐루드라고 부르는 표준라이브러리에 정의된 아이템 집합을 가져오기 위한 키워드 문법반복문: loop..
책임연쇄 패턴 [ 행동 ]핸들러들간의 체인에 따라 요청을 전달할 수 있게 해주는 행동 패턴각 핸들러는 요청을 받으면 요청을 처리할지, 다음으로 전달할지를 결정한다. 주문시스템을 개발한다고 했을 때 초기 시스템의 동작은 순차적으로 흘러야했고 동작은 다음과 같았다.주문확인상품 수량확인배송지 확인주문 완료시간이 지나자 각 흐름사이에 동작이 추가되어야하는 요구사항이 있었다.주문확인주문자 유효성확인상품 수량확인동일 요청 캐싱처리배송지 확인배송지 유효성확인주문 완료이런 요구사항을 만족시키기 위해 책임연쇄패턴을 이용하여 각 단계를 독립실행형 객체로 변환한다.핸들러들을 체인으로 연결하고 각 핸들러에는 다음 핸들러에 대한 참조를 저장하기 위한 필드가 존재한다.핸들러는 요청을 더 이상 전달하지 않고 중지시킬 수 있는 결정..
추상팩토리 [생성]구상 클래스( Concrete class ) : 추상과 대조적임. 구체적이고 명확함. New 키워드로 객체를 생성할 수 있는 클래스, 클래스의 모든 메소드를 구현한 클래스관련 객체들의 구상클래스들을 지정하지 않고도 관련 객체들의 모음을 생성할 수 있음객체 생성을 캡슐화함하나의 팩토리에서 여러 종류의 객체생성을 지원 예제코드interface AbstractProductA { usefulFunctionA(): string;}interface AbstractProductB { usefulFunctionB(): string; anotherUsefulFunctionB(collaborator: AbstractProductA): string;}interface AbstractFactory { ..
프록시 패턴원본 객체에 접근해 사용하는 것이 아닌 프록시를 통해 원본 객체를 사용하는 방법 장점접근 제어: 클라이언트가 원본 객체에 직접 접근하지 않도록 제어지연 초기화: 무거운 클래스를 바로 인스턴스화하지 않고 지연시켜 성능 최적화 가능캐싱: 자주 사용하는 데이터를 캐싱하여 성능 향상원격 서비스 로컬 실행: 원격 서비스를 로컬에서 실행하여 네트워크 비용 절감유효성 검사: 데이터 유효성 검사를 통해 원본 객체 보호로깅: 요청과 응답에 대한 로깅 기능 제공 단점응답 지연: 프록시를 통한 추가 작업으로 인해 응답이 늦어질 수 있음복잡성 증가: 클래스를 새로 도입해야 하므로 코드가 복잡해질 수 있음예제/** * Subject 인터페이스는 RealSubject와 Proxy 모두를 위한 공통 작업을 선언합니다. ..
브릿지 패턴 (구조 패턴)객체합성이란 용어가 종종 등장하기 시작하는데, 객체를 주입받아 로직을 호출하는 방법을 뜻함상속과 다른 점은 코드를 재사용하지 않고 인터페이스에 정의된 함수를 호출하는 것으로 구현에 대한 의존성을 인터페이스 의존성으로 옮겨 결합도를 낮출 수 있는 점브릿지 패턴은 클래스를 확장하려할 때 상속에서 객체 합성으로 전환하여 클래스 계층구조의 기하급수적인 성장을 방지하기 위한 문제를 해결하려는 방법 중 하나 브릿지 패턴 설명정의: 기능클래스 계층과 구현 클래스 계층을 분리하여 서로 독립적으로 확장할 수 있도록 하는 구조 패턴목적: 구현과 추상을 분리하여 둘이 독립적으로 확장할 수 있게 함구성추상부(Abstraction): 주요 기능을 정의하고, 구현 부분을 참조함구현부 (Implementa..
싱글톤 패턴클래스의 객체 인스턴스가 하나만 만들어지도록 하는 패턴전역변수와 역할이 비슷하며 객체가 하나만 생성되기에 변경되지 않는다는 점이 있음스레드 풀, 설정 등 불변하는 것들을 공유하기 위한 방법 중 하나public으로 설정된 생성자가 없음getInstance라는 객체호출을 사용함 클래스 예제class Singleton { // 클래스의 유일한 인스턴스를 저장할 private static 변수 private static instance: Singleton | null = null; // 싱글톤 클래스 내부의 데이터 private data: string; // private 생성자로 외부에서 인스턴스 생성을 막음 private constructor() { this.data = "Ini..
빌더 패턴복잡한 객체를 단계적으로 생성할 수 있도록 하는 패턴객체 생성시 생성자함수 대신에 빌더클래스를 통하여 객체를 생성할 수 있게함객체의 멤버변수에 대한 가독성, 유지보수를 높임 예제class User { private name: string; private age : number; constructor(builder: UserBuilder) { this.name = builder.name; this.age = builder.age; }}class UserBuilder { public name: string; public age: number; setName(name) { this.name = name; retu..
Why ? spa 등에서 지원할 수 있는 라이브러리를 만들기 위해 ts파일로 코드를 짜던 중 js에서 테스트해보기 위해 트랜스파일링해서 html에 import했지만 exports를 찾을 수 없다는 에러를 직면함; 전역에 없는 exports에다가 내보내려했기에 문제가 있었음. 트랜스파일링을 하는데 tsc명령어가 참조하는 json이 일단 nextjs앱꺼를 참조하고 있어서 commonjs방식으로 바꿔주고 있었음. tsconfig옵션 중 esModuleInterop이라는게 commonjs로 가져올 수 있게 해주는 거라 문제가 되었음. 변환시 변환하는녀석이 참조하는 config파일을 잘 확인해야함 ! 모듈방식에 대해 더 깊이 알고 있어야함 ! 당장 문제없다고 설정파일에 이것저것 껴넣는건 반드시 지양해야함 ! ht..
모듈 스크립트 기능과 양이 복잡해지자 모듈단위로 분리하는 방법이 필요해짐. 그 중하나로 CommonJS가 있음. 모듈은 단지 파일 하나에 불과함. 1스크립트 === 1모듈 js에서 모듈은 표준이 없어서 AMD니 commonjs니 등등 있었는데 ESM이 표준이 되었다. commonjs (CJS) Node.js용 js코드를 패키징하는 original 방식. 모듈을 동기적으로 로드, 내보내기 위해 require, module.exports 키워드 제공 동기방식이므로 모듈이 완전로드되기 전까지 코드실행이 차단됨 초기부터 사용되었기에 esm방식대신 대부분 node기반 라이브러리는 이 방식을 사용하고 있다. (ESM의 확대로 앞으로 점차 줄어갈듯) 모듈은 module-wrapper이라는 함수로 감싸져서 실행되는데,..
- Total
- Today
- Yesterday