본문 바로가기

STUDY/국비과정

[JAVA 웹 개발 공부] 국비지원 54일차 - 커맨드패턴(디자인패턴), DB에서 이미지 가져오기

커맨드패턴(디자인패턴)


커맨드 패턴은 객체의 행위(메소드)를 클래스로 만들어 캡슐화 하는 패턴이다.
즉, 어떤 객체(A)에서 다른 객체(B)의 메서드를 실행하려면 그 객체(B)를 참조하고 있어야 하는 의존성이 발생한다.
그러나 커맨드 패턴을 적용하면 의존성을 제거할 수 있다.
또한 기능이 수정되거나 변경이 일어날 때 A 클래스 코드를 수정없이 기능에 대한 클래스를 정의하면 되므로 시스템이 확장성이 있으면서 유연해진다.

 

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;

interface 명령처리자 {
	public 결과 처리();
}

class 첫번째명령처리자 implements 명령처리자 {
	@Override
	public 결과 처리() {
		return new 결과("첫번째결과");
	}
}

class 두번째명령처리자 implements 명령처리자 {
	@Override
	public 결과 처리() {
		return new 결과("두번째결과");
	}
}

class 결과 {
	private String message;
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public 결과(String message) {
		super();
		this.message = message;
	}
}

public class Main implements ActionListener {
	private Map<String, 명령처리자> 처리자맵;
	public Main() {
		super();
		처리자맵 = new HashMap<>();
		처리자맵.put("명령어1번", new 첫번째명령처리자());
		처리자맵.put("명령어2번", new 두번째명령처리자());
	}
	public void 사용자명령처리하기(String 명령어) {
		// 처리자찾기
		명령처리자 inst = 처리자맵.get(명령어);
		// 처리자보고 명령하기
		결과 result = inst.처리();
		// 결과 사용하기
		System.out.println(result.getMessage());
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		String command = e.getActionCommand();
		사용자명령처리하기(command);
	}
	public static void main(String[] args) {
	}
}

 

 

DB에서 이미지 가져오기

 

이미지는 용량이 크고, DB접속이 느리기 때문에 DB접속을 최소화시키고 이미지 객체를 생성시키는것을 최소화하기 위해서 DB에서 이미지를 가져와 Map에 저장하여 사용한다.  

 

public class Assets {
	private Map<String, Image> imageMap; // 이미지 또는 바이트배열
	private 이미지저장소 repo;

	public Assets(Map<String, Image> imageMap) {
		this.imageMap = imageMap;
		repo = new 이미지저장소();
	}

	private void initMap() {
		List 목록 = 로컬저장된파일목록가져오기();
		for (이미지한개 하나 : 목록) {
			map.put("고유한키값", 하나);
		}
	}

	public Image getImage(String imageName) {
		if (imageMap.containKey(imageName)) {
			return imageMap.get(imageName);
		} else {
			Image 불러온거 = repo.디비에저장된이미지가져오기(imageName);
			imageMap.put("이번에새로가져온거키값", 불러온거);
			return 불러온거;
		}
	}
}