StackTraceElement
·
Language/Java
Thread.currentThread().getStackTrace() 로 현재 스레드의 호출 스택 트레이스 정보를 얻을 수 있다. 이 메서드를 호출하면, 현재 실행중인 호출 스택에 있는 메서드들의 정보를 배열로 반환받음. StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); for (StackTraceElement element : stackTrace) { System.out.println("Class Name: " + element.getClassName()); System.out.println("Method Name: " + element.getMethodName()); System.out.println("File Name:..
Java Garbage Collection
·
Language/Java
Garbage Collection이란? 자바의 메모리 관리 기법으로, 어플리케이션이 동적으로 할당했던 메모리 영역 중, 더이상 사용하지 않는 영역을 정리하는 것을 의미합니다. GC는 Heap 메모리에서 활동하며, JVM에서 GC의 스케줄링을 담당하며 개발자가 직접 관여하지 않아도 더이상 사용하지 않는 점유된 메모리를 제거해주는 역할을 수행합니다. 여기서 수행하는 기법으로 Stop the World가 있는데, Stop The World란 GC가 작동하는동안 GC관련 Thread를 제외한 모든 Thread는 멈추는 것을 의미합니다. 일반적으로 GC-튜닝은 이 시간을 최소화하는 것이지요. GC의 위치 GC는 JVM메모리 구조에서 Exceution Enginge의 하위에 존재하고 있습니다. GC Heap 영역 ..
객체지향 5대 원칙 요약
·
Language/Java
Single Responsibility Principle(SRP) - 단일 책임 원칙 => 하나의 클래스에 하나의 기능만 있어야 함. Open-Closed Principle(OCP) - 개방 폐쇄 원칙 => 기능이 변하거나 확장하는 것은 ok. 기존 코드 수정 x Liskov Substitution Principle(LSP) - 리스코프 치환 원칙 => 상속되는 관계가 있을시, 자식 객체가 부모객체를 완전히 대체할 수 있어야 함. Interface Segregation Principle(ISP) – 인터페이스 분리 원칙 => 각각의 인터페이스는 각 구현 클래스에 필요한 기능만 담고 있어야 함 Dependency Inversion Principle(DIP) – 의존성 역전 원칙 => 구체화 계층에 의존하지..
프로그래밍 패러다임과 객체 지향 프로그래밍
·
Language/Java
프로그래밍 패러다임 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론 프로그래밍 패러다임은 크게 선언형, 명령형으로 나뉘고, 선언형은 함수형이라는 하위 집합을 가짐. 명령형은 객체지향, 절차지향으로 나뉨. 객체지향 프로그래밍 객체들의 집합으로 프로그램의 상호작용을 표현하며, 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 사용하는 방식을 의미함. 객체지향 프로그래밍의 특징 추상화 추상화란 복잡한 시스템으로부터 핵심적인 개념을 간추려내는것 캡슐화 캡슐화란 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추는 것 상속성 상위 클래스의 특성을 하위 클래스가 이어 받아서 재사용하거나 추가, 확장하 것 다형성 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것. 대표적으로 오버로딩..
Custom Comparator
·
Language/Java
클래스 필드를 기준으로 정렬하는 코드를 만들기 위해서는, Custom Comparator를 만들어주어야함. 전제 조건: 1. 반환 타입이 int여야함 2. class를 type으로 한 1개의 인자를 갖고 있어야 함 방법 : class 뒤에 implements Comparable을 붙이고, public int compareTo(Student student) 오버라이드 메서드 구현 @Override public int compareTo(Sample sample) { if(this.val > sample.val) return 1; else if(this.val < sample.val) return -1; else return 0; } @Override public int compareTo(Sample samp..
compareTo
·
Language/Java
public int compareTo(String anotherString) { } => A.compareTo(B) => A와 B가 같으면 0 반환 => A가 B보다 크면 양수 반환 => B가 A보다 크면 음수 반환 => 사전 순으로 정렬하여 비교함.
Promise.all / Promise.race
·
Language/JavaScript
function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } const getDog = async () => { await sleep(1000); return "멍멍이"; }; const getRabbit = async () => { await sleep(500); return "토끼"; }; const getTurtle = async () => { await sleep(3000); return "거북이"; }; async function process() { const dog = await getDog(); console.log(dog); const rabbit = await getRabbit(); console.log..
async, await
·
Language/JavaScript
function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } async function process() { console.log("안녕하세요!"); await sleep(1000); console.log("반갑습니다!"); } process().then( value -> { console.log(value); }); - 프로미스 앞 부분에 await을 붙여주고, await키워드를 사용하는 함수 앞부분에 async키워드가 들어가야 함 - async를 붙이면 해당 함수는 항상 프로미스를 반환함. 프로미스가 아닌 것은 프로미스로 감싸서 반환함 - await은 해당 프로미스가 끝날때까지 기다렸다가 다른 작업을 수행할때 사용함
Promise
·
Language/JavaScript
- 프로미스는 비동기 작업을 편하게 처리할 수 있도록 ES6에 도입된 기능. - 이전에는 비동기 작업을 끝내고 나서, 어떤 작업을 해야할 때 콜백함수로 처리를 해주었어야 했는데, 그러한 작업들이 많을 경우 여러 콜백함수로 인해 코드가 쉽게 난잡해지게 되었음 => 이를 해결하기 위해 프로미스가 만들어짐 function increaseAndPrint(n, callback) { setTimeout(() => { const increased = n + 1; console.log(increased); if (callback) { callback(increased); } }, 1000); } increaseAndPrint(0, (n) => { increaseAndPrint(n, (n) => { increaseAnd..
takoyummy
'Language' 카테고리의 글 목록