목록전체 글 (14)
To Dare Is To Do!
SOLID란? 좋은 객체 지향 설계를 위해 지켜야 할 5가지 원칙을 의미한다. SRP : 단일 책임 원칙 (Single Responsibility Principle) OCP : 개방-폐쇄 원칙 (Open/Closed Principle LSP : 리스코프 치환 원칙 (Liskov Substitution Principle) ISP : 인터페이스 분리 원칙 (Interface Segregation Principle) DIP : 의존관계 역전 원칙 (Dependency Inversion Principle) SRP - 단일 책임 원칙 한 클래스(객체)는 하나의 책임(기능)만을 가져야 하는 것을 의미한다. 하나의 책임이라는 것에 대한 기준은 책임의 크기 혹은 문맥과 상황에 따라 다르기 때문에 모호할 수 있다. 따라..
먼저 클래스(class)란? 자바에서 객체를 정의하는 설계도의 의미를 가지며 보통 붕어빵(객체 or 인스턴스)를 찍어내는 붕어빵 틀(클래스)에 비유하기도 한다. 여기서 객체는 클래스에서 정의한 속성과 기능을 가진 실체를 의미, 인스턴스는 특정 클래스로부터 생성된 객체를 의미 ex) Student 클래스를 통해 Student1과 Student2를 만들었다고 가정했을 때, Student1은 Student 클래스의 인스턴스라고 말할 수 도 있으나 Student1은 학생1의 속성을 가지는 객체, Student2는 학생2의 속성을 가지는 객체라고 이야기할 수 도 있다. 결국 클래스에서 나온 실체라는 의미에서 비슷하게 사용되나 바라보는 관점에 따라서 용어상 차이가 존재한다고 할 수 있다. 객체가 가지고 있는 속성은..
지난번 DTO와 Entity에 대해서 작성한 글에서 DTO는 레이어 간 객체 전송을 Entity는 DB 테이블 매핑을 위한 객체라고 확인한 적이 있다. https://whitehartlane.tistory.com/11 DTO vs VO vs Entity 과거 프로젝트를 진행할 때 어디서는 domain, 또 다른 곳에서는 DTO 등 비슷한 개념과 역할을 가지는 것 같은데 정확히 어떤 차이가 있는지 궁금했던 경험이 있다. 이번 기회에 DTO와 VO 그리고 Entity whitehartlane.tistory.com 그렇다면 클라이언트에서 데이터를 DTO에 받아 전송하다 DB에 가기 전에는 Entity로 변환해야 하는데 어디서 해야 하는 것일까? 또 어떠한 방법으로 변환해 주어야 하는 것일까? 이번 글을 쓰면서..
DDD(Domain Driven Design)란? 도메인 주도 설계 (DDD)는 설계 단계에서부터 기획자, 디자이너 등 프로젝트 이해관계자를 의미하는 도메인 전문가들이 참가하여 개발자와 도메인 전문가 모두가 이해 가능한 도메인 모델을 도출하고 이를 중심으로 발전시켜 나감으로써 복잡한 비즈니스 상황을 해결하는 개발 방법론이다. 여기서 도메인이란 소프트웨어로 해결하고자 하는 문제 영역을 의미하며 하나의 도메인은 여러 서브 도메인으로 나눌 수 있다. 예를 들어 배달 중계 어플이라는 도메인이 있다면 음식, 식당, 회원, 주문 등의 서브 도메인으로 나눠질 수 있다. 이러한 도메인을 개념적으로 표현한 것이 도메인 모델이다. DDD의 특징 1. 도메인 그 자체와 도메인의 비즈니스 로직에 초점을 둔다. 데이터 중심의 ..
과거 프로젝트를 진행할 때 어디서는 domain, 또 다른 곳에서는 DTO 등 비슷한 개념과 역할을 가지는 것 같은데 정확히 어떤 차이가 있는지 궁금했던 경험이 있다. 이번 기회에 DTO와 VO 그리고 Entity의 개념에 대해서 정리해 보고 해당 개념을 적절한 상황에 사용할 수 있도록 하자! DTO Data Transfer Object의 약자인 DTO는 계층(Controller - Service - Repository)간 데이터 전달을 위해 사용하는 객체이다. 데이터를 주고 받을 때 데이터를 담아서 교환할 수 있도록 하는 바구니라고 하면 이해하기 쉬우며 이 바구니는 주로 View와 Controller 사이에서 많이 사용되곤 한다. DTO는 데이터 교환만을 위한 객체이기 때문에 따로 비즈니스 로직을 갖지..
HTTP란? HyperText Transfer Protocol의 약자인 HTTP는 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜을 의미한다. 클라이언트와 서버 간의 통신을 관리하고 웹 페이지, 이미지, 동영상, 문서 등의 리소스를 전송하고 검색할 때 사용된다. ※ 리소스란 URL를 검색해서 받아온 결과로서 텍스트, HTML, 이미지 등 그 외 서버로부터 전달받은 데이터를 의미한다. HTTP 메서드 - HTTP 메서드란 클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식 = 서버에 주어진 리소스에 수행하길 원하는 행동, 서버가 수행해야 할 동작을 지정하는 요청을 보내는 방법 - HTTP 동사라고 부르기도 함 - 클라이언트가 ..
지난번 Controller만을 구현하여 위의 결과를 출력해 보고 Controller 속에서 활용된 어노테이션들을 살펴보았다. 이번에는 Controller 뿐만이 아니라 Service, Repository 등 클라이언트와 데이터베이스 사이의 과정을 모두 구현하고 각 계층이 스프링으로부터 어떻게 의존성이 주입되는지 확인해 보려고 한다. 먼저 의존성, 즉 객체가 주입되기 위해서는 Spring 컨테이너의 관리를 받는 객체(스프링 빈)가 되어야 하며 스프링 빈으로 등록하는 방법에는 @Component와 @Configuration + @Bean 조합이 있다. 뒤의 예시는 @Component를 활용한 예시이다. @Component TestController의 @Controller 어노테이션을 뜯어보면 이 어노테이션이..
다음과 같은 화면을 보기 위한 Controller를 구현하는 과정에서 어떠한 어노테이션이 사용되는지 확인해 보고자 한다. import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class TestController { @RequestMapping(value="/test", method= RequestMethod..
# 1. Controller 클라이언트의 요청을 처리하고 사용자 인터페이스와 비즈니스 로직을 분리한다. 주로 사용자의 요청을 받아 Service로 넘겨주고 처리된 결과를 다시 받아 View 화면을 통해 반환하는 역할을 한다. # 2. Service Controller와 Repository의 중간 단계로서 Controller와 Repository의 직접적인 연결을 방지한다. 비즈니스 로직을 담당하여 데이터에 대한 처리 및 계산, 데이터베이스에 대한 접근을 수행한다 Controller와 Service를 분리하는 이유는? 코드 분리 : Controller는 클라이언트 요청 처리 및 사용자 인터페이스 관련 로직, Service는 비즈니스 로직을 담당하면서 각자의 역할에 집중 유지보수 용이 : 둘을 분리함으로써 ..
IoC란? IoC( Inversion of Control )는 제어의 역전으로 메소드나 객체의 호출 작업을 내부에서 직접 관리하지 않고 외부에서 결정하도록 하는 원칙을 의미한다. 이는 영화사의 연락(호출)을 기다리는 할리우드 배우의 상황에 비유하여 할리우드 원칙(Don't call us, we'll call you)라고 불리기도 한다. 왜 IoC를 사용하는가? 객체의 결합도를 줄임으로써 유연한 코드를 작성할 수 있도록 하여 유지 보수에 용이하다. -> 객체 지향 원칙을 잘 지킬 수 있다. + DIP란? DIP( Dependency Inversion Principle )는 의존 역전 원칙으로 상위 레벨 모듈이 하위 레벨 모듈에 의존하는 관계를 역전시키는 것을 의미한다. 이 때 지켜야 할 2가지 원칙으로 1..
API란? Application Programming Interface의 약자로 한 프로그램에서 다른 프로그램으로 데이터를 주고받기 위한 프래그래밍 기술을 의미한다. 예를 들면 API는 손님과 식당 사이에서 음식이라는 데이터를 주고 받을 수 있게 해주는 메뉴판과 같은 역할이라고 볼 수 있다. REST란? REST는 Representational State Transfer의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미한다. 구체적으로 살펴보면 HTTP URI를 통해 자원을 명시하고 HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다. REST API란? REST 기반으로 서비스 API..
어노테이션이란? 사전적 의미로 주석을 의미하는 어노테이션은 자바에서 코드 사이에 쓰이며 특별한 의미와 기능을 수행할 수 있도록 추가적인 정보를 제공하는 기술이다. 대표적으로 코드 작성 시 문법 에러를 체크하도록 정보를 제공하거나 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공한다. 오버라이딩을 구현시 override 어노테이션의 유무는 어떤 차이가 있을까? class Parent { public void hello(String name) { System.out.println("안녕하세요, 저는 " + name + "입니다."); } } class Child extends Parent{ // @Override가 없다면? public void hello() { System.out.println..
지난번 객체 지향 프로그래밍의 특징을 살펴보다 인터페이스가 간단한 예시로서 사용된 경우가 있었다. 오늘은 인터페이스에 대하여 살펴보며 지난번 공부했던 객체 지향에 대해서도 간단히 상기시켜 보려고 한다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경 용이하게 만들어 유지보수가 쉽고 코드를 최소화할 수 있다는 장점이 있다. 이러한 프로그래밍의 대표적인 특징들 속에서 인터페이스는 많은 비중을 차지하고 있는데 그중에서 나는 추상화와 다형성에서 인터페이스의 가치가 드러난다고 생각한다. - 추상화를 가진 인터페이스 추상화란 객체의 공통된 특징을 정의하여 불필요한 세부사항은 제거하고 필요한 정보의 표현을 목적으로 한다. 객체 지향 측면에서 인터페이스는 어떠한 객체의 핵심적인 역할을 정의하는 것으로 구체적인 구현 사..
누군가 객체 지향 프로그래밍에 대해 설명해달라고 한다면 "객체들로 구성된 파일들이 유기적으로 작용하여 효율적으로 프로그램을 유지, 보수할 수 있는 방식이다" 정도의 얕은 설명만 할 수 있을 뿐 대표적인 4가지 특징에 대해 명확하게 떠오르지 않았다. 이번 기회를 통해 객체 지향의 특징에 대해 이해하고 넘어갈 수 있도록 정리해 보고자 한다. 객체 지향의 4가지 특징 1. 추상화 (Abstration) 중요하고 필요한 정보만을 표현하기 위하여 객체의 공통된 속성과 기능을 파악하여 정의하는 것 자바에서는 추상 클래스와 인터페이스를 통해 추상화를 구현할 수 있으며 다음은 인터페이스를 사용한 예시이다. public interface Machine { public abstract void turnOn(); publi..