전체 글

전체 글

    백준 11725. 트리의 부모 찾기

    백준 11725. 트리의 부모 찾기

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class Main { static ArrayList[] list; static boolean[] visit; static int[] parents; static int N; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Stri..

    3.5 템플릿과 콜백

    3.5 템플릿과 콜백

    지금까지 UserDao와 StatementStrategy, JdbcContext를 이용해 만든 코드는 일종의 전략 패턴이 적용된 것이라고 볼 수 있다. 전략 패턴의 기본 구조에 익명 내부 클래스를 활용한 방식이다. 이런 방식을 스프링에서는 템플릿/콜백 패턴이라고 부른다. 전략 패턴의 컨텍스트를 템플릿이라 부르고, 익명 내부 클래스로 만들어지는 오브젝트를 콜백이라고 부른다. -템플릿/콜백의 동작원리 템플릿 : 고정된 작업 흐름을 가진 코드를 재사용한다는 의미에서 붙인 이름 콜백 : 템플릿 안에서 호출되는 것을 목적으로 만들어진 오브젝트 템플릿/콜백의 특징 콜백은 보통 단일 메소드 인터페이스를 사용한다. 하나의 템플릿에서 여러 가지 종류의 전략을 사용해야 한다면 하나 이상의 콜백 오브젝트를 사용할 수 있다...

    3.3 JDBC 전략 패턴의 최적화, 3.4 컨텍스트와 DI

    3.3 JDBC 전략 패턴의 최적화, 3.4 컨텍스트와 DI

    지금까지 기존의 deleteAll() 메소드에 담겨 있던 변하지 않는 부분, 자주 변하는 부분을 전략 패턴을 사용해 깔끔하게 분리해냈다. 독립된 JDBC 작업 흐름이 담긴 jdbcContextWithStatementStrategy()는 DAO메소드들이 공유할 수 있게 되었다. DAO 메소드는 전략 패턴의 클라이언트로서 컨텍스트에 해당하는 jdbcContextWithStatementStrategy() 메소드에 적절한 전략, 즉 바뀌는 로직을 제공해주는 방법으로 사용할 수 있다. 여기서 컨텍스트는 PreparedStatement를 실행하는 JDBC의 작업 흐름이고, 전략은 PreparedStatement를 생성하는 것이다. - 전략 클래스의 추가 정보 이번에 add() 메소드에 적용해보자. 변하는 부분을 A..

    백준 2667. 단지번호붙이기 (JAVA) (DFS)

    백준 2667. 단지번호붙이기 (JAVA) (DFS)

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; public class Main { static int[][] arr; // 아파트의 위치를 저장할 배열 static boolean[][] visit; // 방문 여부를 입력할 배열 static int[] dr = {-1,1,0,0}; static int[] dc = {0,0,-1,1}; static int cnt ; // 단지내에 존재하는 아파트의 개수 static int N; // 지도의 크기 N*N static ArrayList li..

    3.1 다시 보는 초난감 DAO

    3.1 다시 보는 초난감 DAO

    학습 목표 스프링에 적용된 템플릿 기법을 살펴보고, 이를 적용해 완성도 있는 DAO코드를 만드는 방법을 알아보자. UserDao코드에는 예외상황에 대한 처리라는 문제점이 남아있다. 먼저 UserDao의 가장 단순한 메소드인 deleteAll()을 살펴보자. 반환되지 못한 Connection이 계속 쌓이면 어느 순간에 커넥션 풀에 여유가 없어지고 리소스가 모자란다는 심각한 오류를 내며 서버가 중단될 수 있다. 장시간 운영되는 다중 사용자를 위한 서버에 적용하기에는 치명적인 위험을 내포하고 있다. 리소스 반환과 close() close()메소드는 이름을 보면 열린 것은 닫는다는 의미지만 보통 리소스를 반환한다는 의미로 이해하는 것이 좋다. Connection과 PreparedStatament는 보통 풀 방식..

    2.5 학습 테스트로 배우는 스프링

    2.5 학습 테스트로 배우는 스프링

    개발자가 자신이 만든 코드가 아닌 다른 사람이 만든 코드와 기능에 대한 테스트를 작성할 필요가 있을까? 일반적으로 자신이 만들고 잇는 코드에 대한 테스트만 작성하지만 때로는 자신이 만들지 않은 프레임워크나 다른 개발팀이 만든 라이브러리 등에 대해서도 테스트를 작성해야 한다. 이것을 학습 테스트learning test라고 한다. 학습 테스트의 목적은 자신이 사용할 API나 프레임워크의 기능을 테스트로 보면서 사용방법을 익히려는 것이다. - 학습 테스트의 장점 1. 다양한 조건에 따른 기능을 손쉽게 확인해볼 수 있다 학습 테스트는 자동화된 테스트 코드로 만들어지기 때문에 다양한 조건에 따라 기능이 어떻게 동작하는지 빠르게 확인할 수 있다. 2. 학습 테스트 코드를 개발 중에 참고할 수 있다 다양한 기능과 조..

    백준 1012. 유기농 배추(JAVA) (DFS)

    백준 1012. 유기농 배추(JAVA) (DFS)

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int[][] arr; static boolean[][]visit; static int M,N,K ; static int[] dr = {-1,0,1,0}; static int[] dc = {0,1,0,-1}; static int cnt = 0; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new Inpu..

    2.4 스프링 테스트 적용

    2.4 스프링 테스트 적용

    2.3 개발자를 위한 테스팅 프레임워크 JUnit 학습 목표 JUnit 프레임워크를 좀 더 자세히 살펴보자. "테스트 없이는 스프링도 없다."라고 할 정도로 스프링에서 테스트의 중요성은 크다고 할 수 있다. 스프링의 핵심 기능 중 하나인 스프링 테 gwamssoju.tistory.com 이제 테스트 코드도 어느 정도 깔끔하게 정리를 마쳤다. 하지만 아직 부족한 부분이 있다. 바로 애플리케이션 컨텍스트 생성 방식이다. @Before 메소드가 테스트 메소드 개수만큼 반복되기 때문에 애플리케이션 컨텍스트도 그만큼 만들어진다. 지금은 크게 문제는 안되지만 빈이 복잡해지고 많아지면 생성에 적지 않은 시간이 걸릴 수 있다. 따라서 애플리케이션 컨텍스트는 한 번만 만들고 여러 테스트가 공유해서 사용해도 된다. 스프링..

    백준 2606. 바이러스 (JAVA)

    백준 2606. 바이러스 (JAVA)

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int ComCnt, Ssang; static int[][] arr; static boolean[] visit; static int cnt = 0; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st ; ComCnt..

    2.3 개발자를 위한 테스팅 프레임워크 JUnit

    2.3 개발자를 위한 테스팅 프레임워크 JUnit

    학습 목표 JUnit 프레임워크를 좀 더 자세히 살펴보자. "테스트 없이는 스프링도 없다."라고 할 정도로 스프링에서 테스트의 중요성은 크다고 할 수 있다. 스프링의 핵심 기능 중 하나인 스프링 테스트 모듈도 JUnit을 이용한다. 따라서 스프링의 기능을 익히기 위해서라도 JUnit는 꼭 사용할 줄 알아야 한다. JUnit는 단순하기 때문에 빠르게 작성할 수 있고 대부분 자바 IDE에서 JUnit 테스트를 손쉽게 실행할 수 있는 JUnit 테스트 지원 기능 내장하고 있어서 더욱 편하게 활용할 수 있게 해 준다. 테스트 결과의 일관성 지금까지 JUnit을 적용해서 깔끔한 테스트 코드를 만들었지만 아직은 좀 더 개선했으면 하는 아쉬운 점이 있다. 가장 불편한 점은 매번 테스트 실행 전에 DB의 user테이블..