728x90
반응형

JAVA 27

[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

[Java] 자바 메서드가 생성되는 원리 - 가상 함수 기법

자바 메서드 생성 원리 힙 영역, 스택 영역, 메소드 영역이 있습니다. Customer클래스와 VIPCustomer클래스가 있을 때 힙영역에는 Customer클래스와 VIPCustomer클래스의 참조값이 저장됩니다. 그리고 각각의 인스턴스의 실제 값은 스택영역에 저장됩니다. [Java] 메모리 관리 - 스택, 힙, Garbage Collection Stack 영역 Heap 영역에 생성된 객체 타입의 데이터들에 대한 참조를 위한 값들이 할당됩니다. 원시타입(Primitive Types) - byte, short, int, long, double, float, boolean, char 타입의 데이터들이 할당됩니다.. lakelight.tistory.com Customer 클래스에서 order() 메서드가 정..

JAVA 2022.07.28

[Java] 메모리 관리 - 스택, 힙, Garbage Collection

Stack 영역 Heap 영역에 생성된 객체 타입의 데이터들에 대한 참조를 위한 값들이 할당됩니다. 원시타입(Primitive Types) - byte, short, int, long, double, float, boolean, char 타입의 데이터들이 할당됩니다. 원시 타입은 참조값이 저장되는 것이 아니라 실제 값이 저장됩니다. 스택에 있는 변수들은 visibility를 가집니다. 변수 Scope에 대한 개념입니다. 지역변수는 함수 내에 있을 때 Stack 영역에 저장 된 후 함수가 종료되는 시점에 Stack에 저장된 모든 변수들이 pop되어 사라집니다. 각 쓰레드는 자신만의 Stack을 가집니다. Stack 예시 원시 타입 지역변수 저장 public class Main { public static ..

JAVA 2022.07.21

[Java] 제네릭 타입

제네릭 타입 어느 특정 데이터 형식에 의존하지 않고, 하나의 값이 여러 데이터 타입들을 가질 수 있도록 하는 방법 ex) ArrayList => ArrayList 객체명 new ArrayList(); 제네릭 타입은 불공변 제네릭 타입은 하위 객체가 상위 객체의 하위 타입이더라도 호환이 되지 않습니다. 아래와 같이 사용하면 컴파일 오류가 납니다. 이를 불공변 하다고 합니다. ArrayList objectList = new ArrayList(); 제네릭 타입이 불공변하기 때문에 컴파일 타임에서 타입 안전성을 보장해줄 수 있습니다. 제네릭 타입을 사용했을 때 좋은 점 잘못된 타입이 들어왔을 때 컴파일 단계에서 오류를 확인 할 수 있습니다. 제일 좋은 오류는 컴파일 단계에서 알 수 있는 오류이기 때문에 제네릭 ..

JAVA 2022.07.20
728x90
반응형