코틀린, 스프링, jpa, querydsl 환경에서 불변객체를 만드는 방법에 대해 알아보겠다. 자바 위주의 스프링, querydsl, mapstruct 개념이나 사용법을 그대로 받아들이려고 하면 코틀린에서 객체의 불변성이 깨지거나 디폴트값 선언으로 비즈니스 규칙을 깨트리는 생성자들이 생겨날 수 있다. 나의 경우도 그러하였는데 코틀린, 스프링, querydsl, mapstruct 환경에서 객체 불변성을 지키며 디폴트값을 제거하는 방법에 대해 공유하겠다.Querydsl을 통해 매핑받는 객체 디폴트 값 없애기projection.bean, projection.fieldsprojection.bean 방식은 자바 빈 객체 형태만 받을 수 있다. 허나 세터 메서드가 없어도 리플렉션을 통해 매핑이 가능하다고 한다.세터..
 멀티모듈로 헥사고날 구현[1] - 모듈 구성
        
        
          멀티모듈로 헥사고날 구현[1] - 모듈 구성
          멀티모듈로 헥사고날 구현[1] - 모듈 구성멀티모듈로 헥사고날 구현[2] - application layer를 pojo로 구성하기헥사고날 아키텍쳐 패턴을 멀티모듈 방식으로 구성한 방식에 대해 공유해보겠다.아키텍쳐에 기반한 모듈 구성과 그 역할에 대해 1편에서 소개하고,2편에서는 application layer를 pojo 방식으로 구현한 방법에 대해 소개하겠다. 모듈 구성 헥사고날 아키텍쳐를 간단하게 설명하면비즈니스 로직을 갖는 application core와 클라이언트와 소통하는 user interface, 그리고 application이 필요로하는 툴(DB, 3rd-party-api)을 사용하는 infrastructure 영역으로 구분된다.비즈니스 로직은 순수한 프로그래밍 언어로 작성되며 어떠한 라이브..
 자바 예외의 종류와 처리방식
        
        
          자바 예외의 종류와 처리방식
          Error와 Exception자바에서 프로그램이 비정상적인 동작을 일으키는 경우 Error 또는 Exception이 발생하게 된다. ErrorExceptionChecked ExceptionUnChecked Exception복구 여부복구 불가복구 가능예외 종류컴파일 타임- 문법 오류- 타입 체크IOException 런타임- StackOverFlowError- OutOfMemoryError Runtime Exception 하위예외 처리처리불가 컴파일러에 의해 예외 처리 강제예외 처리 강제화 되지 않음 예외 상속관계 Error와 Exception은 모두 Throwable 클래스를 상속 받는다Throwable 클래스는 message와 stackTrace를 담고 있다.message는 Error와 Exception..
 템플릿 메서드 패턴, 전략 패턴, 템플릿/콜백 패턴 비교 분석
        
        
          템플릿 메서드 패턴, 전략 패턴, 템플릿/콜백 패턴 비교 분석
          프레임워크는 개발자가 구현한 코드를 알고리즘의 토대 안에서 동작하도록 한다.이렇게 특정 코드가 다른 코드 속에 침투되어 동작하는 디자인 패턴의 대표적인 예로 템플릿 메서드 패턴과 전략패턴이 있다.템플릿 메서드 패턴과 전략 패턴은 모두 공통 로직에 대한 코드 중복을 해결하는 디자인 패턴 사례이다. 목차템플릿 메서드 패턴전략패턴템플릿 메서드 패턴과 전략패턴의 차이템플릿 콜백템플릿 콜백 패턴 적용 사례 : JdbcTemplate전략패턴과 템플릿 콜백 패턴의 차이 1. 템플릿 메서드 패턴템플릿 메서드 패턴은 상위 클래스에서 전체 알고리즘의 구조를 정의하고, 특정단계를 하위 클래스에서 재정의할 수 있는 디자인 패턴이다.이 패턴을 통해 전체 구조를 변경시키지 않고 특정 단계만 확장시켜나가며 구현할 수 있다.간단한 ..
 컴파일 타임 의존성과 런타임 의존성
        
        
          컴파일 타임 의존성과 런타임 의존성
          객체지향 프로그래밍에서는 객체간의 의존성이 빈번하게 발생한다.의존이란 상위 모듈(호출자)이 기능 수행을 위해 하위 모듈(피호출자)의 자원을 사용하는 것을 말한다.(하위 모듈의 변경사항이 상위 모듈에 영향을 끼침)이러한 의존관계의 설정은 컴파일 타임에 결정되기도 하고 런타임에 결정되기도 한다.컴파일 타임 의존성과 런타임 의존성은 말그대로 어느 시점에 의존성이 결정되느냐의 차이이다. 자바 프로그램이 실행될 때, 자바 파일이 컴파일러에 의해 컴파일 되고이후 jvm의 런타임 영역에 클래스 요소들이 적재된다.컴파일 타임은 컴파일러에 의해 컴파일이 이루어지는 시점을 의미하고,런타임은 클래스파일이 jvm의 런타임 영역에 적재된 이후의 시점을 의미한다.따라서 컴파일 타임 의존성과 런타임 의존성은 아래와 같이 구분할 수..
 [스프링 개념] 동일 타입 빈, 빈 이름 중복, DI 구현 방법
        
        
          [스프링 개념] 동일 타입 빈, 빈 이름 중복, DI 구현 방법
          1. 동일 타입 빈이 여러개인 경우 주입되는 빈 기준@Autowired를 통한 빈 주입 기준은 아래와 같다.타입 기준이름 기준의존 주입 시 해당 클래스 타입의 스프링 빈을 찾고 여러개가 존재하면 이름을 기준으로 빈을 찾는다. 이때 이름이 일치하는 것이 없다면 스프링은 어떤 빈을 주입시킬지 판단할 수 없어 예외를 발생시킨다. 예외는 런타임에 발생된다. 예제. 빈이 존재하지 않는 경우interface Patty { ... }@Componentclass Hamburger(@Autowired val patty: Patty) { ... } 위와 같이 스프링 빈으로 등록되지 않은 빈을 의존 주입 받으려고 하는 경우 구동시점에 에러를 발생시킨다. 예제. 빈이 여러개인 경우위와 동일한 예제에서 아래와 같이 Beef..
 [스프링 개념] IOC, DI와 DIP
        
        
          [스프링 개념] IOC, DI와 DIP
          IOC(Inversion of Control, 제어의 역전)제어의 역전이란 프로그램의 제어 흐름 구조가 뒤바뀌는 것이다.프로그램의 제어권이 개발자가 작성한 코드에 있는 것이 아니라 외부에 존재하는 것을 말한다.이때 프로그램의 제어권에 포함되는 내용은 사용할 객체 결정, 객체 생성, 메서드 호출 등 프로그래밍 언어로 표현할 수 있는 모든 행위를 포함한다. 제어의 역전을 통해 제어권을 외부에 넘긴다는 것은 그에 대한 책임도 넘긴다는 것이다. 예를 들면 IOC 개념이 적용된 DI(의존주입)에서 객체 생성, 의존 객체 결정, 의존 객체 주입은을 프레임워크가 대신하니이에대한 책임도 프레임워크가 갖고 개발자는 객체 생성, 사용 객체 결정에 대한 책임에서 벗어난다.(프로그래밍 코드로 책임을 벗어날 수 있다는 것이고,..
 Hexagonal 아키텍쳐
        
        
          Hexagonal 아키텍쳐
          시스템 구성요소3개의 큰 블록으로 구성User Interface 어떤 유저인터페이스 환경에서라도 실행될 수 있게 하는 것(controller는 웹과 모바일 유저 인터페이스 환경에서 실행을 가능하게 하고, console command는 cli 유저 인터페이스 환경에서 실행을 가능하게 한다.)Application Core비즈니스 로직을 담고 있으며, user interface에 의해 호출됨어떤 종류의 user interace인지에 상관 없이 모두 동일한 결과를 반환함 Infrastrure Coreapplication core와 연결, db, 검색엔진, 써드파티 API와 같은 툴 Tool의 연결 : Port & Adapterapplication이 사용하는 DB, 검색엔진, 웹서버, CLI 콘솔과 같은 외부 ..
