앞의 글에서 이어서 작성하겠다. 앞의 글은 순수하게 자바 언어만 사용해 객체 지향 프로그래밍을 구현했다. 구현했을 때, 문제가 된 내용은 아래 코드에서 바로 확인이 가능하다. 구현체가 어떤 객체를 사용할지 선택하고 있다는 것이다. 구현체는 추상화에만 충실해야한다. 예를 들어 배우는 대본에만 충실해야하는데, 대본도 외우고 상대 배우도 고르고 있는 상황인 것이다. 이런 문제를 해결하기 위해 프레임워크가 필요해진다. 공연 기획자와 유사한 역할을 하는 것을 프레임워크라고 생각하고, 이를 구성하는 방식으로 아래의 SOLID 원칙에서 벗어난 것들을 개선할 수 있다. public class OrderServiceImpl implements OrderService{ DiscountPolicy discountPolicy..
이번 포스팅에서는 자바만을 활용해서 객체 지향 설계를 먼저 완성을 하는 것을 목표로 한다. 객체 지향 설계를 완성한 후, SOLID 원칙 관점에서 점검을 해보도록 한다. 1. 멤버 클래스의 구현 멤버 클래스는 멤버변수 ID, 이름, 등급을 가진다. 멤버 클래스는 생성자와 Getter / Setter를 가진다. 등급은 enum으로 상수 클래스를 추가해서 사용한다. package myname.core2.member; public class Member { private Long memberId; private String memberName; private Grade grade; public Member(Long memberId, String memberName, Grade grade) { this.memb..
목표는 간단한 웹 MVC 개발을 통해 Spring에 친숙해지고자 한다. 비즈니스 요구 사항 정리 데이터 : 회원 ID, 이름 기능 : 회원 등록 및 조회 아직 데이터 저장소가 선정되지 않음 일반적인 Web Application의 계층 구조 도메인 : 회원, 주문, 쿠폰처럼 DB에 저장 관리되는 비즈니스 도메인 객체 서비스 : 비즈니스 도메인 객체를 가지고 핵심 비즈니스 로직이 동작하도록 구현함 컨트롤러 : 웹 MVC의 컨트롤러 역할 리포지토리 : DB에 접근함. 도메인 객체를 DB에 저장 관리한다. 설계 구조 Repository는 Interface로 설계를 한다. 왜냐하면 아직 DB가 결정되지 않았기 때문에 어떤 방식으로 데이터를 저장해야하는지 정할 수 없기 때문이다. 따라서, 메모리 레벨에서 리포지토리..
Spring은 크게 세 가지 방식이 있다. 1) 정적 컨텐츠, 2) Template Engine을 활용한 MVC, 3) API가 있다. 정적 컨텐츠는 내가 만든 HTML 파일을 가공 없이 그대로 클라이언트에게 주는 방식이다. 2번은 Templeate Engine을 MVC 방식으로 쪼개서 View를 Template Engine으로 렌더링한 HTML을 클라이언트에게 전달해주는 방식이다. API는 특정한 방식으로 내가 가공한 데이터를 JSON 방식으로 돌려주는 방법이다. 즉, Return Type은 크게 HTML과 JSON 형식이 있다고 볼 수 있다. 어찌됐건 Spring API로 JSON 형식을 넘겨주고 싶다면 이 두 가지가 반드시 동시에 일어나야 한다. 1) 어노테이션으로 "ResponseBody"달아주기..
앞에서 MVC 패턴을 활용한 동적 html을 만들었다. 이번에는 웹서버로부터 동적으로 입력을 받아, 그 값이 나오는 동적 MVC 패턴을 만드는 내용이다. 동적 MVC 패턴 만들기 1. Controller Class에 'hello-mvc'를 추가 mapping한 메서드를 만든다. 생성자에 @requestParam("name") String name 라는 매개변수를 줄 수 있다. 이 매개변수는 웹페이지에서 접근 경로를 "localhost:8080/hello-mvc?name="으로 설정해야한다. 이렇게 하면 name= 뒷쪽에 있는 값들이 requestParam에 있는 "name"에 들어가게 되고, 이 값이 String name 매개변수로 들어가게 된다. 2. name 매개변수를 model.addAttribut..