일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- JPA
- Docker cache
- 아이템 27
- 아이템 24
- 아이템31
- GitHub Actions
- 아이템 26
- Domain Driven Design
- jdbc
- Github Actions Cache
- cicd
- Spring Batch
- 이펙티브자바
- criteriaquery
- 아이템 25
- 아이템 22
- 최범균
- 아이템29
- 아이템 28
- 일ㅊ
- JPQL
- 자바 ORM 표준 JPA 프로그래밍
- java
- Docker Layer
- Immutable Object
- 객체지향 쿼리 언어
- 도메인 주도 개발 시작하기
- ddd
- 아이템30
- 아이템 23
- Today
- Total
목록java (11)
코딩은 마라톤
오랜만에 블로그 작성하네요,,,회사 적응 중이라 개인 공부를 하기 쉽지 않네요.. 는 변명이고 퇴근하고 집에 오면 너무 졸려요...ㅜ 뜬금없이 작성하는 이유는? 어제 코드 리뷰를 받다가 제가 이러한 코드를 작성했습니다.// 예시public static Computer of(Cpu cpu) { cpu = cpu != null ? cpu : gpu; // gpu는 cpu와 다른 예시 값입니다. ...} 코드 작성할 때"새로운 객체 생성하는 것보다 매개변수 객체를 재사용 하는 것이 낫겠군..!" 과 같이 생각하고 짯는데 메소드 개발 시 매개변수에 값을 할당하는 로직은 위험합니다참조 객체에 메소드 실행 후 set처리 되어 값 조작이 발생 가능합니다 위와 같은 코드리뷰를 받았습니다. 곰곰이 생각..
이번 글의 주제는 불변객체(Immutable Object)이다. 이 주제 역시 면접에서 질문을 받았었다. 면접관님 : 불변객체가 뭐예요? 나 : 내부 데이터를 변경할 수 없는 객체를 의미합니다.. 면접관님 : 불변객체를 쓰는 이유가 뭐예요? 나 : 객체지향의 특징 중 캡슐화때문이라고 할 수 있습니다. 캡슐화를 통해 객체는 외부에서 접근되지 않고 ~~~~~ 위와 같이 답변을 했지만,, 사실 불변객체가 말 그대로 "내부 데이터를 변경하지 못하는 객체"라고만 알고 있어서 이번 기회에 알아보고자 한다 ! 불변 클래스 불변객체를 알아보기 전에 불변 클래스부터 알아보자 ! 불변클래스란 인스턴스 내부의 값을 수정할 수 없는 클래스를 말한다. 그렇다면 불변클래스를 만드는 방법은 뭐가 있을까? 객체의 상태를 변경하는 메..
최근 프로그래머스를 풀던 중 모르는 메서드가 있었다,, (https://school.programmers.co.kr/learn/courses/30/lessons/42576) for (String c : completion) { hashMap.put(c, hashMap.getOrDefault(c, 0) + 1); } 바로 "getOrDefault()" 메서드이다. getOrDefault(Object key, V defaultValue) 자바 공식 문서에서는 위와 같이 설명하고 있다. 아래 코드는 Map 인터페이스에 구현된 default 코드이다. default V getOrDefault(Object key, V defaultValue) { V v; return (((v = get(key)) != null)..
임베디드 타입(복합 값 타입) 새로운 값 타입을 직접 정의해서 사용할 수 있다. 이를 임베디드 타입이라 한다. @Entity public class Member { ... // 집 주소 표현 private String city; private String street; private String zipcode; ... } 위 코드에서 회원 엔티티의 집 주소를 나타낼 때, 모든 정보를 풀어서 저장한다. 이는 객체지향적이지 않으며 응집력만 떨어뜨린다. 따라서 풀어쓰지 않고 [집주소]를 가지도록 임베디드 타입을 사용한다. @Entity public class Member { @Embedded Address homeAddress; // 집 주소 ... } @Embeddable public class Addres..
8.1 프록시 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. 회원 : 팀 = N : 1 회원과 팀의 정보를 출력할 때는 회원과 연관된 팀의 이름을 출력하기 때문에 둘 다 사용한다. 하지만 회원의 정보만을 출력할 때는 연관된 팀 엔티티는 전혀 사용하지 않는다. (함께 조회하는 것은 비효율적이다.) 따라서 JPA는 이런 문제를 해결하고자 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공한다. 이것을 "지연 로딩" 이라 한다. 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이를 "프록시 객체" 라 한다. 8.1.1 프록시 기초 Member member = em.find(Member.class, "member..
7.1 상속 관계 매핑 7.1.1 조인 전략 _ 각각의 테이블로 변환 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략 조회할 때 조인을 자주 사용한다. 타입을 구분하는 컬럼을 추가해야한다. (객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없기 때문) // 부모 클래스 @Entity // 부모 클래스에 @Inheritance를 사용한다. // 조인 전략을 사용하므로 InheritanceType.JOINED를 사용한다. @Inheritance(strategy = InheritanceType.JOINED) // 부모 클래스에 구분 컬럼을 지정한다. // 이 컬럼(DTYPE)을 통해 저장된 자식 테이블을 구분할 수 있다. @Dis..
6.1 다대일 6.1.1 다대일 단방향 [N:1] 회원 엔티티(Member)와 팀 엔티티(Team)는 다대일 관계이다. @Entity public class Member { ... @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... } @Entity public class Team { ... @Id @Column(name = "TEAM_ID") private Long id; ... } 회원은 Member.team을 통해 팀 엔티티를 참조할 수 있다. 팀에는 회원을 참조하는 필드가 없기 때문에 다대일 단방향 연관관계다. 6.1.2 다대일 양방향 [N:1] @Entity public class Member { ... @ManyToOne @Join..
목표 : 객체의 참조와 테이블의 외래 키를 매핑하는 것 단방향 연관관계 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. - 객체 연관관계 회원 객체와 팀 객체는 단방향 관계 Member.team 필드로 팀 객체와 연관관계를 맺는다. member -> team의 조회는 가능, 반대는 불가 - 테이블 연관관계 회원 테이블은 TEAM_ID 외래키로 팀 테이블과 연관관계 맺는다. 회원과 팀 테이블은 양방향 관계 (회원, 팀 둘다 조인 가능) - 객체 연관관계와 테이블 연관관계 정리 객체는 참조(주소)로 연관관계를 맺는다. 참조를 사용하는 객체의 연관관계는 단방향이다. 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야 한다. 테이블은 외래 키로 연관관계를 맺는다. 외래 키를 사용하는..