728x90
반응형

분류 전체보기 131

[Java] Adapter Pattern

Adapter Pattern 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 합니다. OCP를 따릅니다. Adapter Pattern 예제 (220v -> 110v) [Electronic110V interface] package Java.adapterPattern; public interface Electronic110V { //전원을 공급한다. void powerOn(); } [Electronic220V interface] package Java.adapterPattern; public interface Electronic220V { //전원을 공급한다. void powerOn(); } [Macbook class implement 110V] package Java.adapterPa..

JAVA 2022.07.31

[OS] Process Management (3) _ 쓰레드, 쓰레드 동기화, 세마포어

쓰레드 프로세스 내에서 실제로 작업을 수행하는 주체를 의미합니다. 모든 프로세스는 한 개 이상의 쓰레드가 존재하며, 두 개 이상의 쓰레드를 가지는 프로세스를 멀티스레드 프로세스라고 합니다. 멀티 쓰레드 쓰레드들이 서로 스위칭 하면서 작업을 처리함으로써 CPU 사용률을 향상시켜주고, 자원을 보다 효율적으로 사용할 수 있습니다. 또한 사용자에 대한 응답성이 높고, 작업이 분리되어 코드가 간결해집니다. 하지만 여러 쓰레드가 같은 프로세스 내에서 자원을 공유하면서 작업하기 때문에 동기화, 교착상태 같은 문제를 조심해야 합니다. 쓰레드 구현 [Java] Thread Thread 하드디스크에 있는 '프로그램'이 실행되어 메모리에 올라가면 '프로세스'가 됩니다. CPU는 프로세스를 처리합니다. 프로세스를 처리할 때 ..

Backend/OS 2022.07.31

[Java] Thread Synchronization

Thread Synchronization 두 개의 쓰레드가 동일한 객체에 접근을 하려고 할 때 공유 자원을 lock하여 다른 쓰레드가 접근하지 못하게 합니다. 그래서 두 개의 쓰레드가 공유자원에 동시에 접근하여 발생하는 문제를 없앨 수 있습니다. Thread Synchronization Problem package Java.thread.syncronizedEx; import static java.lang.Thread.sleep; class Bank{ private int money = 10_000; public void saveMoney(int save){ int curMoney = getMoney(); try { sleep(3000); } catch (InterruptedException e) { th..

JAVA 2022.07.29

[Java] Thread Method : join()

Join() Method 쓰레드가 실행될 때 쓰레드가 종료될 때까지 기다린 후 다른 쓰레드를 실행시키거나 메인 함수를 실행해야하는 경우가 있습니다. 이때 Thread.join()을 사용해서 해당 쓰레드가 종료 될 때까지 Non-Runnable 상태로 만들 수 있습니다. Join() 구현 package Java.thread; public class ThreadJoinTest extends Thread{ int start; int end; int total; //멤버변수는 초기화하지 않아도 0으로 자동 초기화됩니다. public ThreadJoinTest(int start, int end) { this.start = start; this.end = end; } public void run(){ //로직 fo..

JAVA 2022.07.29

[Java] Priority Thread

각각의 쓰레드의 우선순위를 정해서 실행시킬 수 있습니다. package Java.thread; //쓰레드 우선순위를 설정해주는 예제 class PriorityThread extends Thread{ @Override public void run(){ int sum = 0; //쓰레드 작업 시작 Thread thread = Thread.currentThread(); System.out.println(thread + " start !!"); //0~100_000까지 더하기 for (int i = 0; i < 100_000; i++) { sum += i; } //쓰레드 작업 종료 System.out.println(thread.getPriority() + " end !!"); } } public class Pr..

JAVA 2022.07.29

[Java] Thread

Thread 하드디스크에 있는 '프로그램'이 실행되어 메모리에 올라가면 '프로세스'가 됩니다. CPU는 프로세스를 처리합니다. 프로세스를 처리할 때 CPU의 실행 단위는 쓰레드입니다. 즉 쓰레드가 CPU를 차지하면 프로세스가 수행됩니다. 쓰레드는 각자의 작업공간인 Context 값을 가집니다. 각 쓰레드들이 공유해서 사용하는 Shared Resource가 있습니다. 각 쓰레드들이 동시에 Shared Resource에 접근할 때 문제가 생길 수 있습니다. 그래서 공유 자원은 임계영역(critical section) 이라고 하는데 이 영역을 한 쓰레드가 사용할 때 다른 쓰레드는 못쓰게 합니다. 이를 동기화라고 합니다. 자바에서는 syncronized, syncronizedBlock이 있다. 쓰레드 상태 Ru..

JAVA 2022.07.29

[Java] Decorator Pattern

Decorator Pattern 기존 클래스는 유지하되, 이후 필요한 형태로 꾸밀 때 사용합니다. 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있습니다. OCP와 DIP를 따릅니다. Decorator Pattern Ex 커피 클래스 원두 종류: Etiopia, Kenya 커피 종류: Americano, Latte, Mocha, WhippingCream 원두 종류를 선택하고 커피 종류를 추가하여 새로운 커피를 만들 수 있습니다. 예를 들면 에티오피아 원두의 라떼, 케냐 원두의 모카에 휘핑크림을 올린다던지 확장하여 다양한 커피를 생성할 수 있습니다. Coffee.java package Java.decoratorPattern; //추상 클래스로 커피 정의 public abstract class Co..

JAVA 2022.07.28

[Java] Template Method Pattern

Template Method Pattern 전체 작업의 시나리오를 정의하여 하위 클래스에서 그 시나리오가 바뀌지 않도록 할 수 있습니다. 즉 전체 일을 수행하는 구조는 바뀌지 않고 특정 단계에서 수행하는 작업은 하위 클래스에서 정의할 수 있도록 합니다. 동일한 기능을 상위 클래스에서 정의하면서 확장/ 변화가 필요한 부분만 서브 클래스에서 구현하도록 할 수 있다는 장점이 있습니다. Template Method Patter 구현 [Computer Class] package Java.templateMethodEx; public abstract class Computer { //하위 클래스에서 재정의 해야할 추상 메서드 public abstract void setting(); public abstract voi..

JAVA 2022.07.28

[Java] Singleton Pattern

Singleton 싱글톤 객체가 유일하게 1개만 존재해야할 때 사용하는 패턴으로, 하나의 인스턴스만 생성하여 공유해서 사용합니다. 그래서 메모리의 낭비를 줄일 수 있습니다. 스프링에서는 @Bean을 싱글톤으로 관리합니다. Singleton Pattern 구현 package Java; public class Singleton { //인스턴스를 하나만 사용하기 위해 인스턴스 미리 생성 private static Singleton singleton = new Singleton(); //인스턴스를 생성하지 못하게 생성자를 private로 막는다. private Singleton(){} public static Singleton getInstance(){ //기존에 인스턴스가 생성되지 않은 상태라면 생성하기 if..

JAVA 2022.07.28
728x90
반응형