분류 전체보기(250)
-
[토비의 스프링 3.1] 3.1 다시 보는 초난감 DAO
1장에서 초난감 DAO 코드에 DI를 적용하면서 관심사가 다른 코드를 분리하였으며, 변경과 확장에 유연한 구조로 변경하였다. 이는 개방 폐쇄 원칙(OCP)을 잘 준수했다고 볼 수 있다. 3장에서는 템플릿에 대해 학습한다. 템플릿이란 변경이 거의 일어나지 않는 부분을 자유롭게 변경되는 부분과 독립시켜서 효과적으로 활용할 수 있도록 하는 방법이다. 3장에서 스프링에 적용된 템플릿 기법을 살펴보자. 3.1 다시 보는 초난감 DAO 아직 UserDao의 코드에는 문제점이 남아 있다. 예외 상황에 대한 처리가 부족하다. 한번 살펴보자. 3.1.1 예외처리 기능을 갖춘 DAO JDBC 코드에는 예외 처리를 반드시 해주어야 한다. 정상적인 JDBC 코드의 흐름을 따르지 않고 중간에 예외가 발생한 경우 사용한 리소스를..
2022.07.05 -
[토비의 스프링 3.1] 2.5 학습 테스트로 배우는 스프링
개발자는 자신이 개발하지 않은 프레임워크나 라이브러리를 사용하기 전에 테스트를 작성해보아야 한다. 이런 테스트를 학습 테스트라고 한다. 목적은 사용할 API나 프레임워크의 기능을 테스트를 통해 익히는 것이다. 이미 다른 사람들이 잘 만들어두었으므로 테스트의 주 목적은 검증과 거리가 멀다. 2.5.1 학습 테스트의 장점 다양한 조건에 따른 기능을 손쉽게 확인할 수 있다. 예제를 만들면서 학습할 수 있으며, 자동화된 테스트 코드를 통해 다양한 조건에 따라 기능이 어떻게 동작하는지 빠르게 확인할 수 있다. 학습 테스트 코드를 개발 중에 참고할 수 있다. 학습 테스트는 다양한 기능과 조건에 대한 테스트 코드를 개별적으로 만들고, 따로 남겨놓을 수 있다. 이렇게 저장한 코드는 실제 개발에서 샘플 코드로 참고하면 ..
2022.07.04 -
백준 15657: N과 M (8) [Java] - 포포
문제 N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 고른 수열은 비내림차순이어야 한다. 길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다. 입력 첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증..
2022.07.04 -
[토비의 스프링 3.1] 2.4 스프링 테스트 적용
기존의 테스트코드에서 @Before 메소드가 테스트 메소드 개수만큼 반복된다. @Before public void setUp(){ Application Context ac = new GenericXmlApplicationContext("applicationContext.xml"); this.dao = ac.getBean("userDao", UserDao.class); } 현재 @Before 메소드는 애플리케이션 컨텍스트를 생성하는 코드를 수행하는데, 애플리케이션 컨텍스트는 생성될 때 모든 싱글톤 빈 오브젝트를 초기화한다. 어떤 빈은 오브젝트가 생성될 때 자체적인 초기화 작업을 진행하는 경우도 있다. 이 경우 빈 오브젝트 초기화에 많은 시간이 할애된다. 또, 애플리케이션 컨텍스트가 초기화될 때 어떤 빈은 ..
2022.06.30 -
백준 11508: 2+1 세일 [Java] - 포포
문제 KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두 개의 제품 가격만 지불하면 됩니다. 한 번에 3개의 유제품을 사지 않는다면 할인 없이 정가를 지불해야 합니다. 예를 들어, 7개의 유제품이 있어서 각 제품의 가격이 10, 9, 4, 2, 6, 4, 3이고 재현이가 (10, 3, 2), (4, 6, 4), (9)로 총 3번에 걸쳐서 물건을 산다면 첫 번째 꾸러미에서는 13원을, 두 번째 꾸러미에서는 10원을, 세 번째 꾸러미에서는 9원을 지불해야 합니다. 재현이는 KSG 편의점에서 친구들과 같이 먹을 총 N팩의 유제품을 구입하려고 합니다. 재현이를 도와..
2022.06.15 -
[토비의 스프링 3.1] 2.2 UserDaoTest 개선
2.2.1 테스트 검증의 자동화 테스트의 결과는 성공과 실패로 나뉜다. 실패는 테스트를 진행하는 동안에 에러가 발생하는 경우와, 에러가 발생하지 않았지만 결과가 기대한 바와 다른 경우로 나뉜다. 전자를 테스트 에러, 후자를 테스트 실패라고 구분한다. 테스트 중 에러가 발생하는 것은 콘솔에 출력되므로 쉽게 확인이 가능하다. 하지만 실패하는 것은 별도의 확인 작업과 그 결과가 있어야 알 수 있다. 테스트 코드를 다음과 같이 변경해보자. if(!user.getName().equals(user2.getName()){ System.out.println("테스트 실패 (name)"); }else if(!user.getPassword().equals(user2.getPassword()){ System.out.prin..
2022.06.09