on
[토비의 스프링 5장] 서비스 추상화
[토비의 스프링 5장] 서비스 추상화
5장에서는 지금까지 만든 DAO에 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 기술들을 추상화하고 일관된 방법으로 사용할 수 있도록 지원하는지 살펴본다.
1. 사용자 레벨 관리 기능 추가
CRUD만 가능한 UserDao에 사용자 레벨 관리 기능을 추가해보자.
Level 이늄
int 타입으로 레벨을 사용하면 다른 종류의 정보를 넣거나 범위를 벗어나는 값을 넣을 위험이 있다.
따라서 이늄을 사용하는 게 안전하다.
사용자 레벨용 이늄
public enum Level { BASIC(1), SILVER(2), GOLD(3); private final int value; Level(int value) { // DB에 저장할 값을 넣어줄 생성자 선언 this.value = value; } public int intValue() { return value; } public static Level valueOf(int value) { switch (value) { case 1: return BASIC; case 2: return SILVER; case 3: return GOLD; default: throw new AssertionError("Unknown value : " + value); } } }
이렇게 하면 Level 이늄은 내부에는 DB에 저장할 int 타입 값을 갖고 있지만 겉으로는 Level 타입 오브젝트이기 때문에 안전하게 사용할 수 있다. user1.setLevel(1000)과 같은 코드는 컴파일러가 타입이 일치하지 않는다는 에러를 내며 걸러줄 것이다.
User, UserDaoTest, UserDaoJdbc도 알맞게 수정한다.
이 때, Level 이늄은 오브젝트이므로 DB에 저장될 수 있는 SQL 타입이 아니기 때문에 정수형 값으로 변환해줘야 한다.
from http://gogumi-log.tistory.com/16 by ccl(A) rewrite - 2021-12-24 18:01:52