인파

You Can Become A

늦게 시작해도 누구든지 노력하면 개발자가 될수 있어요 !

공부한 내용을 정리합니다
Language/Java (JVM)

☕ 가비지 컬렉션 동작 원리 & GC 종류 💯 총정리

Garbage Collection(GC) 이란? 가비지 컬렉션(Garbage Collection, 이하 GC)은 자바의 메모리 관리 방법 중의 하나로 JVM(자바 가상 머신)의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스를 말한다. C / C++ 언어에서는 이러한 가비지 컬렉션이 없어 프로그래머가 수동으로 메모리 할당과 해제를 일일이 해줘야 했었다. 반면 Java에서는 가비지 컬렉터가 메모리 관리를 대행해주기 때문에 Java 프로세스가 한정된 메모리를 효율적으로 사용할수 있게 하고, 개발자 입장에서 메모리 관리, 메모리 누수(Memory Leak) 문제에서 대해 관리하지 않아도 되어 오롯이 개발에만 집중할 수 있다는 장점이 ..

category_image
인파_
2022.09.22
(0)
Language/Java (JVM)

☕ JVM 내부 구조 & 메모리 영역 💯 총정리

저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. JVM(자바 가상 머신)은 자바 언어에서만 사용하는 것이 아니다. 코틀린, 스칼라 언어에서도 JVM 동작 방식을 그대로 따른다. 따라서 JVM을 정확히 이해하면 추후에 자바에서 파생된 모던 언어를 이해하는데 있어 수월해지며, 내부에서 정확히 어떻게 동작을 해서 코드가 실행이 되는지 개념을 알면 코드 최적화나 리팩토링을 하는데 매우 도움이 된다. 위의 그림은 자바 애플리케이션의 구동원리를 간략하게 그려본 것인데, 지금부터 우리가 배울 JVM(자바 가상 머신) 실행 부분은 빨간 박스를 친 부분인, 컴파일된 .class 파일을 어떠한 ..

category_image
인파_
2022.09.21
(0)
Language/TypeScript

📘 타입스크립트 잉여 속성 검사 원리 이해하기

타입스크립트 객체 타입 체킹 타입스크립트는 객체 타입을 선언할 때 좀 더 엄밀한 속성 검사를 진행하게 된다. 예를 들어 다음 Avangers 라는 인터페이스 타입이 있다고 하자. 여기에는 name 키 속성 하나만 정의되어 있다. 이 인터페이스를 hero 변수 타입으로 정의하고 객체값을 대입하였다. 그런데 name 키 외에 location 키도 같이 넣었더니 오류가 뜬다. interface Avengers { name: string; } let hero: Avengers; hero = { name: 'Captain', location: 'Pangyo' }; // Error - '{ name: string; location: string; }' 형식은 'Avengers' 형식에 할당할 수 없습니다. 개체 리..

category_image
인파_
2022.09.20
(0)
Language/TypeScript

📘 타입스크립트 유틸리티 타입 💯 총정리 (+응용)

타입스크립트 - Utility Types 지금까지 타입스크립트를 다루면서, 자바스크립트를 어느정도 아니까 타입 종류만 배우면 뚝딱 마스터 할 줄 알았더니, 타입 자체를 코딩하며 에러줄을 사라지게 하는 이른바 타입을 코딩 하고 있는 자신을 발견했을 것이다. 🤣 이러한 고충을 타입스크립트 개발진들이 알았는지, TypeScript는 공통 타입 변환을 용이하게 하기 위해 몇 가지 유틸리티 타입을 제공한다. 예를 들자면 자바스크립트에서 배열을 다루는데 있어 for , while문 이면 충분하겠지만, 따로, forEach문 이나 배열을 만드는 map, 배열요소를 찾는 find나 filter 같은, 배열을 다루는데 편리하게 이용가능한 루프 헬퍼 함수를 지원하듯이, 타입스크립트에서도 타입 변경을 쉽고 용이하게 하기위해..

category_image
인파_
2022.09.20
(0)
Language/TypeScript

📘 타입스크립트 조건부 타입 완벽 이해하기

고급 타입 - Conditional Types 조건부 타입(conditional type)이란 입력된 제네릭 타입에 따라 타입을 결정 기능을 말한다. 위와 같이 조건부 타입 문법은 extends 키워드와 물음표 ? 기호를 사용하는데, 보자마자 삼항 연산자가 생각 났을 것이다. 여러분이 유추한 바와 같이, 자바스크립트의 삼항 연산자는 변수의 값을 조건에 따라 결정하는 것이라면, 타입스크립트의 조건부 타입은 값 대신 타입을 조건에 따라 결정하는 것이라고 보면 된다. 위의 조건부 타입 코드 문법을 풀이해보자면, 타입은 T가 U에 할당될 수 있으면 타입은 X가 되고 그렇지 않다면 타입이 Y가 된다는 것을 의미한다. 착각하지 말아야 할점은 조건부 타입도 유니온 처럼 하나의 타입이라는 것이다. extends 키워드..

category_image
인파_
2022.09.19
(0)
Language/TypeScript

📘 타입스크립트 Mapped types 완벽 이해하기

타입스크립트 맵드 타입 타입스크립트의 고급 타입인 맵드 타입(mapped type)이란 기존에 정의되어 있는 타입을 새로운 타입으로 변환해 주는 문법을 의미 한다. 예를 들어 인터페이스에 있는 모든 속성을 루프문 같이 순회해서 optional(?) 로 바꾸거나 readonly 로 지정할수 있으며, 아예 지정된 타입을 바꿔서 변경된 타입을 반환할 수 도 있다. 아직 맵드 타입에 대해 문법을 배우지는 않았지만 간단하게 살펴보자면 다음과 같다. interface Obj { prop1: string; prop2: string; } type ChangeType = { [K in keyof T]: number; }; type Result = ChangeType; /* { prop1: number; prop2: nu..

category_image
인파_
2022.09.16
(0)
Language/TypeScript

📘 타입스크립트 느낌표 단언 연산자

Non-null assertion operator 자바스크립트를 포함한 대부분 프로그래밍 언어에서 느낌표(!)는 주로 False를 의미하는 연산자로 사용된다. 하지만 타입스크립트에서 변수 앞이 아닌, 뒤에 느낌표(!)를 사용하면 기발한 용도로 사용할 수 있는데, 피연산자가 Nullish(null이나 undefined) 값이 아님을 단언할 수 있다. 이를 Null이 아닌 단언 연산자(Non-null assertion operator) 또는 확정 할당 어선셜(Definite Assignment Assertions) 이라고도 부른다. Null이 아닌 어선셜 연산자는 피연산자가 null이 아니라고 컴파일러에게 전달하여 일시적으로 Null 제약조건을 완화시킨다. 당최 무슨말인지 모를것이다. 😪 이해를 돕기위해 다..

category_image
인파_
2022.09.11
(0)
Language/TypeScript

📘 객체를 타입으로 변환 - keyof / typeof 사용법

타입스크립트 - keyof / typeof typeof 연산자 typeof : 객체 데이터를 객체 타입으로 변환해주는 연산자 아래의 코드의 obj는 객체이기 때문에, 당연히 객체 자체를 타입으로 사용할 수 없다. 그래서 만일 객체에 쓰인 타입 구조를 그대로 가져와 독립된 타입으로 만들어 사용하고 싶다면, 앞에 typeof 키워드를 명시해주면 해당 객체를 구성하는 타입 구조를 가져와 사용할 수 있다. const obj = { red: 'apple', yellow: 'banana', green: 'cucumber', }; // 위의 객체를 타입으로 변환하여 사용하고 싶을때 type Fruit = typeof obj; /* type Fruit = { red: string; yellow: string; gree..

category_image
인파_
2022.09.10
(0)
Language/TypeScript

📘 타입스크립트 Generic 타입 정복하기

제네릭(Generics) 소개 우리가 프로그래밍을 할때 '변수' 라는 저장소를 사용하는 이유는 데이터 값의 유연성을 위해서이다. 변수 라는 단어는 변할 수 있는 것을 말하고 그반대인 상수는 항상 고정된 것을 말한다. 이러한 개념으로 봤을때 우리가 이때까지 number[] 며 string 이며 사용했던 타입은 항상 고정되어 절대 변하지 않는 타입을 사용해오고 있었던 것이다. 그리고 여기에 약간의 유연성을 가미한게 number | string | undefiened 유니온 타입이다. 하지만 이 프로그래밍 환경에서는 상황이 항상 고정되어 의도대로 흘러가지는 않는다. 언제 어디서 변할수 있는 변수가 항상 일어나는게 이 업계이다. 따라서 타입을 직접적으로 고정된 값으로 명시하지말고 '변수' 를 통해 언제든지 변할..

category_image
인파_
2022.09.09
(0)
Language/TypeScript

📘 타입스크립트 Enum 타입 정복하기

고급 타입 Enum enum은 C, Java와 같은 언어를 다뤄봤으면 한번쯤 들어보는 흔하게 쓰이는 타입으로 특정 값(상수)들의 집합을 의미한다. 타입스크립트의 튜플 타입이 특정 타입이나 값을 고정하는 배열이라면, Enum은 특정 값을 고정하는 또다른 독립된 자료형이라고 보면 된다. enum Color { Red, Green, Blue, } // enum 타입 let c: Color; // enum 타입 변수 선언 c = Color.Green; // enum 타입 변수에 enum 값 할당 c = 'Hello'; // Error - enum 타입 변수에는 반드시 설정된 enum 값 (Red, Green, Blue)만 올수 있음 let d: Color.Red; // enum 값을 타입 자체로도 사용할 수가 ..

category_image
인파_
2022.09.08
(0)
Language/TypeScript

📘 타입 추론 / 타입 호환 / 타입 단언 / 타입 가드 💯 총정리

타입 추론 (Inference) 타입 추론이란, 개발자가 굳이 변수 선언할때 타입을 쓰지않아도 컴파일이 스스로 판단해서 타입을 넣어주는 것을 말한다. 예를들어 다음과 같이 타입을 생략한채 변수를 선언하면 대입되는 값의 자료형태를 보고 컴파일러가 num 변수는 number 타입인걸 추론해서 자동으로 넣게 되는 원리이다. let num = 12; num = 'Hello type!'; // Error - TS2322: Type '"Hello type!"' is not assignable to type 'number'. 위와 같이 num에 대한 타입을 따로 지정하지 않더라도 일단 num 변수는 number로 간주되는 걸 확인 할 수 있다. 타입 추론은 함수의 리턴 타입에도 요긴하게 쓰일 수 있다. 다음과 같이 ..

category_image
인파_
2022.09.07
(0)
Language/TypeScript

📘 타입스크립트 클래스 · 객체 지향 문법 💯 총정리

타입스크립트의 객체 지향(OOP) 자바스크립트는 프로토타입 기반 언어라, 객체 지향으로 코드를 구성하려면 많은 애로 사항이 있었다. 그러다 ES6으로도 알려진 ECMAScript 2015를 시작으로 클래스 문법이 추가되면서 JavaScript 프로그래머들은 이런 객체-지향적 클래스-기반의 접근 방식을 사용해서 애플리케이션을 만들 수 있게 되었다. 그리고 자바스크립트의 바톤을 그대로 이은 타입스크립트에서는 더욱 더 객체 지향 문법들을 더 끌어 모아, 보다 자바(JAVA) 스럽게 클래스를 구성 할수 있다. 이번 타입스크립트 객체 지향 강의에서는 자바(JAVA) 혹은 자바스크립트(JavaScript)의 객체 지향 문법을 미리 익혀두는 것을 강력하게 추천한다. 자바스크립트의 클래스 문법은 다음 포스팅을 참고하길..

category_image
인파_
2022.09.06
(0)