분류 전체보기

    [Mybatis] Param 어노테이션 없이 여러 파라미터를 넣을 때 null 오류가 발생하는 경우

    [Mybatis] Param 어노테이션 없이 여러 파라미터를 넣을 때 null 오류가 발생하는 경우

    Mybatis 에서 한 메서드에 여러 파라미터를 넣을 경우, xml sql에서 파라미터를 구분지을 수 있게 @Param 어노테이션을 제공한다. @Mapper public interface FooRepository { List selectBars(@Param("name") String name, @Param("code") String code); } 어떤 로컬 PC에서는 @Param을 생략해도 잘 동작하나, 일부 로컬 PC에서는 아래와 같은 에러가 발생한다. org.mybatis.spring.MyBatisSystemException: null 에러가 발생한 PC에서는 intellij의 build tool을 gradle이 아닌 intellij에서 제공하는 gradle을 사용하고 있었기 때문이었다. Intel..

    [OOP] 우아한 객체지향 _ 의존성을 이용해 설계 진화시키기

    [OOP] 우아한 객체지향 _ 의존성을 이용해 설계 진화시키기

    객체지향 스터디를 준비하던 중, 객체지향의 사실과 오해의 저자이신 조영호 님의 객체지향 세미나를 보게 되었다. 자료 영상 : https://www.youtube.com/watch?v=dJ5C4qRqAgA slideshare : https://www.slideshare.net/baejjae93/ss-150432699 우아한 객체지향 2019년 6월 우아한 Tech 세미나 우아한 객체지향 www.slideshare.net 코드 1단계 : https://github.com/eternity-oop/Woowahan-OO-01-object-reference 2단계 : https://github.com/eternity-oop/Woowahan-OO-02-domain-service 3단계 : https://github...

    [Design Pattern] Factory Method Pattern (팩토리 메서드 패턴)

    [Design Pattern] Factory Method Pattern (팩토리 메서드 패턴)

    팩토리 메서드 패턴 (Factory Method Pattern) 구체적으로 어떤 인스턴스를 만들지는 서브클래스가 정한다. 인스턴스를 생성하는 책임을 구체 클래스가 아닌 인터페이스의 메서드로 감싸게 된다. 다양한 구현체(Product)가 있고, 그 중에서 특정한 구현체를 만들 수 있는 다양한 팩토리(Creator)를 제공할 수 있다. 장점 기존에 인스턴스 생성 코드를 건드리지 않고 비슷한 류의 인스턴스 생성 코드를 만들 수 있어 OCP를 보장한다. (Creator와 Product의 느슨한 결합) 단점 클래스가 많아진다. 예시 (as-is) public class Ship { private String name; private String color; private String logo; public Str..

    [Design Pattern] Singleton Pattern (싱글톤 패턴)

    [Design Pattern] Singleton Pattern (싱글톤 패턴)

    싱글톤 패턴 (Singleton Pattern) 인스턴스를 오직 한개만 제공하는 클래스 시스템 런타임, 환경 세팅에 대한 정보 등 인스턴스가 여러 개일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한 개만 만들어 제공하는 클래스가 필요하다. 예시 (as-is) public class Settings { } public class App { public static void main(String[] args) { Settings settings = new Settings(); Settings settings1 = new Settings(); System.out.println(settings != settings1); } } 싱글톤 패턴을 적용하려면, 위 settings != settings1에서..

    [Spring] 서비스는 트랜잭션, 도메인의 순서 보장 역할만 제공한다

    [Spring] 서비스는 트랜잭션, 도메인의 순서 보장 역할만 제공한다

    서론 스프링에서는 @Controller, @Service, @Repository 등의 애노테이션을 사용하여 웹 계층을 분리하고 있다. 이 중 @Service는 사실상 @Component와 기능 차이가 없지만, 스프링에게 해당 클래스가 서비스 레이어 클래스라는 것을 알리는 역할을 한다고 한다. 그렇다면 Service Layer는 무슨 역할을 하는 걸까. 3 tier 아키텍처 보통 스프링 프로젝트는 3 tier 방식으로 구성한다. 프레젠테이션 계층 화면에 보여주는 기술을 사용하는 영역. 컨트롤러에서 사용자의 요청에 맞는 응답처리를 진행하며, HTML엔진(thymeleaf), HTML등이 담당하는 영역. Spring MVC 객체로, 컨트롤러, DispatcherServlet, 컨트롤러, 뷰, 모델이 포함된다...

    객체지향의 사실과 오해

    객체지향의 사실과 오해

    Summary 생각 대학교에서 객체지향 수업을 들을 때, 보통 절차지향과 비교한다. 절차지향은 코드를 작성한 순서대로 프로그램이 진행되고, 객체지향은 객체와 객체 간의 상호작용을 통해 프로그램이 진행된다고. 그러면서 곧바로, 현실 물체를 프로그램 코드인 객체로 변신시키는 게 객체지향의 핵심이고, 원리는 캡슐화, 상속, 추상화, 다형성이 있고, 그 뒤 곧바로 c++의 문법에 대해 배웠던 것 같다. 결국 대학교를 졸업하고 한참 뒤에야, 이 책을 읽으면서 객체지향이란 무엇인가를 곰곰이 되뇌이게 되었다. 본 책을 통해서 간단히 객체지향이 왜 나오게 되었는가, 객체지향을 왜 쓰는가, 객체지향 방식으로 애플리케이션을 설계하려면 어떻게 해야하는 가 등을 알게 되었다. 마치 수학 공식처럼, 단순히 객체지향의 원리를 달..

    [Design Pattern] Composite Pattern (컴포지트 패턴)

    [Design Pattern] Composite Pattern (컴포지트 패턴)

    출처 : https://www.inflearn.com/course/디자인-패턴 컴포지트 패턴 (Composite Pattern) 그룹 전체와 개별 객체를 동일하게 처리할 수 있는 패턴. 클라이언트 입장에서는 전체나 부분이나 모두 동일한 컴포넌트로 인식할 수 있는 계층 구조를 만든다. (Part-Whole Hierarchy) 장점 복잡한 트리 구조를 편리하게 사용할 수 있다. 다형성과 재귀를 활용할 수 있다. 클라이언트 코드를 변경하지 않고 새로운 엘리먼트 타입을 추가할 수 있다. 단점 트리를 만들어야 하기 때문에 (공통된 인터페이스를 정의해야 하기 때문에) 지나치게 일반화 해야 하는 경우도 생길 수 있다. 예시 (as-is) public class Item { private String name; pri..

    [Design Pattern] 전략 패턴 (Strategy Pattern)

    출처 : https://www.inflearn.com/course/디자인-패턴 전략 패턴 (Strategy Pattern) 여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴. 클라이언트가 직접 컨텍스트에서 사용할 알고리즘을 선택한다. 생성자에서, 혹은 특정 Operator에서 알고리즘을 선택해서 넘겨줄 수 있다. 장점 새로운 전략을 추가하더라도 기존 코드를 변경하지 않는다. OCP를 완벽하게 지키고 있다. 상속은 한 객체만 가능한데, 이 대신 위임을 사용할 수 있다. 런타임에 전략을 변경할 수 있다. 단점 복잡도가 증가한다. 클라이언트 코드가 구체적인 전략을 알아야 하기 때문에, 의존성이 생긴다. 예시 (as-is) public class BlueLightRedLight { private int..

    [Spring] Async

    참조 : https://www.baeldung.com/spring-async 1. 개요 Spring에서 제공하는 비동기 작업과 애노테이션 @Async에 대해서 알아본다. @Async를 Bean의 메서드에 선언하는 것만으로 해당 메서드는 별도의 쓰레드에서 수행된다. 즉, @Async가 선언된 메서드를 호출하는 객체는 메서드가 끝날 때까지 기다리지 않는다. 2. Async 옵션 켜기 @Configuration과 @EnableAsync를 사용하여 Async 옵션을 켤 수 있다. @Configuration @EnableAsync public class SpringAsyncConfig { // ... } @EnableAsync의 속성 부여를 통해 다양한 설정이 가능하다. annotation : @EnableAsy..

    [Java] Collection의 of 사용 시 주의할 점

    [Java] Collection의 of 사용 시 주의할 점

    Java 9부터 사용할 수 있는 of를 통해 Map, Set, List 등의 Java Collection을 손쉽게 초기화할 수 있습니다. 1. value에 null이 들어가면 안된다. 다만, Map.of(), Set.of(), List.of() 등을 사용할 때, value에 null을 넣게 되면 NullPointerException이 발생합니다. public class CollectionOfTest { @Test(expected = NullPointerException.class) public void mapOfTest() { Map map = Map.of("key1", null); // NullPointerException 발생 } @Test(expected = NullPointerException.c..