Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags more
Archives
Today
Total
관리 메뉴

말하는 햄zzi

Optional<T> / JPA 본문

Java/Spring

Optional<T> / JPA

대양파 2023. 7. 13. 16:25
728x90

Optional

 

: java8버전에 소개된, NULL이 될 가능성이 존재하는 데이터를 감싸 

NULLPointExceotion이 발생하기 전 참조 객체가 NULL인지 아닌지 여부 확인 할 수 있도록 도와주는 객체

 

 

Optional 클래스 특징

 

값 존재 유무 나타내는 컨테이너

Optional은 값이 존재할 수도 있고 존재하지 않을 수도 있는 컨테이너 역할

값이 존재하는 경우, Optional 객체는 해당 값을 감싸고 0

값이 존재하지 않는 경우, Optional 객체는 비어있는 상태

 

- null 대신 Optional 사용:

Optional은 null 대신 사용할 수 있는 안전한 대안을 제공

null을 직접 다루는 것보다 Optional을 사용하여 코드의 가독성과 안정성을 높일 수 0

 

- 메서드 체이닝을 통한 안전한 값 접근:

Optional은 메서드 체이닝을 통해 안전하게 값에 접근할 수 있는 기능을 제공

이를 통해 null 체크를 간단하게 처리, null 예외를 방지할 수 0

 

 

Optional 클래스 주요 메서드

 

of(value)

주어진 값으로 Optional 객체를 생성 / 값이 null이면 NullPointerException을 발생

 

ofNullable(value) :

주어진 값으로 Optional 객체를 생성 / 값이 null이라면 비어있는 Optional 객체를 생성

 

isPresent() :

Optional 객체 내에 값이 존재하는지 여부를 확인

 

get() :

Optional 객체 내의 값을 반환 / 값이 존재하지 않으면 NoSuchElementException을 발생

 

orElse(other) :

Optional 객체 내의 값이 존재하면 해당 값을 반환/ 값이 존재하지 않으면 주어진 기본값(other)을 반환

 

 

 

JPA

 

ex)

모든 학생 정보 읽어오기

 

AppController

@GetMapping("read-all")
public @ResponseBody List<StudentDto> readAll() {
    this.service.readStudentAll();
    return this.service.readStudentAll();
}

AppService

// READ ALL
public List<StudentDto> readStudentAll() {
		// 새로운 StudentDto 객체를 저장할 리스트 생성
    List<StudentDto> studentDtoList = new ArrayList<>();

		// studentRepository에서 모든 StudentEntity를 가져와서 반복
    for (StudentEntity studentEntity : this.studentRepository.findAll()) {
        StudentDto studentDto = new StudentDto();
				
				//StudentDto에 StudentEntity의 필드 값을 복사
        studentDto.setId(studentEntity.getId());
        studentDto.setName(studentEntity.getName());
        studentDto.setEmail(studentEntity.getEmail());
				
				// StudentDto를 studentDtoList에 추가
				studentDtoList.add(studentDto);
    }
    return studentDtoList;
}

 

ex)

DTO 객체 정적 팩터리 메소드 패턴 활용

 

student Dto

import com.example.jpa.entities.StudentEntity;
import lombok.Data;

@Data
public class StudentDto {

    private Long id;        // Entity.id
    private String name;    // Entity.name
    private String email;   // Entity.email

    // 정적 팩토리 메소드 패턴
    public static StudentDto fromEntity(StudentEntity studentEntity) {
        StudentDto dto = new StudentDto();
        dto.setId(studentEntity.getId());
        dto.setName(studentEntity.getName());
        dto.setEmail(studentEntity.getEmail());
        return dto;
    }

}

> 정적 팩토리 메소드 패턴 < Static Method Factroy Pattern>

객체 생성 추상화, 클라이언트에게 직접적 생성방법 제공 

정적 메서드를 통해 객체 생성/ 반환 방식 채택

 

AppService

// READ ALL
    public List<StudentDto> readStudentAll() {
        List<StudentEntity> studentEntityList = this.studentRepository.findAll();
        List<StudentDto> studentDtoList = new ArrayList<>();

        for (StudentEntity studentEntity : studentEntityList) {
            studentDtoList.add(StudentDto.fromEntity(studentEntity));
        }
        return studentDtoList;
    }
728x90
반응형

'Java > Spring' 카테고리의 다른 글

HTTP  (0) 2023.07.23
Skeleton 프로젝트  (0) 2023.07.13
IOC(Inversion of Control)-(2)  (0) 2023.07.13
IOC(Inversion of Control)-(1)  (0) 2023.07.12
MyBatis  (0) 2023.07.11