본문 바로가기

학습/Java15

[java] 멀티스레드 환경과 싱글톤 객체 해당 포스트는 Jungwoon님의 자바 멀티스레드 환경에서 싱글톤 패턴을 이해하며 작성한 글입니다. 결론은 LazyHolder 패턴으로 싱글톤을 구현하자! 입니다. 스프링은 빈이라는 싱글톤(유일한 하나의 인스턴스) 객체를 IOC 컨테이너에 생성하여 사용한다. 스프링의 빈은 일반적으로 1. 상태를 가지고 있지 않게 설계 (@Controller, @Service, @Repository, ...) 2. 어플리케이션 구동 시 ApplicationContext라는 Static Sharing Pool에 싱글톤 인스턴스 생성 2가지 방법으로 멀티스레드에서의 빈 동기화를 신경쓰지 않아도 된다. 하지만 싱글톤 객체는 사실 구현 방법에 따라 Thread-Safe 할 수도, 하지 않을 수도 있다. 구현1 - 정적 팩토리 메.. 2020. 7. 15.
[java] 가비지 컬렉션 DZone의 Java Memory Management 포스팅 YABOONG님의 자바 메모리 관리 - 가비지 컬렉션 포스팅 네이버 D2의 Java Reference와 GC 포스팅 PreamTree님의 가비지 컬렉션 소개 포스팅을 읽고 학습한 내용을 정리한 글입니다. 가비지 컬렉션 프로세스의 이해 스택 변수로부터 참조된 타입에 따라서, 힙의 객체들은 가비지 컬렉션이 적용되는 타이밍이 다르다. 예컨대 해당 사진에서 붉은색 객체들은 가비지 컬렉터에 의해 회수된다 (eligible to be collected) 스택 변수로부터 Strong Referenced되고 있었지만, 참조가 사라져 더 이상 접근할 수 없는 객체들이 그렇다. 가바지 컬렉션 프로세스의 특징 1. Java에 의해 자동으로 시작되며, 가비지 컬렉션.. 2020. 7. 5.
[java] Stack & Heap과 Reference의 개념 YABOONG 님의 자바 메모리 - 스택 & 힙 포스팅과 DZone의 Java Memory Mangement 포스팅을 학습한 내용을 정리한 글입니다. 자바 메모리 관리 자바는 백그라운드에서 garbage collector로 사용되지 않는 객체를 청소하며 메모리 관리를 자동으로 해준다. 그렇지만 언제나 완벽할 수는 없어서, 사용하지 않는 객체가 청소되지 않을 수도 있다. 따라서 최적화를 위해서, 메모리 누수를 해결하기 위해서 자바 메모리가 어떻게 사용되는지 알아야만 한다. 자바의 대략적인 메모리 구조는 그림과 같다. 크게 두 부분의 파트 : stack & heap으로 나누어져 있으며, 실제로 heap의 크기가 stack보다 훨씬 커지게 된다. 1. 값 자체를 가지며 stack memory을 차지하는 pri.. 2020. 6. 28.
[java] 익명 클래스와 람다식 익명 클래스 - 추상클래스를 상속하거나 인터페이스를 구현한, 이름없는 클래스 - 재사용이 필요없는 인스턴스를 생성할 때 사용 사용법 CustomInterface inf = new CustomInteface(){ //인터페이스의 추상 메소드 구현 }; - 상속(구현)하는 추상클래스(인터페이스)의 모든 추상메소드를 구현해야 한다. - 익명 인스턴스에서만 사용할 수 있는 필드와 메소드 선언 가능 - 익명 클래스도 컴파일 성공 시, 클래스파일이 생성된다. 예시 //구현 대상 public interface Person { public void foo(); public void bar(); } public class SampleApplication { public static void main(String[] ar.. 2020. 6. 10.
[java] Proxy Pattern 목적 프록시는 다른 객체를 위한 대체물을 제공할 수 있게 하는 구조적인 디자인 패턴이다. 프록시 컨트롤은 오리지날 객체에 접근하여, 요청이 그 객체를 통과하기 전/후에 어떤 작업을 할 수 있게 해준다. 문제 시스템 리소스(ex. DB)를 소비하는 수많은 객체들이 있고, 가끔 그들이 필요할 때가 있다. 방법1. Lazy Initialization 그 객체가 정말로 필요할 때만 객체를 생성 모든 클라이언트는 지연된 초기화 코드를 실행 하지만 이는 많은 양의 복제 코드를 만들게 된다. 방법2. 객체 클래스에 직접 코드를 삽입 하지만 항상 가능하진 않음 예컨대 closed 3rd-party library의 일부분인 클래스는 어떻게 할 수 없다. 해결 오리지널 서비스 객체와 동일한 인터페이스로 Proxy obje.. 2020. 3. 23.