전체 글 썸네일형 리스트형 토비의 스프링 - 4.2 예외 전환 4.2.1 JDBC의 한계 JDBC 표준 인터페이스를 통해 DB 종류에 상관없이 일관된 방법으로 프로그램을 개발할 수 있음 하지만, DB 종류에 상관없이 사용할 수 있는 데이터 엑세스 코드를 작성하는 일은 쉽지 않음 또한, 유연한 코드를 보장하지 못함 두 가지 걸림돌이 존재 비표준 SQL 호환성 없는 SQLException의 DB 에러 정보 4.2.2 비표준 SQL SQL은 어느정도 표준화된 언어이고, 몇가지 표준이 존재 하지만, 비표준 문법은 최적화된 SQL 및 DB의 특별한 기능을 제공하기 위해 사용됨 DB는 자주 변경되지 않으므로 대부분의 DB는 비표준 SQL을 지원하고 있음 해결책 호환 가능한 표준 SQL만 사용 표준 SQL만 사용하면 페이징 쿼리에서 부터 문제가 됨. 현실성 없음 DB별 별도의 .. 더보기 프로그래머스 - 거리두기 확인하기(Java) dfs 문제입니다. 5*5 행열을 dfs탐색을 통해 문제 조건에 일치하는지 확인해야 합니다. 행렬 내부에는 'P', 'O', 'X' 가 있습니다. 하나의 'P'를 기준으로 맨해튼 거리가 2 이내로 다른 'P'가 존재해서는 안됩니다. 단, 'P'와 'P'사이에 'X'가 존재하여 탐색이 불가능 할 때는 존재해도 됩니다. 맨해튼 거리는 (x1, y1)과 (x2, y2)가 주어졌을 때, |x2-x1|+|y2-y1|입니다. 일반적인 dfs문제에 맨해튼 거리만 탐색 조건에 추가하면 되는 문제입니다. 코드에 대한 설명은 주석으로 적었습니다. [구현 코드] import java.util.*; class Solution { private static char[][] room; private static List peop.. 더보기 토비의 스프링 - 4.1 사라진 SQLException 4.1.1 JdbcContext에서 JdbcTemplate로 적용 JdbcContext를 JdbcTemplate로 바꾸니 throws SQLException이 사라짐 //JdbcContext public deleteAll() throws SQLException { this.jdbcContext.update("delete from users"); } //JdbcTemplate public deleteAll() { this.jdbcTemplate.update("delete from users"); } 4.1.2 초난감 예외처리 try/catch로 예외를 잡고 아무것도 안하는 것은 예외 발생시 무시하고 계속 진행하기 때문에, 그냥 예외가 발생 했을 때 보다도 더 나쁜 코드임 try{ ... }catch(SQL.. 더보기 프로그래머스 - 다단계 칫솔 판매(Java) 역추적 문제입니다. https://ksb-dev.tistory.com/109 에 역추적 문제 예제가 있으니 역추적을 잘 모르시는 분은 한 번 읽어보시기 바랍니다. 역추적의 기본 개념은 간단합니다. 배열에 부모의 위치를 저장하여 재귀적으로 부모를 찾아가는 방법입니다. private static int find(int po) { if(parents[po] == po){ return po; } return find(parents[po]); } 어디선가 많이 본 코드 아닌가요? 네, 유니온-파인드(Union-Find)에서의 그 파인드 입니다. https://ksb-dev.tistory.com/114 에 유니온 파인드를 잘 정리해 놨으니 잘 모르시는 분은 읽어보시기 바랍니다. 파인드를 사용하기 위해서는 기본적으로.. 더보기 프로그래머스 - 행렬 테두리 회전하기(Java) 단순 구현문제 입니다. 행렬과 회전 좌표가 주어졌을 때, 회전할 때 마다 회전 하는 값들의 최소를 구하는 문제입니다. 단, 회전 할 때 테두리들의 값만 회전하고 중앙의 값은 회전하지 않습니다. 제가 구현한 방법은 간단합니다. 위 그림과 같이 3*3 행렬이 있다고 하겠습니다. 우선, 그림과 같이 테두리 끝부분에 있는 네 개의 값을 저장합니다. 저장을 하는 이유는, 회전할 때 값이 해당 위치에 덮어지기 때문입니다. 회전을 하고, 각 위치에 맞게 저장한 값을 넣으면 됩니다. matrix[r1+1][c2] = t1; matrix[r2][c2-1] = t2; matrix[r2-1][c1] = t3; matrix[r1][c1+1] = t4; [구현 코드] class Solution { private static i.. 더보기 프로그래머스 - 로또의 최고 순위와 최저 순위(Java) 단순 구현문제 입니다. 자신의 번호 6개와 로또 번호 6개가 주어졌을 때, 몇등인지 알아내는 문제입니다. 단, 자신의 번호에 0이 주어졌을 경우 최대, 최소 등수를 알아내야 합니다. 모든 수는 중복되지 않으므로 0이 어떤 숫자인지 알아낼 필요가 없습니다. 우선 0의 개수를 알아내고, 자신의 번호와 로또 번호의 일치 개수를 알아냅니다. 최대를 만들 경우에는 일치 개수와 0의 개수를 더하면 됩니다. 최소를 만들 경우에는 일치 개수만을 맞췄다고 고려하면 됩니다. 또, '등수 = (7 - 일치 개수)'의 공식이 도출될 수 있습니다. 단, 하나도 맞추지 못하는 경우 및 0이 없는 경우만의 최소와 최대를 고려해야 합니다. [구현 코드] class Solution { public static int[] solutio.. 더보기 토비의 스프링 - 3.7 3장 정리 3.7.1 정리 JDBC와 같은 예외가 발생할 가능성이 있으며 리소스 반환이 필요한 코드는 try/catch/finally 블록으로 관리 일정한 작업 흐름이 반복되면서 그중 일부만 바뀌는 코드가 존재한다면 전략패턴 적용. 바뀌지 않는 부분은 컨텍스트로, 바뀌는 부분은 전략으로 만들고 인터페이스를 통해 유연하게 전략을 변경할 수 있도록 구성 인터페이스를 상속한 자바 클래스가 많아진다면, 클라이언트 메소드에서 직접 전략을 정의 및 제공 익명 내부 클래스를 이용해 전략 오브젝트를 구현하면 코드가 간결해짐 컨텍스트가 하나 이상의 클라이언트 오브젝트 에서 사용되면 클래스로 분리 해서 여러 클라이언트가 사용할 수 있게 함 컨텍스트는 빈으로 등록해서 DI를 받거나, 직접 생성해서(new) 수동 DI를 하면 됨 단일 .. 더보기 토비의 스프링 - 3.6 스프링의 JdbcTemplate 3.6.1 JdbcTemplate 스프링이 제공하는 JDBC 코드용 기본 템플릿 JdbcTemplate은 생성자의 파라미터로 DataSource를 주입하면 됨 JdbcTemplate는 DAO 안에서 만들어 수동 DI를 하는 것이 관례임 하지만, 낮은 결합도를 위해 JdbcTemplate를 독립적인 빈으로 등록하고 JdbcTemplate가 구현하고 있는 JdbcOperations 인터페이스를 통해 DI받아 사용하도록 해도 됨 public class UserDao { private JdbcTemplate jdbcTemplate; private DataSource dataSource; public void setDataSource(DataSource dataSource) { this.dataSource = d.. 더보기 이전 1 ··· 27 28 29 30 31 32 33 ··· 48 다음