전체 글
베르나르 베르베르 - 『죽음』
◈ 서론 『객체지향의 사실과 오해』에 대한 글을 포스팅한지 얼마 지나지 않아서 다시 한번 책 이야기를 꺼내보게 되었다. 그만큼 짧은 기간 내에 책 한 권(정확히는 두 권 시리즈)을 다 읽었다는 것이 아니라 원래 이 책을 먼저 읽고 있었는데 개발 공부에 대한 강박 때문에 『객체지향의 사실과 오해』를 중간에 읽게 된 것이다. 어쨌든 중요한 내용이 아니니 각설하고, 이 책을 읽게 된 이유는 크게 두 가지가 있다. 하나는 내가 베르나르 베르베르 작가님의 완전 팬이라는 사실이고, 다른 하나는 이 책의 첫 문장 에 매료되었기 때문이다. 군 생활을 베르나르 베르베르 작가님과 더글라스 케네디 작가님, 이 두 분의 작품들과 함께 보냈다고 해도 과언이 아닐 정도로 두 작가님의 작품들을 좋아하던 나로써는 위의 두 가지 이유..
Querydsl
※ 본문은 김영한 선생님의 인프런 '실전! Querydsl' 강의를 듣고 정리한 내용임을 알립니다. ★ Querydsl 설정 관련 - Querydsl 관련 Q파일들은 깃허브에 올리지 않도록 하자. - build.gradle의 Querydsl 설정은 협업이나 여러가지 변동사항이 있을 때 설정이 꼬일 수 있으니 주의하자. ▶ 기본 문법 1. 기본 Q-Type 활용 - Q 클래스 인스턴스를 사용하는 2가지 방법 → 별칭 직접 지정 : QMember qMember = new QMember("m"); → 기본 인스턴스 사용 : QMember qMember = QMember.member; => 같은 테이블을 join하는 경우가 아니라면 기본 인스턴스를 활용하자. 2. 검색 조건 쿼리 where 검색 조건은 .and..
스프링 데이터 JPA
※ 본문은 김영한 선생님의 인프런 '실전! 스프링 데이터 JPA' 강의를 듣고 정리한 내용임을 알립니다. ▶ 스프링 데이터 JPA 공통 인터페이스 JpaRepository 인터페이스 공통 CRUD 제공 제너릭 설정 - 제너릭 타입 T : Entity ID : Entity의 식별자 타입 S : Entity와 그 자식 타입 - 주요 메소드 save(S) : 새로운 Entity는 persist / 이미 있는 Entity는 merge delete(T) : Entity를 하나 삭제함 / 내부에서 em.remove() 호출 findById(ID) : Entity 하나를 조회 / 내부에서 em.find() 호출 getOne(ID) : Entity를 Proxy로 조회 / 내부에서 em.getReference() 호출 ..
조영호 - 『객체지향의 사실과 오해』
◈ 서론 김영한 선생님의 인프런 강의를 열심히 듣던 중, 객체지향 설계를 이해하는 데에 있어서 이 책이 큰 도움을 줄 수 있다는 말에 망설임 없이 이 책을 구매했다. 스스로 코딩을 할 때 이미 잘 설계되어 있는 구조를 가져와서 내 입맛대로 고치는 과정은 잘 해냈지만, 그런 구조를 직접 설계하게 되면 상당히 난감했기에 객체지향 설계에 대해 이론적으로 더 깊이 이해하고 싶었고, 그런 마음이 나를 이 책으로 이끌었다. ◈ 소감 이 책은 객체지향을 여러가지 이야깃거리와 함께 설명해준다는 목적을 가진 매력적인 책이다. 특히, 커피전문점과 이상한 나라의 앨리스, 지하철 노선도, 지도 안에 숨겨져 있는 객체지향 요소를 파헤쳐보는 과정이 흥미롭지 않을 수가 없었다. 그동안 이해가 되건 안되건 주먹구구식으로 코드들이 작..
객체지향 쿼리 언어 (JPQL)
※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ※ JPA가 지원하는 다양한 쿼리 방법들 JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용 (myBatis, SpringJdbcTemplate) ▶ JPQL (Java Persistence Query Language) : 가장 단순한 조회 방법 1. JPQL이 생긴 이유 JPA를 사용하면 Entity 객체를 중심으로 개발 검색을 할 때도 테이블이 아닌 Entity 객체를 대상으로 검색해야 함 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 애플리케이션이 필요한 데이터만 불러오기 위해서는 결국 검색 조건이 포함된 SQL 필요 2. SQ..
값 타입
※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. - Entity 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 - 값 타입 int, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 └> 기본값 타입 (자바 기본 타입, Wrapper 클래스(Integer, Long), String) └> 임베디드 타입 (Embedded Type, 복합 값 타입) └> 컬렉션 값 타입 (Collection Value Type) ▶ 기본값 타입 생명주기를 Entity에 의존 값 타입을 공유하면 안됨 (기본값 타입은 항상 값을 복사할 뿐) Wrapper 클..
Proxy와 연관관계 관리
※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ Proxy Q. Member와 Team의 연관관계가 있을 때, Member만 조회하고 싶은데 굳이 Team도 같이 불러와야만 하는가? em.find() : 데이터베이스를 통해 실제 Entity 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(Proxy) Entity 객체 조회 → Proxy 특징 실제 클래스를 상속받았으므로 실제 클래스와 겉모양이 같음 사용하는 입장에서는 실제 객체와 Proxy 객체를 구분하지 않고 사용해도 됨 Proxy 객체는 실제 객체의 참조(target)를 보관 Proxy 객체를 호출하면 Proxy 객체는 실제 객체의 메소드 호..
Entity Mapping
※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ Entity Mapping의 종류 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn ▶ @Entity @Entity가 붙은 클래스는 JPA가 관리하는 Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의사항1. 기본 생성자 필수 (파라미터 없는 public 또는 protected 생성자) 주의사항2. final 클래스, enum, interface, inner 클래스 사용 불가 주의사항3. 저장할 필드에도 final 사용 불가 ※ ..
영속성 관리
※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ★ JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) 영속성 컨텍스트 ▶ 영속성 컨텍스트 JPA를 이해하는 데에 있어서 가장 중요한 용어! "Entity를 영구 저장하는 환경" 논리적 개념으로써, 눈에 보이지 않음 EntityManager를 통해서 영속성 컨텍스트에 접근할 수 있음 ★ entityManager.persist(entity); → 사실 entity를 DB에 저장하는 것이 아니라, 영속성 컨텍스트에 저장하는 것! ※ Entity의 생명주기 - 비영속 (new/transient) : 영속성 컨텍스트와 전혀 관..