728x90

개발/Java & Kotlin 134

[Java] 자바와 객체 지향 (2)

스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 간단한 정리. https://devhooney.tistory.com/74 [Java] 자바와 객체 지향 (1) 스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 간단한 정리. 1. 객체 지향의 4대 특성 - 캡슐화: 정보 은닉 - 상속: 재사용 - 추상화: 모델링 - 다형성: 사용 편의 2. 클래스 : 객체 = 붕어 devhooney.tistory.com 이 포스트와 이어지는 내용 1. 다형성: 사용편의성 - 객체 지향에서 다형성은 오버라이딩, 오버로딩으로 대표된다. - 오버라이딩, 오버로딩의 차이 1. 오버라이딩은 같은 메소드, 같은 인자 목록으로 상위 클래스의 메소드를 재정의 2. 오버로딩은 같은 메소 이름, 다른 인자 목록으로 다수의 ..

[JPA] 스프링 데이터 - 나머지 기능들

김영한님의 실전! 스프링 데이터 JPA 정리 1. Specifications(명세) - 도메인 주도 설계(Domain Driven Design)는 SPECIFICATION(명세)라는 개념을 소개 - 스프링 데이터 JPA는 JPA Criteria를 활용해서 이 개념을 사용할 수 있도록 지원 2. 술어(predicate) -> 실무 사용 X - 참 또는 거짓으로 평가 - AND OR 같은 연산자로 조합해서 다양한 검색조건을 쉽게 생성 예) 검색 조건 하나하나 - 스프링 데이터 JPA는 org.springframework.data.jpa.domain.Specification 클래스로 정의 참고 Querydsl 사용! 3. Query By Example - 실무에서 사용하기에 매칭 조건이 너무 단순함. - LE..

[Java] 자바와 객체 지향 (1)

스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 간단한 정리. 1. 객체 지향의 4대 특성 - 캡슐화: 정보 은닉 - 상속: 재사용 - 추상화: 모델링 - 다형성: 사용 편의 2. 클래스 : 객체 = 붕어빵틀 : 붕어빵 X!!!! 클래스 객체명 = new 클래스(); - 붕어빵틀과 붕어빵이 아닌 개념과 실체로 설명했다. 예전에 배웠을 때 보다 훨씬 이해가 잘되는 문장이다. 3. 추상화 : 모델링 - 추상화는 모델링이다. 객체 지향의 추상화는 곧 모델링이다. - 객체: 세상에 존재하는 유일무이한 사물 - 클래스: 분류, 집합 같은 속성과 기능을 가진 객체를 총칭하는 개념 - 추상화: 구체적인 것을 분해해서 관심 영역(애플리케이션 경계)에 있는 특성만 가지고 재조합하는 것 = 모델링 애플리케이션 경..

[JPA] 스프링 데이터 - 스프링 데이터 JPA 분석

김영한님의 실전! 스프링 데이터 JPA 정리 1. 스프링 데이터 JPA 구현체 분석 - 스프링 데이터 JPA가 제공하는 공통 인터페이스의 구현체 - org.springframework.data.jpa.repository.support.SimpleJpaRepository - @Repository 적용: JPA 예외를 스프링이 추상화한 예외로 변환 - @Transactional 트랜잭션 적용 (1) JPA의 모든 변경은 트랜잭션 안에서 동작 (2) 스프링 데이터 JPA는 변경(등록, 수정, 삭제) 메소드를 트랜잭션 처리 (3) 서비스 계층에서 트랜잭션을 시작하지 않으면 Repository에서 트랜잭션 시작 (4) 서비스 계층에서 트랜잭션을 시작하면 Repository는 해당 트랜잭션을 전파 받아서 사용 (5..

[Spring] 프레젠테이션 층의 설계와 구현

1. 프레젠테이션 층이란 - 프레젠테이션 층은 사용자 인터페이스와 컨트롤러를 말한다. - 프레젠테이션 층에서는 스프링MVC와 스프링 웹 플로를 이용할 수 있다. 2. 스프링 MVC와 REST - URL을 자유롭게 결정할 수 있다. - HTTP 메소드에 따라 실행할 처리를 전환할 수 있다. - URL의 일부를 쉽게 추출해 사용할 수 있다. 3. 스프링 MVC의 구성 요소 이름 역할 DispatcherServlet - 프론트 컨트롤러를 담당 - 모든 HTTP 요청을 받아들여 그 밖의 오브젝트 사이의 흐름을 제어 - 기본적으로 스프링 MVC의 DispatcherServlet 클래스를 그대로 적용 Handler Mapping - 클라이언트의 요청을 바탕으로 어느 컨트롤러를 실행할 지 결정 Model - 컨트롤러..

[JPA] 스프링 데이터 - 확장 기능

김영한님의 실전! 스프링 데이터 JPA 정리 1. 사용자 정의 리포지토리 구현 - 스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동 생성 - 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많음 - 다양한 이유로 인터페이스의 메소드를 직접 구현하고 싶다면? (1) JPA 직접 사용(EntityManager) (2) 스프링 JDBC Template 사용 (3) MyBatis 사용 (4) 데이터베이스 커넥션 직접 사용 등등.. (5) Querydsl 사용 - 사용자 정의 인터페이스 public interface MemberRepositoryCustom { List findMemberCustom(); } - 사용자 정의 인터페이스 구현 클래스 ..

[JPA] 스프링 데이터 - 쿼리 메소드 기능

김영한님의 실전! 스프링 데이터 JPA 정리 1. 메소드 이름으로 쿼리 생성 - 메소드 이름을 분석해서 JPQL 쿼리 생성 - 이름과 나이를 기준으로 회원을 조회하려면? // 순수 JPA public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > :age") .setParameter("username", username) .setParameter("age", age) .getResultList(); } // 스프링 데이터 JPA public interface MemberReposit..

[JPA] 스프링 데이터 - 공통 인터페이스 기능

김영한님의 실전! 스프링 데이터 JPA 정리 1. 공통 인터페이스 설정 - JavaConfig 설정 - 스프링 부트 사용 시 생략 가능 @Configuration @EnableJpaRepositories(basePackages = "jpabook.jpashop.repository") public class AppConfig {} - 스프링 부트 사용 시 @SpringBootApplication 위치를 지정(해당 패키지와 하위 패키지 인식) - 만약 위치가 달라지면 @EnableJpaRepositories 필요 - 스프링 데이터 JPA가 구현 클래스 대신 생성 - org.springframework.data.repository.Repository를 구현한 클래스는 스캔 대상 -> memberReposito..

[JPA] 객체지향 쿼리 언어 - 중급 문법

1. 경로 표현식 - .(점)을 찍어 객체 그래프를 탐색하는 것 - 경로 표현식 특징 (1) 상태 필드(state field) 경로 탐색의 끝, 탐색 X (2) 단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색 O (3) 컬렉션 값 연관 연관 경로: 묵시적 내부 조인 발생, 탐색 X (4) FROM 절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색 가능 - 명시적 조인, 묵시적 조인 (1) 명시적 조인: join 키워드 직접 사용 select m from Member m join m.team t (2)묵시적 조인: 경로 표현식에 의해 묵시적으로 SQL 조인 발생(내부 조인만 가능) select m.team from Member m - 실무 조언 (1) 가급적 묵시적 조인 ..

[JPA] 객체지향 쿼리 언어 - 기본 문법

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. JPQL - JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. - JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. - JPQL은 결국 SQL로 변환된다. 2. 문법 - select m from Member as m where m.age > 18 - 엔티티와 속성은 대소문자 구문 O(Member, age) - JPQL 키워드는대소문자 구분 X(SELECT, FROM, where) - 엔티티 이름 사용, 테이블 이름이 아님(Member) - 별칭은 필수(m) (as는 생략 가능) TypeQUery, Query - TypeQuery: 반환 타입이 명확할..

728x90