전체 글
-
[Effective Java] 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라Java 2023. 2. 6. 12:46
복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 자바는 문제 상황을 알리는 타입(throwable)으로 검사 예외, 런타임 예외, 에러, 이렇게 세 가지를 제공한다. 검사 예외 개발자가 명시해야 하는 부분은 검사 예외인 Exception으로 어플리케이션 수행 중 일어날 법한 예외를 검사하고 대비하라는 목적으로 사용된다. 컴파일 단계에서 컴파일러가 체크한다. 이를 처리하지 않으면 컴파일 에러가 발생한다. 과도한 예외 검출은 시스템의 성능을 저하시킬 수 있다. 비검사 예외 Error는 시스템적인 예외를 의미한다. 개발자가 예외를 try-catch 로 잡지 않았을 때 발생한다. 런타임에 컴파일러에게 예외가 걸리지지 않았을 경우 발생한다. 즉, 코드 상의 문제이다. 대표적으로 ..
-
[Effective Java] 예외는 진짜 예외 상황에만 사용하라Java 2023. 2. 6. 12:45
예외 예외를 제대로 활용한다면 프로그램의 가독성, 신뢰성, 유지보수성이 높아지지만, 잘못 사용하면 반대의 효과만 나타난다. 예외는 진짜 예외 상황에만 사용하라 예외를 사용한 반복문은 코드를 헷갈리게 하고 성능을 떨어뜨린다. // 예외를 완전히 잘못 사용한 예 try{ int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e){ } 위의 코드는 전혀 직관적이지 않다. 이 코드는 배열의 원소를 순회하는데, 아주 끔찍한 방식으로 하고 있다. 무한루프를 돌다가 배열의 끝에 도달해 ArrayIndexOutOfBoundsException이 발생하면 끝을 내는 것이다. 다음과 같이 표준적인 관용구대로 작성했다면 모든 자바 ..
-
타임리프 Attempted to call method size() on null context objectFront 2023. 2. 5. 17:06
Controller에서 model.addAttribute(studyGroupList)로 리스트를 넘길 때 만약 null이 넘어간다면, model.addAttribute(studyGroupList) 타임리프에서 size()로 접근하는 경우 다음과 같은 에러와, 에러메시지가 나타난다. Model의 addAttribute 메소드를 찾아보면, 위와 같이 empty일 때 무시하라는 코드를 확인할 수 있다. 타임리프에서 size() 대신 #lists.isEmpty(studyGroupList) 로 접근하면, 오류 없이 사용할 수 있다. 또는, model.addAttirubte의 매개변수로 화면에서 사용할 변수명인 String 값을 같이 넘겨주면 값이 null이어도 빈 객체로 넘어가게 되어 오류 없이 사용할 수 있다...
-
타임리프 collapse data-target 설정Front 2023. 2. 3. 14:48
게시글의 댓글 수정 로직을 구현할 때 bootstrap의 collapse 기능을 사용하였다. https://getbootstrap.com/docs/3.3/javascript/#collapse JavaScript · Bootstrap Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater getbootstra..
-
최대 연속 부분배열 알고리즘Algorithm 2023. 2. 3. 14:31
최대 부분배열의 합 - 4가지 알고리즘 비어 있지 않은 숫자 배열에서 합이 최대가 되는 연속된 부분 배열 구간의 합을 구하는 방법 4가지가 있다. 완전탐섹(브루트포스 알고리즘) 중복을 제거한 탐색 분할정복(Divide and Conquer) 동적 계획법(Dynamic Programming) 완전탐색(브루트포스 알고리즘) 단순히 모든 부분배열을 비교하여 최대인 배열을 구하는 알고리즘이다. MaxSum은 최종 결과합, ThisSum은 각 부분배열의 합을 저장하는 변수이다. 삼중반복문을 이용하여 i(0,n)~j(i,n)까지의 부분배열을 구한다. 시간복잡도: O(n^3) int MaxSubarray1(int A[], int N){ int MaxSum, ThisSum; int i,j,k; MaxSum = 0; f..
-
코딩테스트를 위한 Python 문법 정리Algorithm 2023. 2. 3. 14:30
1. 자료형 수 자료형 데이터는 모두 수로 표현할 수 있다. 정수형 정수를 다루는 자료형 양의 정수, 음의 정수, 0이 있다.실수형 소수점 아래의 데이터를 포함하는 수 자료형으로 파이썬에서는 변수에 소수점을 붙인 수를 대입하면 실수형 변수로 처리한다. 소수부가 0이거나, 정수부가 0인 소수는 0을 생략하고 작성할 수 있다. 실수형 데이터를 표현하는 방식으로 파이썬에서는 e나 E를 이용한 지수 표현 방식을 이용할 수 있다. e 다음에 오는 수는 10의 지수부를 의미한다. ex) le9 는 10의 9제곱이 된다. 최단 경로 문제에서는 도달할 수 없는 노드에 대하여 거리를 ‘무한(INF)’으로 설정하곤 한다. 최댓값이 10억 미만이라면 무한(INF)을 표현할 때 10억을 사용할 수 있다. -> 이때 일일이 1..
-
Oracle to Mysql 마이그레이션 문법DB 2023. 2. 3. 11:20
Oracle to Mysql (MariaDB) 쿼리변환 작업 Oracle 쿼리를 Mysql 쿼리로 변환하는 프로젝트에 참여했었다. 작업했던 내용들을 기억하기 위해 작성하는 쿼리 전환 작업 문법 정리 1. NVL() -> IFNULL() IFNULL( expression1, expression2 ) : expression1이 NULL이 아니면 expression1을, NULL이면 expression2를 반환 ORACLE SELECT NVL(USER_ID, ‘’) FROM TABLE MYSQL SELECT IFNULL(USER_ID, ‘’) FROM TABLE 2. NVL2() -> CASE WHEN ~ THEN ~ END ORACLE NVL2(문자열,’ ‘) MYSQL CASE WHEN 문자열 IS NUL..
-
[Effective Java] 다른 타입이 적절하다면 문자열 사용을 피하라Java 2023. 2. 3. 10:30
문자열(String)은 텍스트를 표현하도록 설계되었고, 그 일을 아주 멋지게 해낸다. 근데 문자열은 워낙 흔하고 자바가 잘 지원해주어 원래 의도하지 않은 용도로도 쓰이는 경향이 있다. 문자열을 쓰지 않아야 할 사례 1. 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 많은 사람이 파일, 네트워크, 키보드 입력으로부터 데이터를 받을 때 주로 문자열을 사용한다. 입력받을 데이터가 진짜 문자열일 때만 그렇게 하는게 좋다. 받은 데이터가 수치형이라면 int, float, BigInteger등 적당한 수치 타입으로 변환해야 한다. 예/아니오 질문의 답이라면 적절한 열거 타입이나 boolean으로 변환해야 한다. 기본 타입이든 참조 타입이든 적절한 값 타입이 있다면 그것을 사용하고, 없다면 새로 하나 작성하라...