이론/자바 풀스택 국비수업

220325 디자인패턴, 패키지

달거북씨 2022. 3. 30. 22:57
1. 디자인패턴(Design Pattern)

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

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

 

1-2. SingleTone 패턴

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

 

1-3. SingleTone 객체의 이점

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

 

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;
	}
	
	public static void freeInstance() {
		current = null;	// 객체에 null을 대입하면 메모리에서 삭제된다.
	}
}

 

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

기본 생성자를 private 형대로 정의하면 객체 생성자가 은닉 처리되어 외부에서 new 연산자를 사용한 객체 할당이 금지된다.

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;
	}
	
	public static void freeInstance() {
		current = null;	// 객체에 null을 대입하면 메모리에서 삭제된다.
	}
    
	private Calc(){
    		super();
    	}
}

 


 

계산 기능 싱글톤 생성
싱글톤 객체 사용

 


 

2. 패키지(Package)

2-1. Java Package

    • 패키지 : 클래스에 대한 묶음 단위
    • 클래스를 용도별이나, 기능별로 그룹화 한 것을 말한다. 소스 코드는 폴더로 분류된 형태로 존재하게 된다.
    • 패키지 이름의 일반적인 정의 형식
      회사 도메인 이름의 역순, 프로젝트 이름의 소문자

      → com.koreait.shop.user
      → com.koreait.shop.article
  • 서로 다른 패키지에 속해 있다면 다른 클래스와 이름이 동일하더라도 충돌이 발생하지 않는다.(서로 다른 폴더에는 이름이 같은 파일들이 존재할 수 있다)
  • 패키지에 소속된 클래스 파일은 첫번째 라인에서 자신이 소속된 클래스 패키지 이름을 선언해야 한다.
  • 이클립스가 왼쪽의 트리 영역에서 소스를 분류하는 작업을 통해 구문을 자동으로 추가해주지만, 간혹 처리되지 않을 때도 있으므로 패키지 구문에서 에러가 발생할 경우, 소스가 어떤 패키지에 있는지 확인하여 직접 이 구문을 수정해주어야 한다.
    저번 시간 Article 복사해와서 활용
    패키지에 속해 있는 클래스에 대한 객체 생성 방법
728x90