day08 디자인패턴

JTH·2023년 2월 1일
0

gb_jth

목록 보기
22/56

1. 디자인 패턴

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

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

1-2. Singleton 패턴

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

1-3. Singleton 객체의 이점

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

싱글톤 패턴은 거의 고정

package singleton;



public class Calc {
	// ---------------- 싱글톤 객체를 생성하기 위한 준비 시작
	/*
	 *  - static 이 적용된 자원은 메모리의 고정영역에 생성되기 때문에, 클래스 자체의 객체나, 그 안에서 포함된 멤버변수, 
	 * 메서드와는 메모리 상에서 구별된다고 볼 수 있다.
	 * - 그러므로 Calc 클래스 안에 static 형태로 Calc 클래스의 객체를 정의하더라도 코드상의 논리적인 연관관계를 위해 하나의 파일에서
	 * 정의하는 것일 뿐, 실제로는 Calc 클래스 자체에서 독립된 객체가 되는 것이다.
	 * - Calc 클래스 이외의 여러 곳에서 new연산자를 사용하여 객체 할당이 가능하다면 Singleton이라는 개념 자체가
	 * 성립되지 않으므로, 외부에서 이 객체를 직접적인 접근을 못하도록 은닉시킨다.
	 */
	
	private static Calc current;  // current라는 이름의 객체를 선언! 만.
	
	/*
	 * - current 객체를 private로 지정하였기 때문에 객체를 메모리에서 간접적으로 할당하고 삭제하기 위한 메서드가 필요하다.
	 */
	public static Calc getInstance() {   //메서드는 public으로 두고 리턴해주기위해 Calc 메서드로..
		if(current == null) {
			current = new Calc();  //if문을 타면 ..따론ㅇㅁㄻㄴㅇㅎ
		}
		return current;  //current안에 내용이있다면 그냥 바로 리턴
	}
	
	/*
	 * - 객체를 메모리에서 제어하기 위해서는 null 사용
	 * - 객체에 null을 대입하면 메모리에서 삭제된다.
	 */
	public static void freeInstance() {
		current = null;
	}
	
	/*
	 * - 기본 생성자를 private 형태로 정의하면 객체 생성자가 은닉 처리되어 외부에서의 new 연산자를 사용한
	 * 객체할당이 금지된다.
	 */
	private Calc() {
		
	}
	
	
	// ---------------- 싱글톤 객체를 생성하기 위한 준비 끝
	
	
	
	
	
	public int plus(int x, int y) {
		return x+y;
	}
	public int minus(int x, int y) {
		return x-y;
	}
	public int times(int x, int y) {
		return x*y;
	}
	public int divide(int x, int y) {
		return x/y;
	}
	
	
	
}
package singleton;

public class Main01 {

	public static void main(String[] args) {
		// getInstance() 메서드를 사용하여 객체를 리턴받는 형식
		Calc c1 = Calc.getInstance();		
		
		// 여러개의 객체를 리턴 받더라도 모두 하나의
		// static 객체를 참조하게 되기 때문에
		// 전역 객체 하나만이 메모리에 할당되게 된다.
		System.out.println( c1.plus(20, 10) );
		
		//참조처리를 생략하고 직접 사용하는 경우
		System.out.println( Calc.getInstance().minus(20, 10));
		
	}

}
profile
//

0개의 댓글