728x90

Programming 275

Spring - 스프링 컨테이너와 스프링 빈

- 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 1. ApplicationContext 를 스프링 컨테이너라 한다. 2. ApplicationContext 는 인터페이스이다. 3. 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 4. 직전에 AppConfig 를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 5. 자바 설정 클래스를 기반으로 스프링 컨테이너( ApplicationContext )를 만들어보자. new AnnotationConfigApplicati..

Programming/Spring 2023.06.10

Spring - 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

- 객체 지향 원리를 그림과 코드를 통해 분석해보려 한다. @Test @DisplayName("VIP는 10% 할인이 적용되어야 한다.") void vip_o() { //given Member member = new Member(1L, "memberVIP", Grade.VIP); //when int discount = discountPolicy.discount(member, 10000); //then assertThat(discount).isEqualTo(1000); } - Test 코드 작성 시 1. given 2. when 3. then 구조를 맞춰서 작성하는 것이 좋다. public class OrderServiceImpl implements OrderService { // private final..

Programming/Spring 2023.06.09

Spring - 스프링 핵심 원리 이해1 - 예제 만들기

- 회원 도메인 설계 - 회원 도메인 요구사항 1. 회원을 가입하고 조회할 수 있다. 2. 회원은 일반과 VIP 두 가지 등급이 있다. 3. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) - 항상 역할과 구현을 분리하여 작성해야 한다. - 모든 클래스는 인터페이스를 바라보게 코드를 작성해야 한다. - 위의 그림에서와 같이 회원 저장소의 역할을 생성하고, 구현 클래스가 해당 인터페이스를 바라보도록 설정한다. 1. 주문 생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. 2. 회원 조회: 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회한다. 3. 할인 적용: 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한..

Programming/Spring 2023.06.09

JAVA - Stream API (1) (스트림 생성 방법)

- 스트림 종류 1. BaseStream 1. Stream 2. DoubleStream 3. IntStream 4. LongStream - 스트림 생성 방법 1. 컬렉션 : 컬렉션으로부터 스트림을 생성하면 java.util.Collection의 stream() 메서드를 사용한다. default Stream stream() // 순차 스트림 default Stream paralleStream() // 병렬 처리 스트림 ArrayList myList = new ArrayList(); myList.add(10); myList.add(20); myList.add(30); myList.add(40); myList.add(50); Stream myStream = myList.stream(); 2. 배열 : 배열로부..

Programming/JAVA 2023.06.08

Spring - Data JPA

- JPA를 이용할 때는 테이블과 SQL을 다루는 것이 아니라 데이터에 해당하는 개체를 엔티티 객체라는 것으로 다루고 JPA로 이를 데이터베이스와 연동해서 관리한다. - 엔티티 객체는 쉽게 말해서 PK(기본키)를 가지는 자바의 객체이다. 엔티티 객체는 고유의 식별을 위해 @Id를 이용해서 객체를 구분하고 관리한다. - Spring Data JPA는 자동으로 객체를 생성하고 이를 통해서 예외 처리 등을 자동으로 처리하는데 이를 위해서 제공되는 인터페이스가 JpaRepository이다. - 엔티티 클래스는 반드시 @Entity가 존재하고, 해당 엔티티 객체의 구분을 위한 @Id가 필요하다. @MappedSuperclass @EntityListeners(value = { AuditingEntityListene..

Programming/Spring 2023.06.07

JAVA - 열거형

- 열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. public class Card { static final int CLOVER = 0; static final int HEART = 1; static final int DIAMOND = 2; static final int SPADE = 3; static final int TWO = 0; static final int THREE = 1; static final int FOUR = 2; final int kind; final int num; } - 위와 같이 상수 하나마다 값을 넣어 지정해줘야 했다. enum Kind { CLOVER, HEART, DIAMOND, SPADE } // 열거형 Kind를 정..

Programming/JAVA 2023.06.07

JAVA - Optional

- Optional을 알기 전 NullPointerException을 알아야 한다. - NullPointerException이란? 1. null 값이 반환되면 발생하는 예외이다. - Optional이란? 1. JAVA8에서는 Optional 클래스를 사용해 NPE를 방지할 수 있도록 도와준다. 2. Optional는 null이 올 수 있는 값을 감싸는 Wrapper클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. public final class Optional { // If non-null, the value; if null, indicates no value is present private final T value; ... } 3. Optional 클래스는 위와 같이 value에 값을 저장..

Programming/JAVA 2023.06.05

Spring - MVC 기본 동작 원리

1. 컨트롤러에서 리턴 값으로 문자를 반환하면 viewResolver가 화면을 찾아서 처리한다 2. 스프링 부트 템플릿엔진 기본 viewName 매핑 3. resources:templates/ + (viewName) + .html 1. 웹 브라우저에 요청이 들어오면 톰켓은 스프링 컨테이너에 해당 컨트롤러를 우선 찾아보고 없으면 resources에 있는 정적 파일을 찾아서 요청에 대한 응답을 보낸다. - Controller @Controller public class HelloController { @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model) { model.addAttribute(..

Programming/Spring 2023.06.05

Spring - @RequestParam, @ModelAtttribute, WebDataBinder

1. 사용법과 예제 우선 각각의 어노테이션의 사용법과 예제를 다루어보고, 각각을 언제 사용하면 좋을지에 대해 알아보도록 하겠습니다. @RequestParam @RequestParam 어노테이션은 사용자가 요청시 전달하는 값을 Handler(Controller)의 매개변수로 1:1 맵핑할때 사용되는 어노테이션입니다. @Controller public class TestController { @GetMapping("/") public String getTestPage(@RequestParam("name") String name) { System.out.println("이름 : " + name); return "test"; } } 예를 들어 사용자가 /?name=test 로 요청한다면, 위 핸들러의 매개변수인..

Programming/Spring 2023.06.02
728x90