개발하는 자몽

static, singleton pattern 본문

Java

static, singleton pattern

jaamong 2022. 7. 15. 09:59

static

static 키워드를 사용하여 static 변수와 static 메서드를 만들 수 있다. 각각 정적 필드와 정적 메서드라고도 하며 둘 모두를 정적 멤버(클래스 멤버)라고 말한다. 이 둘은 객체(instance)에 소속된 멤버가 아닌 클래스에 고정된 멤버로, 클래스 로더(classloader)가 클래스를 로딩해서 메서드 메모리 영역에 로드할 때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용이 가능하다. 

 

static 키워드로 생성된 정적 멤버는 heap이 아닌 static 영역에 메모리가 할당된다. static 영역에 할당된 메모리는 모든 객체가 공유할 수 있어서(같은 곳의 메모리 주소만 바라봄) 어디서든지 참조할 수 있다는 장점을 갖는다. 그러나 Garbage Collector의 관리 영역 밖에 존재하기 때문에 프로그램이 종료될 때 까지 메모리가 할당된 채로 존재하게 된다. 따라서 static을 과하게 사용하면 시스템 성능에 좋지 않다. 적절하게 사용한다면 메모리 사용에 큰 이점이 있다(static 변수는 메모리 할당을 한 번만 한다)

 

static method는 메소드 앞에 static 키워드를 붙인 것으로 객체 생성 없이 클래스를 통해 직접 호출할 수 있다. 주의할 점은 static method에서는 정적 필드(static field)만 사용이 가능하고 정적 메서드(static method)만 호출이 가능하다. 또한 this 키워드 사용과 메서드 오버라이딩이 불가능하다. 

 

 

Singleton Pattern

싱글톤 패턴은 객체의 인스턴스를 오직 1개만 생성하여 사용하는 디자인 패턴이다.

public class Singleton {
    private static Singleton instance = new Singleton(); //static으로 선언되어 최초 한번만 메모리 할당
    
    private Singleton() {} //외부에서 호출할 수 없도록 private으로 지정
    
    public static Singleton getInstance() { //접근을 위한 getter
    	return instance;
    }
    
    ...
}

위 처럼 간단하게 구현할 수 있으며, 이 밖에도 여러 가지 구현 방식이 있다.

 

사용 시의 장점은 

  1. 다른 클래스 간에 데이터 공유가 쉽다. 싱글톤 패턴을 사용하면 인스턴스가 사용되므로 다른 클래스의 인스턴스들이 접근할 수 있다.
  2. static으로 선언되어 한 번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다.

이 외에도 다른 장점이 있으나 이 두개가 메인인 것 같다.인스턴스가 한 개만 존재해야 하는 시스템인 경우 싱글톤 패턴을 사용하기도 한다.

 

싱글톤 패턴의 문제점은 다른 클래스의 인스턴스들 간에 결합도가 높아져 객체 지향 설계 원칙 중 하나인 "개방-폐쇄 원칙"을 위배하게 된다. 이로 인해 수정이 어려워지고 테스트가 어려워진다.

 

 

 

 

 

참고

 

[Java] 자바 static의 의미와 사용법

정적(Static)이란? 정적(static)은 고정된이란 의미를 가지고 있습니다. Static이라는 키워드를 사용하여 Static변수와 Static메소드를 만들 수 있는데 다른말로 정적필드와 정적 메소드라고도 하며 이

coding-factory.tistory.com

 

07-03 정적(static) 변수와 메소드

이번에는 스태틱(static)에 대해서 알아보자. [TOC] ## static 변수 예를 들어 다음과 같은 HouseLee 클래스가 있다고 하자. *Sample. ...

wikidocs.net

 

[JAVA/자바] 정적 멤버(필드, 메소드)와 static

이전 포스팅은 인스턴스 멤버에 대해서 알아보았고 반드시 객체를 통해서만 접근이 가능했다. 그러면 이번...

blog.naver.com

 

[생성 패턴] 싱글톤(Singleton) 패턴을 구현하는 6가지 방법

첫 번째로 소개할 디자인 패턴은 싱글톤(Singleton) 패턴입니다. 종종 싱글톤 패턴을 '단일체' 패턴으로 번역하고 있는 책도 있지만, 일반적으로 싱글톤 패턴이라고 부릅니다. 싱글톤 패턴은 객체

readystory.tistory.com

 

싱글톤 패턴(Singleton pattern)을 쓰는 이유와 문제점

싱글톤 패턴(Singleton Pattern) 싱글톤 패턴 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴. 생성자가 여러

jeong-pro.tistory.com

Comments