JAVA - 디자인 패턴

박종휘·2022년 12월 8일
0

JAVA - 국비

목록 보기
23/29
post-thumbnail

1. 디자인 패턴 (Design Pattern)

1-1. 디자인 패턴이란?

  • 디자인 패턴이란 기존 환경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션 같은 것이다.
  • 디자인 패턴은 설계자들이 "올바른" 설계를 "빨리" 만들 수 있도록 도와준다.

1-2. SingleTon 패턴

  • 프로그램 내의 여러 곳에서 반복적으로 사용되어야 하는 객체에 대해 전역적인 범위를 갖도록 객체를 생성하고, 이 객체를 여러 곳에서 공유하기 위한 클래스 작성 패턴
  • 이러한 패턴을 통해 생성된 객체를 싱글톤 객체라고 한다.

1-3. SingleTon 객체의 이점

  • 프로그램의 전역에서 활용할 재료로 사용되는 공유 기능을 하나만 생성하여 여러 곳에서 재사용합으로서 메모리를 효육적으로 사용할 수 있다.
  • 단 한번만 객체를 생성하면 다시 객체를 생성할 필요가 없기 때문에, 해당 기능을 사용할 때마다 객체를 일일이 생성해야 하는 번거로움을 피할 수 있다.

1-4. 공통 기능을 포함할 클래스 안에서 스스로의 객체를 static으로 선언

  • static이 적용된 자원은 메모리의 고정영역에 생성되기 때문에, 클래스 자체의 객체나 그 안에 포함된 멤버변수, 메서드와는 메모리 상에서 구별된다고 볼 수 있다.
  • 그러므로 Calc 클래스 안에 static 형태로 Calc 클래스의 객체를 정의하더라도 코드상의 논리적인 연관 관계를 위해 하나의 파일에서 정의하는 것일 뿐, 실제로는 Calc 클래스 자체에서 독립된 객체가 되는 것이다.
public class Calc {
	static Calc current;
}
  • Calc 클래스 이외의 여러 곳에서 new 연산자를 사용하여 객체 할당이 가능하다면 SingleTon이라는 개념 자체가 성립되지 않으므로, 외부에서 이 객체에 직접적인 접근을 못하도록 은닉시킨다.
public class Calc {
	private static Calc current;
}

1-5. 은닉된 객체를 할당하거나 메모리에서 삭제하는 기능 추가

  • current 객체를 private로 지정하였기 때문에 객체를 메모리에 간접적으로 할당하고 삭제하기 위한 메서드가 필요하다.
  • 객체를 메모리에서 제어하기 위해서는 null을 사용한다.
public class Calc {
	private static Calc current; // <- private static Calc current = new Calc(); (객체 선언)
    
    // 객체 할당처리
    // 객체가 할당되지 않은 경우에만 할당하도록 하여 중복 할당을 방지한다.
    public static Calc getInstance() {
    	if(current == null) {
        	current = new Calc();
        }
        return current;
    }
    // 객체에 null을 대입하면 메모리에서 삭제된다.
    public static void freeInstance() {
    	current = null;
    }
}

1-6. new 연산자를 사용한 객체 할당 금지하기

  • 기본 생성자를 private 형태로 정의하면 객체 생성자가 은닉 처리되어 외부에서 new 연산자를 사용한 객체 할당이 금지된다.
public class Calc {
	private static Clac current;
    
    // 객체 할당 처리
    // 객체가 할당되지 않은 경우에만 할당하도록 하여 중복 할당을 방지한다.
    public static Calc getInstance() {
    	if(current == null){
        	current = new Calc();
        }
        return current;
    }
    
    // 객체에 null을 대입하면 메모리에서 삭제된다.
    public static void freeInstance() {
    	current = null;
    }
    
    private Calc() {
    	super();
    }
}
profile
개린이의 개발 고수되기 작전!

0개의 댓글