전체 글 404

스프링으로 예외처리와 반복 문제 해결

서비스 계층은 특정 기술에 의존하지 않고, 순수하게 유지하는 것이 좋은데 그러려면 예외에 대한 의존도 해결해야 한다. 서비스 계층에서 처리할 수 없는 예외에 대한 의존을 제거하려면 체크 예외를 런타임 예외로 전환해서 서비스 계층에 던져야 한다. 그러면 서비스 계층에서 무시할 수 있기 때문에, 특정 구현 기술에 의존하는 부분을 제거하고 서비스 계층을 순수하게 유지할 수 있다. 인터페이스 인터페이스를 도입해서 구현 기술의 버전이 바뀌면 쉽게 변경할 수 있도록 할 수 있다. 하지만 인터페이스 구현체가 체크 예외를 던지려면, 인터페이스 메서드에 먼저 체크 예외를 던지는 부분이 있어야 한다. 인터페이스가 특정 구현 기술에 종속적인 체크 예외를 사용하게 되면 순수한 인터페이스를 만들 수 없다. 인터페이스를 만드는 ..

Spring 2024.02.19

자바의 예외

Object: 예외도 객체. 모든 객체의 최상의 부모는 Object이다. Throwable: 최상위 예외. Error 메모리 부족, 스택오버플로우 JVM이나 하드웨어 등 시스템의 문제로 발생하는 것. 애플리케이션 내 코드로 해결할 수 없다. 상위 예외를 catch로 잡으면 그 하위 예외까지 잡는다. 따라서 상위 예외인 Throwable도 잡으면 Error도 함께 잡을 수 있기 때문에 잡으면 안된다. Exception부터 필요한 예외라고 생각하고 잡으면 된다. Exception 사용자의 잘못된 조작이나 개발자의 코딩 로직 실수로 인해 발생하는 프로그램 오류 예외처리 코드를 통해 프로그램을 종료하지 않고 다시 정상 실행상태가 되도록 할 수 있다. Checked Exception과 Unchecked Excep..

Java 2024.02.14

스프링으로 트랜잭션 문제 해결

프레젠테이션 계층(컨트롤러), 서비스 계층, 데이터베이스 접근 계층 중 가장 중요한 것은 비즈니스 로직을 담고 있는 서비스 계층이다. 서비스 계층은 가능한 순수한 자바 언어로 이루어져 변경이 자주 일어나지 않도록 해야 한다. 하지만 트랜잭션에서 배우고 실습했던 코드들은 SQLException과 같은 JDBC에 속하는 오류를 담고 있고, MemberRepositoryV1이라는 구체 클래스에 의존되어 있다. 따라서 컨트롤러나 데이터베이스 접근 계층의 변경이 일어나면 서비스 계층도 바꿔야 한다. 트랜잭션은 서비스 계층에서 구현되어야 하는데 트랜잭션 코드를 위한 try catch finally 같은 코드들의 중복도 많다. 그리고 JDBC와 JPA의 트랜잭션 구현 코드도 다르다. 기술을 변경하게 되면 서비스 계층..

Spring 2024.02.13

[프로그래머스] Lv1. 이상한 문자 만들기 파이썬

이상한 문자 만들기 문제 설명 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. 제한 사항 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다. 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다. 입출력 예sreturn "try hello world" "TrY HeLlO WoRlD" 내 풀이 def solution(s): answer = '' s = list(s) cnt = 0 for i in range(len(s)): if cnt % 2 == 0: s[i..

[프로그래머스] Lv.3 단어변환 dfs bfs 파이썬

단어 변환 문제 설명 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. 예를 들어 begin이 "hit", target가 "cog", words가 ["hot","dot","dog","lot","log","cog"]라면 "hit" -> "hot" -> "dot" -> "dog" -> "cog"와 같이 4단계를 거쳐 변환할 수 있습니다. 두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 ta..

[프로그래머스] Lv1. 체육복 파이썬

체육복 문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution..

[프로그래머스] Lv3. 정수 삼각형 파이썬 DP

정수 삼각형 문제 설명 위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다. 삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요. 내 풀이 def solution(triangle): answer = 0 for i in range(1, len(triangle)): for j in range(len(triangle[i])): if j == 0: triangle[i][j] += triangle[i-1][..

[프로그래머스] Lv0. 등수 매기기

등수 매기기 문제 설명 영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요. 내 풀이 def solution(scores): avg = [] answer = [] for score in scores: avg.append(sum(score)/2) sorted_avg = sorted(avg, reverse=True) for i in avg: answer.append(sorted_avg.index(i)+1) return answer 공동 순위를 처리해주어야 하는데 이것을 그냥 내림차순으로 정..

[프로그래머스] Lv3. 카테고리 별 도서 판매량 집계하기

카테고리 별 도서 판매량 집계하기 문제 설명 다음은 어느 한 서점에서 판매중인 도서들의 도서 정보(BOOK), 판매 정보(BOOK_SALES) 테이블입니다. BOOK 테이블은 각 도서의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다. Column nameTypeNullableDescription BOOK_ID INTEGER FALSE 도서 ID CATEGORY VARCHAR(N) FALSE 카테고리 (경제, 인문, 소설, 생활, 기술) AUTHOR_ID INTEGER FALSE 저자 ID PRICE INTEGER FALSE 판매가 (원) PUBLISHED_DATE DATE FALSE 출판일 BOOK_SALES 테이블은 각 도서의 날짜 별 판매량 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다..

SQL 문제 풀이 2024.02.09

[프로그래머스] Lv3. 조건에 맞는 사용자와 총 거래금액 조회하기 Oracle

조건에 맞는 사용자와 총 거래금액 조회하기 문제 설명 다음은 중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고 거래 게시판 사용자 정보를 담은 USED_GOODS_USER 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS는 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다. Column nameTypeNullable BOARD_ID VARCHAR(5) FALSE WRITER_ID VARCHAR(50) FALSE TITLE VARCHAR(100) FALSE CONTENTS VARCH..

SQL 문제 풀이 2024.02.09
728x90