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..
람다식이란 메서드를 하나의 식(Expression)으로 표현한 것 메서드의 이름과 반환값이 없어지므로 ‘익명함수’ 라고도 한다. (참고) 익명 클래스 클래스 선언과 객체 생성을 동시에 함 단 한번만 사용되며 오직 하나의 객체만 생성 new 조상클래스이름() { // 멤버 선언 } new 구현인터페이스이름(){ // 멤버 선언 } 생성자를 가질 수 없음. public class InnerEx6 { Object iv = new Object() { void method() { } }; static Object cv = new Object() { void method() { } }; void myMethod() { Object lv = new Object() { void method() { } }; } } 위 ..
제네릭 다양한 타입의 객체를 다루는 메서드나 클래스에 컴파일 시의 타입체크를 해주는 기능 컴파일러가 타입체크 해주기 때문에 type-safe한 프로그래밍 가능 e.g. List list = new ArrayList(); 로 선언하면 list에 integer가 들어가는 코드를 방지할 수 있음. 객체의 타입을 미리 명시해줌으로써 번거로운 형변환을 생략할 수 있음 제네릭 이전에는 다양한 종류의 타입을 다루는 메소드의 매개변수, 리턴타입으로 Object 타입의 참조변수를 사용한 뒤 형변환하는 방식을 활용. //제네릭 이전 class Box { Object item; void setItem(Object item) { this.item = item; } public Object getItem() { return i..
스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O 스트림 데이터를 운반하는데 사용하는 연결통로 단방향 통신만 가능 입력, 출력을 동시에 하려면 입력스트림, 출력스트림 총 2개의 스트림이 필요 먼저 보낸 데이터를 먼저 받음 (First In First Out) 버퍼 스트림의 입출력 효율을 높이기 위해 사용 한 바이트씩 입출력하는 것보다 한 번에 여러 바이트를 입출력하는 것이 빠름 BufferedInputStream read() 호출 시 입력소스로부터 버퍼 크기만큼 데이터를 읽어다 자신 내부 버퍼에 저장. 외부 입력소스로부터 읽는 것보다 내부 버퍼로 부터 읽는 것이 훨씬 빠름 BufferedOutputStream write() 호출시 내부 버퍼에 출력할 내용을 저장. ..
애노테이션 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것 주석과 마찬가지로 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보 제공 표준 애노테이션 JDK에서 제공 주로 컴파일러를 위한 것 @Override 메서드 앞에만 붙일 수 있음 조상 클래스의 메소드를 오버라이딩한다는 것을 컴파일러에게 알려줌 오버라이딩 할 때 메소드 이름을 잘못 적는 휴먼폴트를 방지할 수 있음 @Deprecated 더 이상 사용되지 않는 필드나 메서드에 붙임 다른 것으로 대체되었으니 사용하지 않을 것을 권함 컴파일시 deprecated된 대상을 사용하고 있다고 에러메시지 띄움 @FunctionalInterface 함수형 인터페이스를 올바르게 선언했는지 즉, 추상메서드가..
enum 관련 있는 상수를 편리하게 선언하기 위한 것. 상수 정의할 때 유용 typesafe enum : 값이 같더라도 타입이 다르면 컴파일 에러 발생 enum 정의하는 방법 enum 열거형이름 { 상수명1, 상수명2, ... } 사용 방법 열거형이름.상수명 ‘==‘ 사용 가능 비교 연산자 사용불가. compareTo() 로 비교 switch문 조건식에 사용 가능 enum이 제공하는 메소드 (values()와 valueOf()) values() : 열거형의 모든 상수를 배열에 담아 반환 Direction[] directions = Direction.values(); for (Direction direction : directions) { System.out.printf("%s=%d%n", directio..
9주차 : 멀티쓰레드 프로그래밍 Thread 클래스와 Runnable 인터페이스 쓰레드를 구현하는 방법은 Thread 클래스를 상속받는 방법과 Runnable 인터페이스를 구현하는 방법, 두 가지가 있다. Thread를 상속받으면 다른 클래스를 상속받을 수 없기 때문에, Runnable 인터페이스를 구현하는 방법이 일반적이다. public interface Runnable{ public abstract void run(); } Runnable 인터페이스는 run()만 정의되어 있는 간단한 인터페이스(함수형 인터페이스)이다. 실행 방식 차이 public class ThreadEx1 { public static void main(String[] args) { ThreadEx_1_1 t1 = new Threa..
자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 예외처리 목적 프로그램의 비정상적인 종료를 막고, 정상적인 실행상태 유지 try-catch try{ //예외 발생 가능한 코드 } catch (Exception1 e1) { //Exception1 발생시 처리 코드 } catch (Exception2 e2) { } catch (ExceptionN eN) { } public class ExceptionEx5 { public static void main(String[] args) { System.out.println(1); System.out.println(2); try { System.out.println(3); System.out.println(0 / 0); Sy..
- Total
- Today
- Yesterday
- BOJ
- 프록시
- OOP
- 디자인패턴
- 프로그래머스
- 객체지향
- 코테
- ec2
- 토비
- 서비스추상화
- 카카오
- provider
- 토비의스프링
- 코딩테스트
- 토비의봄TV
- 데코레이터패턴
- 메서드레퍼런스
- 예외처리
- java
- c++
- gracefulshutdown
- 백기선
- 김영한
- 스프링
- 프록시패턴
- 자바
- 자바스터디
- AOP
- SOLID
- 템플릿콜백
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |