본문 바로가기

JAVA

(133)
JPA JPQL JPQL *가장 단순한 조회방법 **EntityManager.find() **객체 그래프 탐색(a.getB().getC())*나이가 18살이상인 회원을 모두 검색하고 싶다면? JPA를 사용하면 엔티티 객체를 중심으로 개발문제는 검색 쿼리검색을 할때도 테이블이 아닌 엔티티 객체를 대상으로 검색모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능애플리케이션이 필요한 데이터만 DB에서 불러오면 결국 검색조건이 포함된 SQL이 필요 JPA는 SQL을 추상화한 JPQL이라는 객체지향 쿼리 언어 제공SQL과 문법과 유사 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원JPQL은 엔티티 객체를 대상으로 쿼리SQL은 데이터베이스 테이블을 대상으로 쿼리 //검색String jpql ..
JPA 기본 주의엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유엔티티 매니저는 쓰레득간에 공유하면 안된다(사용하고 버려야 한다)-Spring boot에서는 자동으로 생성해줌JPA의 모든 데이터 변경은 트랜잭션 안에서 실행-Spring안에서는 @Transactional 안에서 실행 데이터베이스 스키마 자동생성hibernate.hdm2ddl.auto -create : 기존테이블 삭제 후 다시 생성 (DROP + CREATE)-create-drop : create와 같으나 종료시점에서 테이블 DROP-update : 변경분만 반영(운영DB에서는 사용하면 안됨)-validate : 엔티티와 테이블이 정상매핑되었는지만 확인-none : 사용하지 않음 주의개발초기단계는 create 또는 update테스트 서버..
13. 디자인패턴 정리 디자인 패턴의 정의패턴- 특정 컨텍스트 내에서 주어진 문제에 대한 해결책이다. 컨텍스트- 패턴이 적용되는 상황을 뜻한다. 반복적으로 일어날 수 있는 상황이어야만 한다.문제- 그 컨텍스트 내에서 이루고자 하는 목적을 뜻한다. 하지만 컨텍스트 내에서 생길수 있는 제약조건도 문제에 포함된다.해결책- 우리가 찾아내야 하는것. 누구든지 적용해서 일련의 제약조건 내에서 목적을 달성할 수 있는 일반적인 디자인을 뜻한다. "어떤 컨텍스트 내에서 일련의 제약조건에 의해 영향을 받을 수 있는 문제에 봉착했다면, 그 제약조건 내에서 목적을 달성하기 위한 해결책을 찾아낼 수 있는 디자인을 적용하면된다." 정리스트래티지 패턴- 교환 가능한 행동을 캡슐화하고 위임을 통해서 어떤 행동을 할지를 결정한다. 옵저버 패턴- 상태가 변경..
12. 컴파운드 패턴 컴파운드 패턴 서로 다른 패턴을 섞어 쓰는 것으로 일련의 패턴을 함께 사용하여 다양한 디자인 문제를 해결하는 것 하나의 디자인 문제를 해결하기 위해 여러 패턴을 함께 사용하는 경우가 있다.반복적으로 생길 수 있는 일반적인 문제를 해결하기 위한 용도로 두개 이상의 패턴을 결합해서 사용하는 것 진행과정1. Quackable 인터페이스로 오리들을 만듬2. 거위도 Quackable로 사용가능하게 함(어댑터패턴)3. Quackable의 횟수를 카운터 추가 ( 데코레이터 패턴)4. QuackCounter로 장식되지 않는 Quackable 객체가 있을수 있지해서(추상 팩토리 패턴)5. 오리와 거위, Quackable 객체들을 관리하기 힘들기 시작(컴포지트 패턴) 오리떼 관리 (이터레이터 패턴)6. 소리났을대 연락받고..
11. 프록시 패턴 프록시 패턴 정의- 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴- 다른 객체를 대변하는 객체를 만들어서 주 객체에 대한 접근을 제어할 수 있다. 프록시 패턴을 이용하면 원격 객체라든가 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체에 대한 접근을 제어하는 대변자 객체를 만들수 있다. 프록시에 접근을 제어하는 몇가지 방법- 원격 프록시를 써서 원격 객체에 대한 접근을 제어할 수 있다.- 가상 프록시를 써서 생성하기 힘든 자원에 대한 접근을 제어할 수 있다.- 보호 프록시를 써서 접근 권한이 필요한 자원에 대한 접근을 제어할 수 있다. 원격 프록시의 역할원격객체에 대한 로컬 대변자 역할을 한다. 원격 객체(remote object)- 다른 자바 ..
10.스테이트 패턴 스테이트 패턴 정의- 객체의 내부상태가 바뀜에 따라서 객체의 행동을 바꿀수 있다.객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 설명->상태를 별도로 클래스로 캡슐화한 다음 현재 상태를 나타내는 객체에 행동을 위임하기 때문에, 내부 상태가 바뀜에 따라서 행동이 달라지게 된다. 클래스가 바뀌는 것 같은 결과를 얻는다는 것?클라이언트 입장에서 사용하는 객체의 행동이 완전히 달라질수 있다면 마치 그 객체가 다른 클래스로부터 만들어진 객체러럼 느껴지게된다. 다른 클래스로 변신하는게 아니고 구성을 통해서 여러 상태 객체를 바꿔가면서 사용하기 때문에 이런 결과를 얻을 수 있다. 예) 뽑기기계 package patterns.state; public class GumballMachine { final stat..
9.컴포지트 패턴 컴포지트 패턴=> 객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만들 수 있다.- 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합객체(composite)를 똑같은 방법으로 다룰 수 있다. 객체의 구성과 개별 객체를 노드로 가지는 트리 형태로 객체를 구축할수 있다.이런 복잡구조(composite structure)를 사용하면 복합객체와 개별객체에 대해 똑같은 작업을 적용할 수 있다.즉, 대부분의 경우 복합객체와 개별객체를 구분할 필요가 없어진다. 중첩되어있는 메뉴 그룹과 메뉴 항목을 똑같은 구조내에서 처리할 수 있다.메뉴와 메뉴 항목을 같은 구조에 집어넣어서 부분-전체 계층구조를 생성할수 있다.부분-전체 계층구조란 부분(메뉴 및 메뉴항목)들이 모여있지만, 모든 것을 하나로 묶어서 전..
9.이터레이터 패턴 이터레이터 패턴 정의-컬렉션 구현방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공해준다.-> 내부적인 구현방법을 외부로 노출시키지 않으면서도 집합체에 있는 모든 항목에 일일이 접근할 수 있다.또한 각 항목에 일일이 접근할수 있게 해주는 기능을 집합체가 아닌 반복자 객체에서 책임지게 된다는 것도 장점으로 작용한다. 그러면 집합체 인터페이스 및 구현이 간단해지고 각자 중요한 일만 잘 처리할 수 있으면 된다. 인터페이스 통합바뀌는 부분을 캡슐화하라. 예)식당과 팬케이크 하우스 합병 package patterns.iterator; public class MenuItem { String name; String description; boolean vegetari..