소프트웨어 설계에서 자주 발생하는 문제들에 대한 재사용 가능한 해결책을 제공함으로써 효율적인 프로그래밍을 작성하기 위한 프로그래밍 작성 기법이다. 이러한 디자인 패턴은 크게 생성(Creational), 구조(Structural), 행동(Behavioral) 패턴으로 분류됩니다.
이하에서 논하는 디자인 패턴은 주로 행동 패턴에 해당하게 된다.
기본 구조(레이어드 아키텍처)
추상화가 없는 구조이다.

프리젠테이션 계층
UI를 제공하여, UI 계층(클라이언트와 접점)이라고도 한다.
애플리케이션 계층의 최상단 계층으로 클라이언트의 요청을 받아서 해석하고 응답하는 역할을 담당한다.
별도의 비지니스 로직은 포함하지 않고, 비지니스 계층으로 요청을 위임해 처리하게 한다.
비지니스 계층
서비스(Service) 계층이라고도 한다.
애플리케이션의 서비스의 기능을 정의 하고,비지니스 로직을 구현하는 역할을 담당한다.
트랜잭션 처리 나 유효성 검사 처리도 수행한다.
DDD( Domain-Driven Design) 기반의 아키텍쳐에서는 비지니스 로직에 도메인이 포함 되기도 한다.
데이터 접근 계층
영속성(Persistence)계층이라고도 한다.
데이터 베이스에 직접 접근하는 작업을 수행한다.
일반적으로 DAO라고 표현하지만,JPA 같은 경우에는 Repository라고도 표현 한다.
3)특징
장점
단점
정리
OOP는 객체 지향적인 관점에서 모듈화와 재사용 가능한 코드 작성에 집중합니다.
일반적인 객체 지향 프로그래밍의 특징인 추상화를 잘 수행하는 구조여야 한다.


도메인 주도 설계를 의미한다.
도메인 객체는 기본 비지니스 모델을 처리하기 위한 객체를 의미한다.
기본의 디자인패턴과 다르게 서비스 레이어의 역할을 축소 시킨다.