TIL47 [JS] Lexical Scope, Dynamic Scope Lexical Scope 변수나 함수가 정의,선언된 곳의 context를 사용 Static Scope 로도 불림 대부분 우리가 접하는 언어들이 사용 Ex) C/C++, JAVA, JS 등... Dynamic Scope 변수나 함수가 불려진 곳의 context를 사용 보통 오래된 언어들이 사용하는 방식 ex) Perl, Bash Shell, APL 등... var number = 1; function a() { var number = 10; b(); } function b() { console.log(number); } a(); b(); // Dynamic => 함수가 어디서 호출되었나에 따라 상위 스코프 결정 10 1 // Lexical => 함수가 어디서 선언되었나에 따라 상위 스코프 결정 1 1 미가공 필기(JS) 2022. 8. 8. [TypeScript] 이펙티브 타입스크립트 item 38~44 item38 any 타입은 가능한 좁은 법위에서만 사용하기 any는 매우 강력한 힘 가짐 (큰 힘에는 큰 책임이...) // 1 function f1(){ const x: any = f3(); f4(x); } // 2 function f1(){ const x = f3(); f4(x as any); } 1번 보다 2번 케이스가 더 나음, 왜냐하면 any 타입이 f4() 의 매개변수로만 들어가고 다른 곳엔 영향을 끼치지 않았기에 함수에서 any를 반환하면 영향력이 더 퍼져나감 => 반환 타입 any로 하는 것 지양할 것 + 반환 타입을 명시하는 것이 좋음 item39 any를 구체적으로 변형해서 사용하기 // 1: any 타입의 값 그대로 넣기 function getLength(array: any){ ret.. TIL/TypeScript 2022. 8. 5. [TypeScript] 이펙티브 타입스크립트 item 32~37 item 32 유니온의 인터페이스보다는 인터페이스의 유니온 사용하기 // 유니온의 인터페이스 interface Layer{ layout: LineLayout | PointLayout paint : LinePaint | PointPaint } //인터페이스의 유니온 interface LineLayer{ layout: LineLayout paint : LinePaint } interface PointLayer{ layout: PointLayout paint : PointPaint } type Layer = LineLayer | PointLayer item 33 string 타입 보다 더 구체적인 타입 쓰기 // string 남발된 모습 interface Album { artist: string; releas.. TIL/TypeScript 2022. 8. 4. [TypeScript] 이펙티브 타입스크립트 item 28~31 item 28 유효한 상태만 표현하는 타입 지향 유효한 상태와 무효한 상태를 둘다 표현하는 타입은 혼란을 초래하기 쉬움 // 유효한 상태와 무효한 상태를 둘다 표현하는 타입 interface State{ a: string; b?: string; c?: string; } // 유효한 상태만 표현하게 바꾼 모습 interface StateCase1{ a: string; } interface StateCase2{ a: string; b: string; } interface StateCase3{ a: string; c: string; } interface StateCase4{ a: string; b: string; c: string; } type State = StateCase1 | StateCase2 | St.. TIL/TypeScript 2022. 8. 3. [Nest.Js] 미들웨어 미들웨어란? 미들웨어는 클라이언트로부터 들어온 요청을 각 컨트롤러의 요청 핸들러(라우터)가 처리하기 전에 코드를 실행할 수 있는 기능. Pipes 파이프는 요청 유효성 검사 및 페이로드 변환 담당, 데이터를 직렬화한다 Filters 오류 처리 담당, 특정 오류 처리기를 사용할 경로와 경로 주변의 복합성을 관리하는 방법 Guards 인증 담당, 지정된 경로로 통과할 수 없는 사람과 있는 사람을 서버에 알려줌 Interceptors 응답 매핑 및 캐시 관리와 함께 요청 로깅과 같은 전후 미들웨어, 각 요청 전후에 실행 실행 순서 미들웨어 -> guard -> interceptor(전) -> pipe -> controller -> service -> controller -> interceptor(후) -> f.. TIL/BackEnd 2022. 8. 2. [TypeScript] 이펙티브 타입스크립트 item 24~27 item 24 일관성 있는 네이밍 const test = [10,20] const test2 =test test2[0] = 1 // test = [1,10] 이 된다 별칭의 남발은 제어 흐름 분석을 어렵게 만듬 별칭은 타입스크립트가 타입을 좁히는 것을 방해함 function isPointInPolygon(polygon: Polygon, pt: Coordinate) { const box = polygon.bbox; // 타입이 BoundingBox | undefined if(polygon.bbox){ polygon.bbox // 타입이 BoundingBOx box // 타입이 BoundingBox | undefined } } 비구조화 문법(동일한 키 값 사용하여 자동으로 할당)을 사용하여 일관된 이름 사용.. TIL/TypeScript 2022. 8. 1. [TypeScript]이펙티브 타입스크립트 Item 11~15 item11 타입이 명시된 변수에 객체 리터럴 할당할 때 타입 속성 체크함 => interface Menu { price: number; } const a: Menu = { price: 100, name: 'a 세트' }; // 에러 발생 const obj = { price: 100, name: 'a 세트' }; const a: Menu = obj; // 정상 const a: Menu = { price: 100, name: 'a 세트' } as Menu; // 정상 1번째는 속성체크를 통해 오류를 잡아낸 모습 2번째는 앞서 나온 구조적 타이핑, 즉 obj가 Menu 타입의 부분 집합을 포함하므로 a에 할당 가능하고 타입 체커도 통과 즉 오류 없다 판정 3번째는 단언문을 사용해서 속성 체크를 피해간 모습 .. TIL/TypeScript 2022. 7. 24. [TypeScript]이펙티브 타입스크립트 Item 6~10 Item 6 타입스크립트에서 제공하는 언어 서비스 사용하는 것이 좋다 언어서비스가 제공하는 기능으로는 코드 자동 완성, 명세 검사, 검색, 리팩터링 등등 편집기의 타입추론을 보고 타입스크립트가 값의 타입을 어떻게 이해하는지 알 수 있음 Item 7 한가지 값만 포함하는 타입 = literal 타입 2개 혹은 3개 포함하는 타입 = union 타입 type A = 'A'; // 리터럴 타입 type One = 1; // 리터럴 타입 == 유닛 타입이라고 불리기도함 type A1 = 'A' | 1; // 유니온 타입 const a: A1 = 'A' // 정상 const b: A1= 'B' // 에러 & 은 두 타입의 인터섹션(교집합)을 계산 타입간의 교집합은 인터페이스의 속성이 아니라 값의 집합(= 타입의 .. TIL/TypeScript 2022. 7. 19. [TypeScript] 이펙티브 타입스크립트 Item 1~5 Item1 모든 자바 스크립트 프로그램은 타입 스크립트 프로그램 (자바 스크립트에 문법적인 오류가 없다면, 유효한 타입스크립트 프로그램이기도 함) 타입 스크립트는 자바 스크립트의 런타임 동작을 모델링함 => 런타임 오류 찾으려 시도 But, 모두 찾진 못함 자바 스크립트에서는 허용되지만 타입스크립트에서는 문제가 되는 경우 존재 (ex 잘못된 매개 변수 개수로 함수 호출하는 경우 등) Item2 타입 스크립트는 타입 정보 가질때 효과적 => noImplicitAny 를 설정하여 타입을 명시하자 strictNullChecks 옵션은 null과 undefined을 허용하지 않음으로서 관련된 오류를 잡아줌 Item3 타입체크와 컴파일이 동시에 이루어지지 않기에 타입 오류를 수정하지 않고도 컴파일하여 다른 부분 .. TIL/TypeScript 2022. 7. 18. [DB] 외래키를 사용해? 말어? 이번 프로젝트에서 DB를 설계하고 구현하면서 외래키를 사용하지 않지만 외래키의 역할을 하는 컬럼을 만들어서 테이블을 구성하였는데, 이에 대한 고민들 적어보고자 한다. 서비스에서 여러 소셜 로그인을 지원하고자 하는데 같은 유저 A가 있을 때 나는 유저의 특정 정보는 유저 엔티티에 두고 카카오 로그인을 사용한다면 카카오 유저를 만들어 유저와 연결하고 구글 로그인을 사용한다면 구글 유저를 만들어 유저와 연결하는 방식으로 DB를 구성하고자 했다. 그 중 유저와 카카오 유저의 케이스를 들고 와서 처음 말했던 외래키에 대한 이야기를 하고자 한다. // 유저 엔티티 @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column({ nullabl.. TIL/DB 2022. 7. 16. [표기법] Snake Case, Pascal Case, Camel Case, Kebab Case 스네이크 케이스 ( Snake Case ) 모든 단어가 소문자로 시작한다. 단어와 단어 사이는 '_'로 연결된다. snake case => snake_case 파스칼 케이스 ( Pascal Case ) 모든 단어들이 대문자로 시작한다. 단어와 단어 사이는 붙인다. pascal case => PascalCase 카멜 케이스 ( Camel Case ) 첫 단어는 소문자로 시작하고, 두번째 단어부터 대문자로 시작한다. 단어와 단어 사이는 붙인다. camel case => camelCase 케밥 케이스 ( Kebab Case ) 모든 단어가 소문자로 시작한다. 단어와 단어 사이는 '-'로 연결된다. kebab case => kebab-case TIL/구글링 내용 저장소 2022. 7. 11. 이전 1 2 3 4 다음 반응형