본문 바로가기

스프링

[java] Enum 서비스 추상화1

1.     Com.springsource.junit : junit

2.     Commons-logging : Spring-context가 사용

3.     Mysql-connector : Mysql JDBC

4.     Spring-aop : 스프링 기능 자체의 aop

5.     Spring-bean : 스프링 빈을 활용하는 경우 필요. 스프링의 XML 설정파일과 자바 애노테이션을 파싱 하는데 필요한 클래스 포함

6.     Spring-context : 스프링 코어를 확장한 많은 클래스가 들어 있는데 모든 클래스는 EJB, JNDI(Java Naming Directory Interface), JMX용 클래스와 연동하는데 applicationcontext기능을 사용해야 하며 스프링 리모팅 클래스, 동적 스크립팅 언어(제이루비, 그루비등)와 연동하는 클래스, 빈 유효성검증(JSR-303) API, 스케줄링을 하는 클래스도 포함되어 있다.

7.     Spring-core : 모든 스프링 모듈에서 필요한 모듈. 다른 스프링 모듈에서 사용하는 공통 클래스가 포함됨.

8.     Spring-dao : EmpltyResultDataAccessException 등 사용을 위한 jar

9.     Spring-expression : 스프링 표현언어(SpEL) 지원 클래스 포함.

10.   Spring-jdbc : 스프링이 지원하는 jdbc.

11.   Spring-test.jar

-       @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.

-       SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스

-       @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일

12.   Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션

 

사용자의 활동내역에 따라 레벨을 조정하는 코딩을 할 것이다.

사용자 레벨은 BASIC, SILVER, GOLD 세 가지 중 하나다.

처음 가입하면 BASIC, 50회 이상 로그인 SILVER, SILVER 레벨이면서 30번 이상 추천을 받으면 GOLD 레벨

 

> DBBASIC, SILVER, GOLD라고 문자를 넣는 것도 방법이지만 범위가 작은 숫자로 관리하면 DB용량도 많이 차지 않고 가벼워서 좋다.

 

테이블 재생성

1.     Tinyint : 1바이트 공간

2.     기능을 추가할 때는 Test를 먼저 만드는 것이 안전함 Test.java를 만들다보면서 필요한 Domain을 생성한다.

 

깔끔하지만 문제는 level 타입이 int 이기 때문에 다른 종류의 정보(3이상의 숫자)를 넣는 경우 컴파일러가 체크해주지 못한다는 점에 심각한 버그가 만들어 질 수 있다. 그래서 숫자 타입을 직접 사용하는 것보다 자바5 이상에서 제공하는 enum을 이용하는게 안전하고 편리하다.

Enum의 사용이유를 보다 상세히 알고싶다면 java편의 042.enum을 참고하길 바람.

 

4. 3개의 enum 오브젝트 정의(Level 오브젝트의 static 참조변수라고 생각하면 됨)

6. DB에 저장할 값을 넣어줄 생성자를 만들어둔다.

> 생성자를 통해 3이 넘어가는 숫자가 들어오면 컴파일시 타입이 일치하지 않는다는 에러는 내면서 걸려줄 것이다.

9. 값을 가져오는 메소드(인서트시 실제의 인트값을 불러와서 insert하기 위함. )

> user.getLevel().intvalue();

12. 값으로부터 Level 타입 오브젝트를 가져오도록 만든 스태택 메소드  

> user.setLevel(Level.valueOf(rs.getInt(“level”)))

 

 

 

JDBCHibernate, JDA, JDO 등 다른 데이터엑세스 API 사용시 확장성을 위해 인터페이스 사용

 

27. Select : user.setLevel(Level.valueOf(rs.getInt(“level”))); > Level 오브젝트로 셋팅

36. Insert : user.getLevel().intvalue(); > int값으로 인서트

> DB의 저장공간을 절약하기 위해 int 타입을 사용함

 

 

42~44. 레벨을 셋팅하는 부분 위처럼 하면 BASIC의 Enum 생성자가 호출되어 int1값이 박힘

 

레벨, 로그인 횟수, 추천수가 같은 지 비교