Programming Language
-
goroutine 스케줄링Programming Language/golang 2024. 5. 1. 15:56
goroutine 스케줄링이 어떻게 동작하는지 정리한다.0. OS 스레드의 단점 - 생성/소거 비용이 비싸다.기본적으로 약 1MB 의 메모리 크기다. - 스레드의 숫자가 많으면 많을수록 컨텍스트 스위칭 비용이 비싸다.코어는 한정되어 있기 때문에 여러 스레드가 돌아가면서 사용할 때마다 컨텍스트 스위칭 발생.1. goroutine 특징- Goruntime이 관리하는 goroutine(고루틴)이라는 자체 동시성 모델을 구성하여 사용한다.OS 스레드가 1MB의 스택을 갖는 반면 고루틴은 이보다 훨씬 작은 약 2KB의 스택을 가짐.레지스터도 스택포인터(SP), 프로그램 카운터(PC), 리턴 포인터 정도가 전부이다.type g struct { stack stack // 스택 stackgua..
-
Netty 정리Programming Language/java 2024. 4. 23. 16:45
Netty 관련 내가 이해하고 있는 내용을 정리해본다.Netty가 뭔가요?Netty를 왜 쓰나요?Netty가 어떻게 동작하나요?위 3가지 관점에서 주요한 내용을 정리해보겠습니다. 1. Netty가 뭔가요?Netty는 NIO기반 네트워크 애플리케이션 프레임워크입니다. (NIO는 New Input Output 입니다.)다양한 프레임워크에서 Netty를 사용하고 있고 Spring WebFlux에서도 Netty를 디폴트 코어로 사용하고 있습니다. 2. Netty를 왜 쓰나요?Netty는 고성능 서버를 구현하기 위해 사용됩니다. 고성능이라는 말은 같은 자원을 효율적으로 사용한다는 말과 같습니다.그렇다면 무엇에 비해 효율이 좋다는 것일까요? 이를 이해하기 위해 기존의 멀티스레드 기반 애플..
-
[디자인 패턴] 싱글톤 패턴Programming Language/java 2023. 9. 1. 23:13
싱글톤 패턴 인스턴스를 반드시 1개만 제공하는 패턴으로 유명하여 간단하게 정리해본다. 1. 생성자를 private으로 막는다. 2. static Factory Method 방식의 일환으로 getInstance 메소드를 제공한다. public class Singleton { private static Singleton instance; private Singleton() { // 에러 } public static Singleton getInstance() { // 인스턴스가 생성되지 않았을 경우에만 인스턴스를 생성합니다. if (instance == null) { instance = new Singleton(); } return instance; } } 정적 변수에 private static Singlet..
-
[디자인 패턴] Factory Method 패턴Programming Language/java 2023. 8. 20. 20:07
1. Factory Method 패턴이 무엇인지 정리하고 2. 어느 상황에 유용한지 생각해보자 인스턴스 생성을 Factory에게 맡기는 것이 팩토리 메서드 패턴인데 예시와 함께 살펴보자 // Product: 문서의 공통 인터페이스 interface Document { void write(String content); } // ConcreteProduct: 텍스트 문서 클래스 class TextDocument implements Document { @Override public void write(String content) { System.out.println("Writing text: " + content); } } // ConcreteProduct: PDF 문서 클래스 class PdfDocument..
-
[디자인 패턴] Template Method 패턴Programming Language/java 2023. 8. 20. 19:02
1. Template Method 패턴이 무엇인지 2. 언제 사용하는지 알아보자 Template Method 패턴은 상위 클래스에서 뼈대를 결정하고 하위 클래스에서 구체적인 내용을 결정하는 패턴이라고 한다. 이 내용만 보고 이해가 되지 않으니 실제 예시를 들어서 살펴보자 AbstractDisplay 라는 추상 클래스에서 다음과 같이 정의한다. public abstract class AbstractDisplay { // 하위 클래스에서 상속받아 구체적으로 구현할 추상 메서드들 public abstract void open(); public abstract void print(); public abstract void close(); // 추상 클래스에서도 일반 메서드를 정의할 수 있다 public fina..
-
[디자인 패턴] Adapter 패턴Programming Language/java 2023. 8. 19. 16:23
1. Adpater 패턴이 언제 사용하고 2. Adapter 패턴을 어떻게 사용할까? 가령 기존 사용하고 있던 클래스 혹은 라이브러리 A가 있다고 하자. 이 A를 새로운 클래스 B에 편입시켜서 그대로 A의 기능을 사용하고자 할 때 Adapter 패턴이 사용된다. A를 Wrapping 하는 행위와 마찬가지여서 Wrapper 패턴이라고도 한다. 구현하는 방법은 2가지가 있는데 클래스(상속)을 사용한 패턴, 객체(인스턴스)를 사용한 패턴이 있다. 클래스를 사용한 패턴 public class A { public A(String str) { } public void method1() { ... } public void method2() { ... } } 기존 클래스 A가 존재하고 public interface N..
-
[디자인 패턴] Iterator 패턴Programming Language/java 2023. 8. 19. 15:02
1. Iterator 패턴이 무엇이고 2. Iterator 패턴을 왜 사용할까? for 문을 사용해서 반복을 돌리면 될텐데 왜 굳이 Iterator 패턴을 사용할까? => 반복의 대상이 되는 객체가 변경되어도 반복을 사용하는 측에서 신경쓰지 않아도 된다. => 즉 유지보수 측면에서 유리하다. 어떻게 가능한지 Iterator 패턴이 무엇인지부터 살펴보자 Iterable 인터페이스와 Iterator 인터페이스 public interface Iterable { public abstract Iterator iterator(); } public interface Iterator { public abstract boolean hasNext(); public abstract E next(); } Iterable 는 ..
-