MVC 패턴과 싱글톤(Singleton) 패턴
MVC(Model, View, Controller )패턴
Model => 데이터와 데이터를 구성하기 위한 로직을 말한다.
View => 데이터를 사용자에게 보여주는 역할
Controller => 사용자의 요청을 받아서 Model에 일을 시키고 그 결과를 받아서
View에 전달한다.
-------------------------------------------------------------------------------
JAVA에서 MVC패턴의 비지니스 로직에 사용되는 클래스들...
- VO, DTO ==> 데이터를 저장하는 역할만 하는 클래스
(VO=Value Object, DTO=Data Transfer Object)
(DB테이블에서 1개의 레코드가 저장될 클래스를 말한다.)
- DAO ==> SQL문을 DB서버에 보내서 그 결과를 얻어오는 역할을 수행하는 클래스
(DAO=Data Access Object)
- Service ==> 일을 수행하는 중간 관리자 역할을 수행하는 클래스
Service는 일이 있으면 그 일에 필요한 DAO를 호출해서 일을 처리한 후
처리된 결과를 Controller에게 전달한다.
- Controller ==> 비지니스 로직이 시작되는 곳으로 사용자의 요청이 오면 그 요청에 맞는
Service에게 일을 시키고, Service가 보내온 처리 결과를 View에 전달하는
역할을 수행한다.
Controller ----> Service ---> DAO ---> DB서버
<--- <--- <---
VO VO --> 자료를 보통 VO나 Collection객체에 담아서 보낸다.
Service => DAO를 부름
Controller => Service를 부름
Singleton패턴 ==> 객체가 1개만 만들어지게 하는 패턴
(외부에서 new 명령을 사용하지 못하도록 한다.)
Singleton 클래스를 만드는 방법(필수 구성요소)
1) 자신class의 참조값이 저장될 변수를 private static으로 선언한다.
2) 모든 생성자의 접근 제한자를 private으로 한다.
(생성자가 없으면 기본 생성자를 반드시 만들어야 한다.)
3) 자신 class의 인스턴스를 생성하고 반환하는 메서드를 public static으로 작성한다.
( 이 메서드의 이름은 보통 getInstance으로 한다.)
public class MySingleton {
// 1번
private static MySingleton single;
// 2번 - 기본생성자를 private으로 한다.
private MySingleton() {
System.out.println("생성자 입니다....");
}
// 3번
public static MySingleton getInstance() {
if(single == null) single = new MySingleton();
return single;
}
// 기타 이 클래스가 처리할 내용을 작성한다.
public void displayTest() {
System.out.println("싱글톤 클래스의 메서드 호출입니다...");
}
}
public class SingletonTest {
public static void main(String[] args) {
// MySingleton test = new MySingleton(); // 외부에서 new 명령 사용 불가
MySingleton test2 = MySingleton.getInstance();
MySingleton test3 = MySingleton.getInstance();
System.out.println("test2 ==>" + test2.toString());
// @7852e922
System.out.println("test3 ==>" + test3);
// @7852e922 참조값이 같다
System.out.println(test2.equals(test3)); // true
System.out.println(test2 == test3); // true
test2.displayTest();
}
}
싱글톤 할때 DB테이블에서 컬럼명 쉽게 가져오기
SQL
----------------------------------------------------------------------------------------
select 'private '||
decode(lower(data_type), 'number', 'int ', 'String ') || ' ' ||
lower(column_name) || ';'
from cols
where lower(table_name) = 'jdbc_board'