반응형 학습/Java43 POJO / Hibernate *POJO란? Plain Old Java Object의 줄임말로 2000년 컨퍼런스에서 마틴파울러가 처음으로 사용하였다. 어떤한 기술에도 종속되어있지 않는 순수한 객체 상태를 의미한다. 진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다. 그런 POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 할 수 있다. -(토비의 스프링3 672p) POJO라는 용어는 이후에 주로 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트를 지칭하는 말로 사용되었다. 스프링 프레임워크는 POJO 방식의 프레임워크이다. *POJO 프레임워크 등장배경 EJB의 비전은 '.. 2021. 8. 1. 전략패턴이란? 전략(Stragetegy)패턴이란? 여러 알고리즘을 추상적인 접근점(인터페이스)을 만들어 접근점에서 서로 교환 및 실행(델리게이트) 가능하도록 하는 패턴이다. 전략패턴을 위해서는 인터페이스, 델리게이트에 대한 이해가 필요하다. 왜냐하면, 접근점은 인터페이스로 만들고 알고리즘을 구현하는 작업은 델리게이트 방식으로 해결하기 때문이다. 인터페이스(interface)란? 인터페이스는 기능의 선언과 구현을 분리하도록 한다. 기능 구현의 통로로 이용된다. 인터페이스라는 접근점을 설정해두면, 상황에 따라서 적절한 알고리즘을 사용하면 된다. 델리게이트(delegate)란? 사전적 뜻으로는 '위임하다'이며 특정 객체에 특정 처리를 위임해주는 것, 즉 책임을 넘겨주는 것이다. 다시 말해, 특정 객체의 기능을 사용하기 위해.. 2021. 8. 1. map vs flatMap 쇼핑몰 토이프로젝트 중에 리스트 안에 리스트를 조회해야하는 일이 생겼습니다. 단순하게 map을 2번 사용해서 리스트 안으로 들어가고 싶었는데, 오류가 났습니다. flatMap을 알아내어 해결했습니다. 그래서 map과 flatMap의 차이를 비교하고 사용하고자 합니다.해당 글은 map과 flatMap의 차이를 정리하기 때문에 map에 대한 기본 개념은 따로 적지 않습니다. 예시를 통해서 비교하는 것이 가장 빠르다고 생각합니다. Stream은 map을 사용한다면 주석으로 반환형을 꼭 써보면서 공부하면 학습 능률이 커집니다. List fruit = new ArrayList(); fruit.add("Apple"); fruit.add("mango"); fruit.add("pineapple"); fruit.add(.. 2021. 5. 16. JJWT Java JWT: JSON Web Token for Java and Android JAVA JWT : JSON Web Token for Java and Android JJWT는 JWT를 생성하고 증명하는 라이브러리로서 자바와 JVM과 안드로이드에서 가장 쉽게 사용하고 이해할 수 있는 것을 목표로 한다. JJWT는 Apache 2.0 라이선스에 따라 JWT, JWS, JWE, JWK, JWA RFC 명세 및 오픈소스를 독점적으로 기반하는 순수 Java 구현이다. 라이브러리는 Okta' 선임 설계자인, Les Hazlewood에 의해 만들어졌으며, 컨트리뷰터들의 커뮤니티에서 지원하고 유지관리한다. Okta는 개발자를 위한 완벽한 인증과 사용자 관리 API이다. * 특징 - 모든 JDK와 Android에서 기.. 2021. 3. 3. Could not autowire. No beans of 'Mapper' type found * 문제 상황 Dozer의 공식 github 사이트에 따르면, 아래와 같이 Dozer를 사용하는 간단한 예시가 있습니다. 그래서 이 Mapper를 이용하고자 Mapper를 생성자에 주입하려고 하는데, 다음과 같은 오류를 냈습니다. 일단 무시하고 프로젝트를 실행하니 아래와 같이 bean을 찾지 못하니까 bean을 등록하라는 메세지가 나옵니다. 제가 원하는 객체가 제대로 주입되지 못한 것 같습니다. 따라서 설정을 통해 Mapper를 등록합니다. *문제 해결 @Configuration을 가지고 있는 설정파일을 하나 생성하고, @Bean을 등록시켜서 문제를 해결하였습니다. 2021. 3. 2. public API에서 AllArgsConstructor 사용하지 말 것!!! 서론 class를 변경하려고 할 때 public API가 적합한지에 대해 생각해 본 적이 있습니까? LomBok을 사용할 때, 특히 몇가지 놓치기 쉬운 것들이 있습니다. AllArgsConstructor 어노테이션이 많은 문제를 일으킬 것입니다. 문제가 무엇인가? AllArgsConstructor를 사용한 간단한 클래스에 대해 보겠습니다. @Data @AllArgsConstructor public class Person { private final String firstName; private final String lastName; private Integer age; } 이제, 테스트에서 만들어진 생성자를 이용할 수 있습니다. def 'use generated allArgsConstructor'() .. 2021. 2. 21. Optional을 제대로 사용하는 26가지 방법 ( 2 ) Item 14 : Optional을 생성자 매개변수에서 사용하지 말 것 // 잘못된 방법 public class Customer { private final String name; // null일 수 없다 private final Optional postcode; // optional이므로 null일 수 있다 public Customer(String name, Optional postcode) { this.name = Objects.requireNonNull(name, () -> "Name cannot be null"); this.postcode = postcode; } public Optional getPostcode() { return postcode; } ... } // 옳은 방법 public cl.. 2021. 2. 18. Optional을 제대로 사용하는 26가지 방법 ( 1 ) Item 1 : null을 Optional 변수에 할당하지 말 것 //잘못된 방법 public Optional fetchChart() { Optional emptyCart = null; ... } //옳은 방법 public Optional fetchCart() { Optional emptyCart = Optional.empty(); ... } Optional을 초기화하고 싶다면, null이 아니라 Optional.empty()를 사용해야 합니다. Optional은 단지 컨테이너나 박스일 뿐이고, null로 초기화시키는 것은 무의미합니다. Item 2 : Optional.get()을 호출하기 이전에 Optional이 값을 가지도록 만들 것 //잘못된 방법 Optional cart = ... ; // car.. 2021. 2. 18. orElse() vs orElseGet() Optional에서 추가적인 행동을 위해서 사용하는 orElse()와 orElseGet()은 굉장히 비슷한 모양과 역할을 하고 있습니다. 하지만 모든 문서에서는 두개의 메서드에 대한 차이점을 강조하면서 유의하라고 설명합니다. 그래서 어떤 점이 다른지 좀 더 자세히 살펴보고자 합니다. 위 사진의 오라클 문서에 따르면, 값이 존재한다면 값을 그대로 리턴하고 그렇지 않다면 other을 리턴한다고 나와있습니다. 단지 orElseGet()은 Supplier를 매개변수로 가지기 때문에 other을 호출하고 그 결과값을 리턴합니다. 이렇게 보면 크게 차이점이 없는 것이 실제로 맞고 비슷한 기능을 하고 있습니다. 하지만 아래의 예를 통해 차이점을 확인하겠습니다. Optional 내에 null을 가진 경우 String .. 2021. 2. 18. 이전 1 2 3 4 5 다음 반응형