MySQL 또는 MariaDB 를 사용하여 컬럼에 unqiue 제약 조건을 걸었더니 대소문자를 구별하지 않는 것을 새로 알게 되었고 그 이유에 대해서 알아보았다. 즉, AAA 와 aaa 와 동일하게 취급하여 유니크 제약 조건으로 인해 둘 중 하나의 insert가 안되는 것이다. unquie 제약 조건을 추가하는 DDL 명령어는 아래와 같다. AL...
[이펙티브자바] 아이템75-예외의 상세 메시지에 실패 관련 정보를 담으라
사후 분석을 위해 실패 순간의 상황을 정확히 포착해 예외의 상세 메시지에 담아야 한다. 예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 그 예외의 stack trace 를 자동으로 출력한다. stack tract 는 예외 객체의 toString 메서드를 호출해 얻는 문자열로 보통은 예외 클래스 이름 뒤에 상세 메시지가 붙는 형태다. 이...
[이펙티브자바] 아이템73-추상화 수준에 맞는 예외를 던지라
핵심 정리: 아래 계층의 예외를 예방하거나 스스로 처리할 수 없고, 그 예외를 상위 계층에 그대로 노출하기 곤란하다면 예외 번역을 사용하라. 이때 예외 연쇄를 이용하면 상위 계층에는 맥락에 어울리는 고수준 예외를 던지면서 근본 원인도 함께 알려주어 오류를 분석하기에 좋다. 메서드가 저수준 예외를 처리하지 않고 바깥으로 전파하면 윗 레벨 API...
[디자인패턴] Delegate 패턴
제품 개발을 하면서 ~Delegate 라는 클래스들을 자주 접하게 되었다. 관련해서 찾아보니 Delegate Pattern 이라는 디자인 패턴을 적용한 것이었다. 위 이미지에서 알 수 있다시피 모바일 앱 개발에서 자주 사용되는 패턴인 듯하다. Delegate 패턴이란? Delegate 패턴이란 위임자 패턴이라 불려진다. 쉽게 설명하면 OOP에...
[이펙티브자바] 아이템70-복구할 수 있는 상황에는 검사 예외를 프로그래밍 오류에는 런타임 예외를 사용하라
핵심 정리: 복구할 수 있는 상황이면 검사 예외를, 프로그래밍 오류라면 비검사 예외를 던지자. 확실하지 않다면 비검사 예외를 던지자. 검사 예외도 아니고 런타임 예외도 아닌 Throwable은 정의하지도 말자. 검사 예외라면 복구에 필요한 정보를 알려주는 메서드도 제공하자. 자바는 문제 상황을 알리는 타입(throwable)으로 검사 예외, ...
[이펙티브자바] 아이템69-예외는 진짜 예외 상황에만 사용하라 신중히 하라
핵심 정리: 예외는 예외 상황에서 쓸 의도로 설계되었다. 정상적인 제어 흐름에서 사용해서는 안되며, 이를 프로그래머에게 강요하는 API를 만들어서도 안 된다. 예외는 예외 진짜 예외 상황에서만 사용하라 try { int i = 0; while(true) range[i++].climb(); } catch (Arra...
[이펙티브자바] 아이템67-최적화는 신중히 하라
핵심 정리: 빠른 프로그램을 작성하려 안달하지 말자. 좋은 프로그램을 작성하다 보면 성능은 따라오게 마련이다. 하지만 시스템을 설계할 때, 특히 API, 네트워크 프로토콜, 영구 저장용 데이터 포맷을 설계할 때는 성능을 염두에 두어야 한다. 시스템 구현을 완료했다면 이제 성능을 측정해보자. 충분히 빠르면 그것으로 끝이다. 그렇지 않다면 프로파일러...
[이펙티브자바] 아이템59-라이브러리를 익히고 사용하라
핵심 정리: 바퀴를 다시 발명하지 말자. 아주 특별한 나만의 기능이 아니라면 누군가 이미 라이브러리 형태로 구현해놓았을 가능성이 크다. 그런 라이브러리가 있다면, 쓰면 된다. 있는지 모르겠다면 찾아봐라. 일반적으로 라이브러리의 코드는 여러분이 직접 작성한 것보다 품질이 좋고, 점차 개선될 가능성이 크다. 코드 품질에도 규모의 경제가 적용된다. 라...
[이펙티브자바] 아이템58-전통적인 for문보다는 foreach문을 사용하라
핵심 정리: 전통적인 for문과 비교했을때 foreach문은 명료학, 유연하고, 버그를 예방해준다. 성능 저하도 없다. 가능한 모든 곳에서 for문이 아닌 for-each문을 사용하자. 전통적인 for문의 단점 // 컬렉션 순회하기 - 더 나은 방법이 있다. for (Iterator<Element> i = c.iterator()...
[이펙티브자바] 아이템52-다중정의는 신중히 사용하라
다중정의된 메서드는 컴파일 타임에 실행이 결정된다. 다음은 컬렉션을 집합, 리스트, 그 외로 구분하고자 만든 프로그램이다. “집합”, “리스트”, “그 외”를 차례로 출력할 것 같지만, 실제로 수행해보면 “그 외”만 세 번 연달아 출력한다. 이유가 뭘까? 다중정의(overloading. 오버로딩)된 세 classify 중 어느 메서드를 호출할지...