핵심 정리: readObject 메서드를 작성할 때는 언제나 public 생성자를 작성하는 자세로 임해야 한다. readObject는 어떤 바이트 스트림이 넘어오더라도 유효한 인스턴스를 만들어내야 한다. 바이트 스트림이 진짜 직렬화된 인스턴스라고 가정해선 안된다. 이번 아이템에서 기본 직렬화 형태를 사용한 클래스를 예로 들었지만, 커스텀 직렬화를...
[Architecture] 헥사고날아키텍처
Reference https://mesh.dev/20210910-dev-notes-007-hexagonal-architecture/ https://happy-coding-day.tistory.com/entry/%ED%97%A5%EC%82%AC%EA%B3%A0%EB%82%A0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98He...
[이펙티브자바] 아이템83-지연 초기화는 신중히 사용하라
핵심 정리: 대부분의 필드는 지연시키지 말고 곧바로 초기화해야 한다. 성능 때문에 혹은 위험한 초기화 순환을 막기 위해 꼭 지연 초기화를 써야 한다면 올바른 지연 초기화 기법을 사용하자. 인스턴스 필드에는 이중검사 관용구를, 정적 필드에는 지연 초기화 홀더 클래스 관용구를 사용하자. 반복해 초기화해도 괜찮은 인스턴스 필드에는 단일검사 관용구도 고...
[이펙티브자바] 아이템80-스레드보다는 실행자, 태스크, 스트림을 애용하라
실행자 프레임워크(Executor Framework) 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있음 아래 한 줄로 생성 가능하다. ExecutorService exec = Executors.newSinleThreadExecutor(); 실행할 테스크(task; 작업)을 넘기고자 한다면 아래와 같이 Runnable 을 구현...
[Database] charset과 collation
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...