이전 코드 개선 이전 코드 public void upgradeLevels() throws Exception{ // 트랜잭션 시작 TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { List users = userDao.getAll(); for (User user : users) { if (canUpgradeLevel(user)) { upgradeLevel(user); } } //정상적으로 작업을 마치면 트랜잭션 커밋 transactionManager.commit(status); } catch (Exception e) { //예외 발생시 롤백 transactionManage..
public class UserService { UserDao userDao; public UserService(UserDao userDao) { this.userDao = userDao; } public void upgradeLevels() { List users = userDao.getAll(); for (User user : users) { Boolean changed = null; if (user.getLevel() == Level.BASIC && user.getLogin() >= 50) { user.setLevel(Level.SILVER); changed = true; } else if (user.getLevel() == Level.SILVER && user.getRecommend() >= 30..
잘못된 예외처리 예외 블랙홀 예외를 잡고 아무 것도 하지 않는 경우 try{ //... } catch(SQLException e){ } 예외를 잡아서 출력만 하는 경우 무의미하고 무책임한 throws 메소드 선언부에 기계적으로 throws Exception 을 붙이는 경우 예외 종류와 특징 Error 시스템에 뭔가 비정상적인 상황이 발생했을 경우에 사용 e.g. OutOfMemoryError, ThreadDeath 어플리케이션 코드에서 잡아도 대응 방법이 없기 때문에 잡을 필요 없음 Checked Exception Exception 의 subclass 중 RuntimeException 을 상속하지 않은 클래스 이 예외가 발생할 수 있는 메소드를 사용할 경우 반드시 예외를 처리하는 코드를 함께 작성해야 함..
UserDao 리소스 반환 시 예외처리 public void deleteAll() throws SQLException { Connection c = null; PreparedStatement ps = null; try { c = dataSource.getConnection(); //변하는 부분 ps = c.prepareStatement("delete from users"); ps.executeUpdate(); } catch (SQLException e) { throw e; } finally { if (ps != null) { try { ps.close(); } catch (SQLException e) { } } if (c != null) { try { c.close(); } catch (SQLExcept..
작은 단위의 테스트가 필요한 이유 한꺼번에 너무 많은 것을 몰아서 테스트하면 테스트 수행 과정도 복잡해지고, 오류가 발생했을 때 정확한 원인을 찾기가 힘들어진다. (e.g. 웹화면을 이용한 테스트) 따라서 테스트는 가능하면 작은 단위로 쪼개서 집중해서 할 수 있어야 한다. 개발자가 설계하고 만든 코드가 원래 의도한 대로 동작하는지를 개발자 스스로 빨리 확인받기 위함. 다른 사람에 의해 테스트될 때보다 빠르게 오류 수정 가능. UserDaoTest 특징 자동 수행 테스트 코드 테스트할 데이터가 코드를 통해 제공되고, 테스트 작업도 코드를 통해 자동으로 실행됨. 개발자는 main 메소드를 실행하기만 하면 됨 점진적인 개발을 위한 테스트 기능 추가, 코드 개선할 때 이전 기능이 영향받지 않는지 확인 가능 Us..
public class UserDao { public void add(User user) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection( "jdbc:mysql://localhost/springbook", "spring", "book" ); PreparedStatement ps = connection.prepareStatement( "insert into users(id, name, password) values(?,?,?)" ); ps.setString(1, user.getId()); ps.setString..
- Total
- Today
- Yesterday
- 자바스터디
- AOP
- 프록시
- 프로그래머스
- 데코레이터패턴
- 예외처리
- 토비의봄TV
- BOJ
- 코딩테스트
- 토비
- 스프링
- 백기선
- gracefulshutdown
- 카카오
- 김영한
- SOLID
- provider
- 서비스추상화
- ec2
- 프록시패턴
- 메서드레퍼런스
- 템플릿콜백
- 자바
- c++
- 디자인패턴
- 토비의스프링
- 객체지향
- 코테
- OOP
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |