목록전체 글 (75)
Kim Jinung

Template method pattern 위 이미지에서 추상 클래스와 이를 상속하는 서브 클래스가 존재한다. AbstarctClass의 templateMethod 메서드 로직은 primitive1, 2 메서드를 실행하는 것이고, 두 메서드는 모두 추상 메서드다. 그리고 이를 상속하는 서브 클래스에서는 primitive1, 2메서드를 구현했다. 서브 클래스에서 templateMethod 메서드를 실행하면 서브 클래스에서 정의한 primitive1, 2 메서드가 templateMethod 메서드의 로직으로 동작한다. 즉 템플릿 메서드 패턴은 추상 클래스에서 공통 로직을 정의하고 서브 클래스에서 세부사항을 구현하는 패턴이다.

AOP(Aspect-oriented programming) 직역하면 관점 지향 프로그래밍이다. 객체 지향은 객체에게 책임과 역할을 부여하고 객체 간의 협력을 통해 시스템을 구성하는 방법이다. 그렇다면 관점 지향의 관점은 무엇을 의미하는가. 관점 지향 프로그래밍은 Cross-cutting concern을 분리해서 모듈성을 증가시키는 패러다임이다. 여기서 Cross-cutting concern은 직역하면 횡단 관심사인데, 각 컴포넌트의 공통 관심사 라는 표현이 의도에 더 적합한 것 같다. 그렇다면 컴포넌트의 공통 관심사란 무엇인가. 프레젠테이션 레이어, 비지니스 레이어, 데이터 액세스 레이어는 각각 목적에 따른 핵심 기능이 존재한다. 그리고 트랜잭션, 보안, 로깅과 같은 부수적인 기능을 필요로 한다. 여기서..
JPA Cache 1st Cache: 트랜잭션 단위 2nd Cache: 앱 내에서 공유하는 캐시 Why need default constructor? JPA는 동적으로 객체를 생성하기 위해서 자바 리플렉션 기능 등을 사용한다. 이를 위해서 기본으로 제공해주어야 한다. Undirectional Mapping vs Bidirectional Mapping 양방향 매핑은 2개의 단방향 매핑이다. 디비 테이블은 외래키 조인을 통해 양방향 관계가 성립된다. 반면 객체는 단뱡향 2개로 양방향 참조를 구현해주어야 한다. 일반적으로 FK를 가지고 있는 객체가 연관 관계의 주인이 되고, 반대편 객체는 읽기 전용으로만 사용한다. mappedBy 파라미터의 역할이 여기에 해당한다. 즉 JPA는 mappedBy로 지정된 필드는..