본문 바로가기

Spring

Spring -03

Gradle
- 의존성 관리의 다양한 방법을 제공하는 기술
- maven은 xml을 사용, gradle은 groovy라는 언어를 사용
- 오픈소스 빌드 도구 (개발시 자동으로 빌드를 도와주는 프로그램)

ORM(Object-Relational Mapping)
- 객체와 관계형 DB를 매핑
- 객체를 마치 자바 컬렉션에 저장할 수 있고, 적절한 SQL을 생성해서 DB에 저장 //DB도 자바를 이용하여 사용 Hibernate

JPA(Java Persistance API)
- 자바의 ORM 기술 표준
- 객체를 DB에 저장하고 관리할 때 개발자가 직접 SQL을 작성하지 않아도 됨
- JPA가 개발자 대신 적절한 SQL을 생성해서 DB에 전달하고 객체를 자동으로 Mapping
- 스프링 부트는 ORM 프레임워크(Hibernate)가 탑제되어 있음

lombok
- 테이블을 구조화한 클래스(Entitity, DTO, VO)에서 getter/setter 메소드와 toString(),
equals(), hashCode()등의 메소드를
 어노테이션으로 사용할 수 있도록 해주는 라이브러리
ex)
@Data: 자동으로 getter/setter를 지원
@AllArgsConstructor: 모든 매개변수를 지원하는 생성자를 지원
@NoArgsConstructor: 매개변수를 갖지 않는 생성자를 지원
@Entity: DB 테이블과 연결
@Builder: 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른
표현의 결과를 만들 수 있도록 패턴을 사용(체이닝 -> 함수형 프로그래밍)
//메소드를 .을 이용하여 계속연결해서 사용할 수 있게 해줌

JPA Hibernate Entity 생성하기
-어노테이션
@Table: DB테이블의 이름을 명시(테이블명과 클래스명이 동일한 경우 생략)]
    admin_user(DB) == AdminUser(Java)
    스네이크 표기         카멜 표기

//테이블 동일하게 맞춰주고 싶을떄
//@Table(name="admin_user")

@Entity: DB의 테이블을 뜻하는 클래스
@Id:primary key를 뜻함
@GeneratedValue: primary key의 키 생성 전략(Strategy)을 설정할 때 사용
@Cloumn: DB 필드명을 명시(DB필드명과 클래스 팔드명이 동일한 경우 생략)
@Transient: DB에는 존재하지 않는 필드에 명시


//sql사용하지 않고 java객체를 사용해서 연결하는 api --> Hibernate
JPA Repository
- Spring Data JPA의 구현체인 Hibernate를 이용하기 위한 API
- JpaRepository의 제네릭 타입으로는 <Entity,PK타입>을 지정
- 자동으로 스프링의 빈(Bean)으로 등록됨
- 꼭 존재해야 하는 것은 아님!

    public interface 인터페이스명 extends JpaRepository<테이블명,PK타입>{
        SQL 쿼리를 대신할 메소드 정의
    }

Test(Junit)
- Java의 단위 테스팅 도구
- Test Class를 그대로 남김으로써 추후 개발자들에게 테스트 방법 및 클래스의 History를 넘겨줄 수 있음
- @Test


DI(Dependenct Injection): 의존성종속
- 클래스간의 의존관계를 스프링 컨테이너가 자동으로 연결해주는 것
예)클래스 A가 클래스 B,C와 상호작용을 한다면 객체A는 객체B,C와 의존관계다!

    A   --------------------------------------->    B
                                                    C

DI가 필요한 이유: 객체간의 의존성

DI유형(의존관계에 있는 Bean을 주입하는 방법)
1.  Setter Injection
    -setter/getter 메소드의 setter메소드를 통해 의존관계에 있는 객체를 주입
2.  Constructor Injection
    -생성자를 통해 의존관계에 있는 객체를 주입
3. Method Injection
    -메소드를 통해 의존 관계에 있는 객체를 주입


@Autowired
- 스프링 ID에서 사용하는 어노테이션
- 스프링에서 비어있는 인스턴스가 생성된 이후 @Autowired를 설정한 메소드가 자동으로 호출되고       //빈 인스턴스
 인스턴스가 자동으로 주입


 ✅Optional<T>   //모든타입 커버 가능
 - Integer나 Double 클래스와 같이 'T' 타입의 객체를 포장하는 WrapperClass
 (Optional의 인스턴스는 모든 타입의 참조 변수를 저장 가능)
 -NullPointerException 예외를 예방하기 위한 좋은 방법
 -시작(객체생성) -> 중간(Optional 객체 반환) ->끝(체이닝 종료) 3단계로 구현
 -함수형 프로그래밍, 메소드 체이닝을 가능하게 함

 객체생성
 - of()
    null이 아닌 명시된 값을 저장한 optional 객체를 반환
    null이 저장될 경우, NullPointException 예외를 발생시킴
- ofNullable()
    null이 아닌 명시된 값을 저장한 optional 객체를 반환
    null이 저장될 경우, 비어있는 optional 객체를 반환
- empty()
    비어있는 optional 객체를 반환

중간처리
- filter()
   입력값이 참이면 기존 optional 객체를 그대로 반환
   입력값이 거짓이면 비어있는 optional 객체를 반환
    ✅입력값은 functional interface로 매개변수를 특정 연산으로 체크하여 boolean
    값을 반환함(특정 연산이란 람다식으로 표현함)
- map()
    optional 객체에 저장된 값을 map() 내의 함수를 통해 반환하고, 변환값을 담은
    optional 객체에 반환

끝
-ifPresent()
    optional 객체가 비어있지 않다면, 저장된 값을 가지고 ifPresent() 내의 연산을 수행
    optional 객체가 비어있다면, 그대로 반환(아무 연산 수행X)

-isPresent()
    optional 객체가 비어있지 않다면, true를 반환
    optional 객체가 비어있다면, false를 반환

-get()
    optional 객체가 비어있지 않다면, 저장된 값을 꺼내 반환
    optional 객체가 비어있다면, NoSuchElementException을 반환

-orElse()
    optional 객체가 비어있지 않다면, 그대로 반환(아무 연산 수행X)
    optional 객체가 비어있다면, 기본값으로 제공할 객체를 지정

-orElseget()
    optional 객체가 비어있지 않다면, 그대로 반환 (아무 연산 수행X)
    optional 객체가 비어있다면, 기본값으로 제공할 공급자 함수를 지정(람다 표현식의 결과값 반환)

-orElseThrow()
    optional 객체가 비어있지 않다면, 그대로 반환 (아무 연산 수행X)
    optional 객체가 비어있다면, 기본값으로 제공할 공급자 함수를 지정하여 예외 Throw

🍎orElse는 optional 객체가 비어있지 않던, 비었던 무조건 실행!
🍎orElseGet은 비어있을 때만 실행!

'Spring' 카테고리의 다른 글

이론적인 공부  (0) 2023.04.13
MyBatis  (0) 2023.03.25
post, get 방식  (0) 2023.02.23
MVC 패턴  (0) 2023.02.23
Mapping  (0) 2023.01.09