디자인 패턴이란?
프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 ‘규약’ 형태로 만들어 놓은 것을 의미
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
// 생성자는 외부에서 호출못하게 private 으로 지정해야 한다.
}
public static Singleton getInstance() { //getInstance를 사용해서 새로운 Singleton 객체 사용을 막는다
return instance;
}
public void say() {
System.out.println("hello");
}
}
전역으로 사용되는 인스턴스 이기에, 다른 클래스의 인스턴스들이 접근하여 사용 가능
클라이언트 -> 웹 서버
로의 요청이 클라이언트 -> 프록시 서버 -> 웹서버
로, 중간에 하나의 계층이 더 생긴다 iterator
라는 하나의 인터페이스를 통해 순회할 수 있도록 해주는 디자인 패턴 즉시 실행 함수
를 통해 private,public같은 접근 제어자를 만드는 패턴 const rmp = (() => {
const a = 1;
const b = () => 2;
const public = {
c: 2,
d: () => 3,
};
return public;
})();
console.log(rmp);
console.log(rmp.a);
// { c: 2, d: [Function: d] }
// undefined
a와 b는 다른 모듈에서 접근할 수 없는 private 범위를 가진다. c와 d는 다른 모듈에서도 사용할 수 있는 public 범위를 가지게 된다
이 원리를 기반으로 만든 자바스크립트 모듈 방식이 바로 CJS(CommonJS)입니다.
Repository, Service는 무엇인가?
위처럼 MVC 패턴을 이용하면 비즈니스 로직과 뷰는 분리가 된다.
하지만, Controller에서는 HTTP 연결을 담당하는 컨트롤러 로직이 있기 때문에
컨트롤러가 너무 많은 일을 담당하게 된다.
위 문제점 때문에 Service, Repository 계층을 따로 만들어서 Controller는 컨트롤러 로직에만 집중할 수 있게한다.
그렇게 분리된 Repository, Service , DTO ,DAO 등은 사실상 Controller 레이어에 속한다
MVC의 C에 해당하는 컨트롤러가 뷰 모델(View Model)로 바뀐 패턴