Language/Java

MVC+ DTO pattern, 자료구조

do-oni 2021. 7. 27. 15:33

07.27 TIL

MVC pattern + DTO pattern[Value Object]

- IT에서 전반적으로 선호하는 구조
- 각 언어별 개발을 용이하고 쉽게 표준화해서 개발 가능한 구조를 제공하는 Framework 등의 default 구조
- Framework란? 정형화된 개발 구조(틀)

1. M - Model

- 데이터 관리하는 핵심 로직
- 데이터를 표현 할 수 있는 구조
   - Value Object[Value Object Pattern] / Data Transfer Object[DTO pattern] oracle DB에서 부서 정보 표현 table SCOTT/TIGER 계정에 dept table

* ex) 하나의 부서 정보만 프로그램 상에서 활용하기 위해 java 클래스 설계
개발 방법 1 (권장)
- 3개의 멤버 변수를 보유한 DeptValue.java 개발 - 하나의 객체 생성해서 Controller에게 반환
개발 방법 2
- 모든 Model 로직을 하나의 Model.java 클래스에 개발 - 하나의 메소드에서 한 부서의 3개의 검색 결과값을 문자열 배열로 반환
개발 방법 3
- 모든 Model 로직을 하나의 Model.java 클래스에 개발 - 부서 번호 반환하는 메소드/부서명 반환하는 메소드/부서 위치 반환하는 메소드를 개별로 만들어서 하나의 부서 정보 검색 요청임에도 3개의 메소드를 controller에서 호출해서 반환하게 구현

2. V - View

3. C - Controller

 

실습
//Model 클래스
package mvc.model;

import mvc.model.dto.Director;
import mvc.model.dto.Name;

public class Model {
	
	//영화 이름, 감독
	//연도
	//주요 등장인물
	
	public static Name[] getNames() {
		Name[] names = {new Name("분노의 질주:더 얼티메이트"),
				        new Name("랑종"),
				        new Name("크루엘라")};
		return names;
	}
	
	public static Director[] getDirector() {
		Director[] dr = {new Director("저스틴 린"),
				         new Director("반종 피산다나쿤"),
				         new Director("크레이그 질레스피")};
		return dr;
		}
	

    public static int[] getYear() {
    	int[] year = {2021,2021,2021};
    	return year;

}
}
//Controller 클래스
package mvc.controller;

import mvc.model.Model;
import mvc.model.dto.Director;
import mvc.model.dto.Name;
import mvc.view.EndView;

public class Controller {

	public static void req(int num) {

		if(num == 1) {
			EndView.printName(Model.getNames());
		}else if(num == 2) {
			EndView.printDirector(Model.getDirector());
		}else if(num == 3) {
			EndView.printYear(Model.getYear());
		}else {
			EndView.printMsg("다시 요청해주세요");
		}
	}

}
//Start View 클래스
package mvc.view;

import mvc.controller.Controller;

public class StartView {

	public static void main(String[] args) {

		System.out.println("***영화 제목***");
		Controller.req(1);
		
		System.out.println("***영화 감독***");
		Controller.req(2);
		
		System.out.println("***개봉 연도***");
		Controller.req(3);
	}

}
//End View 클래스
package mvc.view;

import mvc.model.Model;
import mvc.model.dto.Director;
import mvc.model.dto.Name;

public class EndView {

	public static void printName(Name[] name2) {
		for(Name name : name2) {
			System.out.println(name);
		}
	}

	@SuppressWarnings("unused")
	public static void printDirector(Director[] dr2) {
		for(Director dr : dr2) {
			System.out.println("제목 : " + Name.getNames() + " 감독 : " + Model.getDirector());
		}
	}
	
	public static void printYear(int[] y) {
		for(int year : y) {
			System.out.println(year);
		}
		
	}
    
	public static void printMsg(String msg) {
		System.out.println(msg);
	}
}
package mvc.model.dto;

public class Director {
	private static String director;
	
	
	public Director (String string) {
		super();
	}

	public static String getDirector() {
		return director;
	}

	public void setDirector(String director) {
		Director.director = director;
	}

}
package mvc.model.dto;

public class Name {
	private static String name;

	public static String getNames() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Name(String string) {
		super();
	}

}

 

자료구조 (모든 언어가 동일)
- 데이터 저장 형식
- java에서도 이미 해당 기능의 각각의 class들 제공
- class가 제공된다 = 다양한 기능의 메소드도 제공
- java.util package로 제공

1. list 자료 구조
- 모든 데이터 다 저장
- 동적 메모리이기 때문에 데이터 삭제시 index들이 재정렬, 추가 데이터 저장도 가능
- 저장 순서가 보장, 데이터들 구분을 위해서 고유한 index로 관리, 중복 데이터 저장 가능
- 배열과 흡사
- 배열은 고정 사이즈 따라서 이미 생성된 사이즈를 갱신하고자 할 경우 불가능 : 새로운 크기의 배열 생성해서 기존 배열 데이터 복사 붙여넣기 가능
- python의 list와 흡사

* ArrayList API
1. list 성질의 메모리 확보 (heap에 객체 생성) ArrayList
2. ArrayList에 데이터 저장 가능한 타입은 Object 타입이면 다 가능 - 8가지 기본 타입만 제외한 모든 타입 다 저장 가능 - 질문 : 저장하는 메소드 public boolean add(Object v){}
3. ArrayList에 저장된 데이터 사용 가능하게 하는 메소드 - index로 데이터 구분 public Object get(int index){}
4. ArrayList에 존재하는 데이터 삭제 - index로 데이터 삭제 public Object remove(int index){}

2. set 자료 구조
- 중복 데이터는 저장 불가

- 저장 순서 무시, 데이터 관리는 index로 불가, 단 중복 불허!!!
- python의 set와 흡사


3. map 자료 구조
- 고유한 key로 데이터 구분

- key로 value 구분 및 관리
- python의 dictionary와 흡사