[TIL] 2024-07-16

성장일기·2024년 7월 16일

회고

목록 보기
5/37

중요 학습 내용 [JAVA]

singleton

  • 정의
    • Application 구동 후, 특정 객체의 instanciation을 메모리에 단 한 번만 생성시키는 패턴
    • static 영역에 instance의 주소 할당.
    • heap 영역에 데이터 할당
  • 목적
    • 단일 instance
      • 할당된 메모리에 단 하나의 instance만 생성시켜 여러 thread에서 공유할 수 있도록 하기 위함
    • 리소스 낭비 방지
  • Trade-off를 잘 고려할 필요가 있다.
    • pros
      • instanciation이 완료가 되면 재사용 가능
      • instance가 하나만 생성되는 것을 보증 가능
    • cons
      • singleton instance의 역할이 많아지거나, 공유 데이터가 많아지면 결합도 상승(OOP 관점에서의 Anti-pattern)
      • 동시성 문제를 고려해야하기에, 난이도가 높다.
  • 종류
    • EagerSingleton: 프로그램 구동 시, 객체 생성
      public class EagerSingleton {
      
          private static EagerSingleton eager = new EagerSingleton();
          private EagerSingleton() {      // to maintain singleton pattern
          }
      
          public static EagerSingleton getInstance() {
              return eager;
          }
      }
    • LazySingleton: method 호출 시, 객체 생성
      public class LazySingleton {
      
          private static LazySingleton lazy;
      
          public static LazySingleton getInstance() {
              if (lazy == null) {	// instanciation when method called
                  lazy = new LazySingleton();
              }
              return lazy;
          }
      }

static

  • 정의
    • 프로그램이 실행되는 시점에 memory상의 method Area(or Class Area)에 할당되는 키워드
  • 목적
    • Static Area는 여러 instance가 공유해서 사용한다.(ex. singleton 객체)
  • 만일 참조하는 변수가 null값으로 치환되면 해당 변수는 기존 가리키는 주소를 잃어 JVM은 runtime 시점에 NullPointException을 반환한다.

개선의 여지

  • REMIND: 함께하는 작업에 있어서 합의된 의견을 기준으로 진행할 것.
    • 특히 집단의 목적성을 잃지 않도록 해야한다.
profile
엔지니어로의 성장일지

0개의 댓글