예외 처리 방법 메소드를 만드는 개발자 입장에서 발생하는 예외를 처리하는 방법은 2가지가 있습니다. (자세한 문법적인 설명은 이 포스팅에서 하지 않습니다.) try - catch문을 사용하기메소드에 thorws 키워드로 예외 선언하기try-catch문을 이용하면 예외가 발생될 것 같은 지점에 직접 예외 처리를 할 수있고, throws를 사용하게 되면 메소드를 사용하는 쪽에서 예외에 대한 처리를 해주어야 합니다. 처음 예외 처리를 배웠을때, throws로 예외를 선언하는 것은 해당 메소드를 만든 개발자로써 무책임한 방법이라고 생각했습니다. 사용자를 편하게 하는 것이 객체지향 설계의 미덕이라고 배웠는데 번거로운 예외처리를 안하겠다는 것처럼 보였습니다. 하지만 이와 같은 생각은 '언제 어떤 방법을 사용해야 하..
Java 프로그램 연산 속도 계산하기 연산속도를 계산하기 위해서는 System.currentTimeMillis()나 System.nanoTime()을 이용합니다. 두 메소드는 UTC라는 시간 표준 체계를 따라 현재시간을 리턴해줍니다. 그래서 연산 속도를 측정하기 위해서 시작시간의 현재시간, 종료시간의 현재시간의 차를 이용하면 연산속도가 얼마인지 계산 해 낼 수 있습니다. currentTimeMillis는 ms로리턴하고(1/1,000초) JDK 5버젼 이상부터는 사용가능한 nanoTime는 ns(1,000,000,000초)로 리턴하니 가능하면 더 정확한 nanoTime을 사용하는게 좋습니다. String vs StringBuffer 연산 속도 비교해보기 String String을 이용하여서 "abcde"라..
재귀란 어떤 사건이 자기 자신을 사용하여 정의 될 때 재귀적(recursive)라고 합니다. 대표적인 예로 팩토리얼이 있습니다. (팩토리얼의 10!는 10x9!로 설명할 수 있다.) 재귀는 스택이다. 재귀 알고리즘이 어렵다고 느껴지는 이유 중 하나는 사람의 머리로 컴퓨터가 실행하는 재귀적 행동을 따라 갈 수 없기 때문입니다. 재귀 알고리즘을 보다 쉽게 상상하려면, 같은 함수가 호출 되는 것이 아니라, 복사된 함수가 호출 된다고 생각합니다.함수의 호출을 상상 할때는 스택(stack)으로 합니다. 함수 호출의 원리는 결국 스택으로 진행됩니다. 함수가 호출되면 기존 함수 스택 위에 호출된 함수가 쌓이게 되고, 더 이상 쌓을 함수(스택)이 없게 되면 위에서부터 차례대로 실행하게 됩니다. 재귀 알고리즘 문제 풀이..
JPA 조인(JOIN) 전략 엔티티(Entity)들 간의 관계가 맺어져 있다면, JPA는 조인(JOIN)을 이용해서 데이터베이스를 조회하게 됩니다. 조인전략중에 성능이 가장 좋은 조인 전략은 내부조인(INNER JOIN)입니다. 하지만 연관된 외래키가 null이 존재하는 경우에 내부조인을 사용할 경우 일부만 필터링을 해서 조회하는 문제가 생길 수 있습니다. 이러한 이유로 JPA는 외부조인(OUTER JOIN)을 기본설정으로 수행하게 됩니다. 내부조인 전략으로 변경하기 내부조인을 사용하고 싶다면 JPA에게 연관된 외래키에는 null이 존재하지 않음을 명시해주어야 합니다. 2가지 설정 방법중에 하나만 설정하면 됩니다. 참고로 @OneToMany와 @ManyToMany는 컬렉션으로 로딩해야 하므로 내부조인 설..
이 포스팅은 Udacity Git Commit Message Style Guide를 참고하여 작성 했습니다. ☞ Udacity Git Commit Message Style Guide 개요 git의 Commit Mesage (커밋 메시지)가 많이 누적 될 경우 가독성이 떨어지고 특히 여러 사람과 개발을 같이 할 때는 더욱 심각 해집니다. 협업하는 사람들 간의 커밋 메시지 스타일을 정해두면 서로간의 코드 리뷰의 도움이 될 뿐만 아니라, 자신의 이전 로그를 살펴보는 것에도 도움이 됩니다. 아래에서 설명할 내용은 Udacity의 깃 커밋 스타일 가이드입니다. 메시지 구조 커밋 메시지는 세가지 파트로 나누고 각 파트는 빈줄을 두어서 구분합나다. type: subject body(옵션) footer(옵션) type..
정규표현식 정규 표현식(Regular Expression)은 주어진 문자열 데이터에서 특정한 조건의 문자를 '검색'하는 과정을 처리 할 수 있도록 하는 규칙입니다. 정규표현식은 특정 언어에서만 사용되는 것이 아니라, 대부분의 언어에서 범용적으로 사용됩니다.예를들어 c[a-z]이라는 정규표현식은 알파벳 c로 시작하고 뒤에 알파벳 a부터 z까지의 문자 중 하나가 오는 문자를 검색합니다.ex) ca, cb, cc, cd ... cz 라는 문자는 찾습니다.ex) 하지만 c1 과 같이 다른 문자는 찾지 못합니다. 정규표현식을 작성하는 방법에 대해서는 관련된 도서나 인터넷상의 자료를 이용해서 공부해야 합니다.정규표현식을 정리해둔 사이트 http://zvon.org/comp/r/tut-Regexp.html#Pages..
글로벌 페치(fetch) 전략 설정글로벌 페치의 default 설정이 모두 LAZY(지연로딩)으로 되있는 줄 알았으나 연관관계 매핑 방식에 따라 default 설정이 다른 것을 알게 되었다. @ManyToOne, @OneToOne : 기본설정이 즉시로딩 (EAGER)@OneToMany, @ManyToMany : 기본설정이 지연로딩 (LAZY)일단 @ManyToOne과 @OneToOne 에게 지연로딩을 하도록 옵션을 명시했다. 이 후의 즉시로딩이 꼭 필요한 경우에 즉시 로딩으로 바꿀 예정이다."김영한 저 - 자바 ORM 표준 JPA 프로그래밍 p305 참고" @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "category_id", nullable = fal..
ERD Entity(엔티티)- 문제 관련 Entity(엔티티)Question (문제) : 가장 중심이 되는 엔티티로 문제에 대한 정보를 담는다. 인성문제와 적성문제의 문제 유형이 달라 추상클래스로 구현하고, 인성문제와 적성문제가 이를 상속하도록 구현하였다.AptitudeQuestion(적성문제) : 인성문제와 구별되는 적성문제만을 담는 엔티티다. 맞은 횟수와 제출한 횟수는 각 문제의 정답률을 계산하기 위해서 추가되었다. PersonalityQuestion(인성문제) : 적성문제와 구별되는 인성문제만을 담는 엔티티다. 하지만 인성문제는 독특한 문제 유형이 너무 많아 설계가 어렵고 그에 비해 인성문제에 대한 중요도가 떨어지는 점을 고려해서, 추후 개발할 예정이다ContentFile : 적성문제를 PDF 혹은..