Language/Java
MVC+ DTO pattern, 자료구조
do-oni
2021. 7. 27. 15:33
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와 흡사