*인프런 강의 중 일부 예제 코드를 발췌하였으며, 주석을 통해 학습 이해도를 높이는 방향으로 스터디하고 있습니다.
인터페이스 개발이 왜 필요한가?
The point is to separate the API (what to do) from the implementation (how to do it).
요지는 역할과 구현을 구분하는 것입니다.
백엔드 개발 시에 자주 접할 상황을 예시로 들겠습니다.
DB 방식(RDB or NoSQL)이 정해지지 않은 상황인데 개발은 기간내로 해야하는 상황입니다.
난감하겠지만 이때 인터페이스 설계를 통해 개발을 진행할 수 있습니다.
DB에 접근하고 도메인 객체를 DB에 저장관리하는 리포지토리 인터페이스를 우선 구축하고, 별도 구현체 생성하여 가벼운 메모리 기반의 데이터 저장소로 사용하는 거죠.
향후에 구현체가 바뀌더라도 기존에 작성된 다른 코드들의 변경을 최소화할 수 있는 장점도 있고요.
1. Repository Interface code
import domain.Member;
import java.util.List;
import java.util.Optional;
public interface MemberRepository {
// 기능 : 회원 정보 저장
Member save(Member member);
// 회원 조회 : id, name
// Optional(null-safe) 적용 ★
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
// 저장된 회원리스트 모두 반환 (동적으로 자료형의 갯수를 늘림)
List<Member> findAll();
}
2. Optional 배경 및 장단점 (To the deep)
API Note:
Optional is primarily intended for use as a method return type where there is a clear need to represent "no result," and where using null is likely to cause errors. A variable whose type is Optional should never itself be null; it should always point to an Optional instance.
https://docs.oracle.com/javase/9/docs/api/java/util/Optional.html
장점
- Null-safe 처리가 가능하다 (NullPointException X)
- 가독성이 높아진다
단점
- NoSuchElementException 발생
- 새로운 문제 발생
- 오히려 가독성을 떨어뜨릴 수 있음
- 오버헤드 증가
ㄴ Optional 데이터 접근 비용 등
2-1. NoSuchElementException 발생
Optional 객체에 값이 없는 경우
ㄴ 해결방안: 값의 유무를 판단해준다.
import java.util.Optional;
public class ExampleOptional {
public static void main(String[] args) {
Optional<String> name = Optional.empty(); // value가 없음
System.out.println(name.get());
}
}
Exception in thread "main" java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.get(Optional.java:143)
at domain.ExampleOptional.main(ExampleOptional.java:9)
[출처]
- https://www.inflearn.com/users/74366/@yh?gad=1&gclid=CjwKCAjwysipBhBXEiwApJOcu11Gmy__QkRwxSjT9pJNflRJSwnlrpg6WfM0r9TRIQD3_uPaKmH3ThoC26QQAvD_BwE
- https://softwareengineering.stackexchange.com/questions/131332/what-is-the-point-of-an-interface
'Spring' 카테고리의 다른 글
자바 클래스 기본 구조와 용어 (0) | 2023.11.07 |
---|---|
STEP3 회원 리포지토리 메모리 구현체 생성 (0) | 2023.11.06 |
STEP1 회원 도메인 객체 생성 (0) | 2023.11.06 |
자바 코드를 통해 살펴본 클래스(Class) (0) | 2023.11.04 |
003. 스프링 웹 개발 기초 스터디 2편 (1) | 2023.10.21 |