post-thumbnail

가능한 한 실패 원자적으로 만들라

가능한 한 실패 원자적으로 만들라 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다. 이러한 특성을 실패 원자적이라 한다. 메서드를 실패 원자적으로 만드는 방법은 다양하다. 가장 간단한 방법은 불변 객체로 설계하는 것이다. 불변 객체는 태생적으로 실패 원자적이다. 가변 객체의 메서드를 실패 원자적으로 만드는 가장 흔...

2023년 10월 8일
·
0개의 댓글
·
post-thumbnail

예외의 상세 메시지에 실패 관련 정보를 담으라

예외의 상세 메시지에 실패 관련 정보를 담으라 예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 그 예외의 스택 추적 정보를 자동으로 출력한다. 스택 추적은 예외 객체의 toString 메서드를 호출해 얻는 문자열로, 보통은 예외의 클래스 이름 뒤에 상세 메시지가 붙는 형태다. 이 정보가 실패 원인을 분석해야 하는 프로그래머 혹은 SRE가 얻을 수...

2023년 10월 8일
·
0개의 댓글
·
post-thumbnail

메서드가 던지는 모든 예외를 문서화하라

메서드가 던지는 모든 예외를 문서화하라 검사 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바 독의 @throws 태그를 사용하여 정확히 문서화하자. 하지만 예외는 있는데 main은 오직 JVM만이 호출하므로 Exception을 던지도록 선언해도 괜찮다. 자바 언어가 요구하는 것은 아니지만 비검사 예외도 검사 예외처럼 정성껏 문서화해 ...

2023년 9월 18일
·
0개의 댓글
·
post-thumbnail

추상화 수준에 맞는 예외를 던져라

추상화 수준에 맞는 예외를 던져라 수행하려는 일과 관련 없어 보이는 예외가 튀어나오면 당황스러울 것이다. 메서드가 저수준 예외를 처리하지 않고 바깥으로 전파해 버릴 때 종종 일어나는 일이다. 이는 프로그래머를 당황하게 하는 데 그치지 않고, 내부 구현 방식을 드러내어 윗 레벨 API를 오염시킨다. 다음 릴리스에서 구현 방식을 바꾸면 다른 예외가 튀...

2023년 9월 14일
·
0개의 댓글
·
post-thumbnail

표준 예외를 사용하라

표준 예외를 사용하라 표준 예외를 재사용하면 얻는 게 많다. 그중 최고는 우리의 API가 다른 사람이 익히고 사용하기 쉬워진다는 것이다. 우리 API를 사용한 프로그램도 낯선 예외를 사용하지 않게 되어 읽기 쉽게 된다는 장점도 크다. 마지막으로, 예외 클래스 수가 적을수록 메모리 사용량도 줄고 클래스를 적재하는 시간도 적게 걸린다. Illegal...

2023년 9월 13일
·
0개의 댓글
·
post-thumbnail

필요 없는 검사 예외 사용은 피하라

필요 없는 검사 예외 사용은 피하라 검사 예외를 싫어하는 자바 프로그래머가 많지만 제대로 활용하면 API와 프로그램의 질을 높일 수 있다. 결과를 코드로 반환하거나 비검사 예외를 던지는 것과 달리, 검사 예외는 발생한 문제를 프로그래머가 처리하여 안정성을 높이게끔 해준다. 하지만, 검사 예외를 과하게 사용하면 오히려 쓰기 불편한 API가 된다. 어...

2023년 9월 13일
·
0개의 댓글
·
post-thumbnail

복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라

자바는 문제 상황을 알리는 타입으로 검사 예외, 런타임 예외, 에러, 이렇게 세 가지를 제공한다.호출하는 쪽에서 복구하리라 여겨지는 상황이라면 검사 예외를 사용하라.검사 예외를 던지면 호출자가 그 예외를 catch로 잡아 처리하거나 더 바깥으로 전파하도록 강제하게 된다

2023년 9월 7일
·
0개의 댓글
·
post-thumbnail

일반적으로 통용되는 명명 규칙을 따르라

일반적으로 통용되는 명명 규칙을 따르라 패키지와 모듈 이름은 각 요소를 점(.)으로 구분하여 계층적으로 짓는다. 요소들은 모두 소문자 알파벳 혹은 숫자로 이뤄진다. 조직 바깥에서도 사용될 패키지라면 조직의 인터넷 도메인 이름을 역순으로 사용한다. 예외적으로 표준 라이브러리와 선택적 패키지들은 각각 java와 javax로 시작한다. 각 요소는 일반...

2023년 9월 4일
·
0개의 댓글
·
post-thumbnail

리플렉션보다는 인터페이스를 사용하라

리플렉션보다는 인터페이스를 사용하라 리플렉션을 이용하면 컴파일 당시에 존재하지 않던 클래스도 이용할 수 있는데, 물론 단점이 있다. 컴파일타임 타입 검사가 주는 이점을 하나도 누릴 수 없다. 리플렉션을 이용하면 코드가 지저분하고 장황해진다. 성능이 떨어진다. 리플렉션은 아주 제한된 형태로만 사용해야 그 단점을 피하고 이점만 취할 수 있다. 컴파일타...

2023년 9월 4일
·
0개의 댓글
·
post-thumbnail

객체는 인터페이스를 사용해 참조하라

객체는 인터페이스를 사용해 참조하라 적합한 인터페이스만 있다면 매개변수뿐만 아니라 반환 값, 변수, 필드를 전부 인터페이스 타입으로 선언하는 것이 좋다. 객체의 실제 클래스를 사용해야 할 상황은 '오직' 생성자로 생성할 때뿐이다. 인터페이스를 타입으로 사용하는 습관을 길러두면 프로그램이 훨씬 더 유연해질 것이다. 나중에 구현 클래스를 교체하고자 하...

2023년 8월 25일
·
0개의 댓글
·
post-thumbnail

다른 타입이 적절하다면 문자열 사용을 피하라

다른 타입이 적절하다면 문자열 사용을 피하라 문자열을 쓰지 않아야 할 사례 문자열은 다른 값 타입을 대신 하기에 적합하지 않다. 많은 사람이 파일, 네트워크, 키보드 입력으로부터 데이터를 받을 대 주로 문자열을 사용한다. 입력받을 데이터가 진짜 문자열일 때만 그렇게 하는 게 좋다. 받은 데이터가 수치형이라면 int, float, BigIntege...

2023년 8월 22일
·
0개의 댓글
·
post-thumbnail

박싱된 기본 타입보다는 기본 타입을 사용하라

박싱된 기본 타입보다는 기본 타입을 사용하라 오토박싱과 오토언박싱 덕분에 기본 타입과 참조 타입을 크게 구분하지 않고 사용할 수는 있지만, 그렇다고 차이가 사라지는 것은 아니다. 둘 사이에는 분명한 차이가 있다. 어떤 타입을 사용하는지는 상당히 중요하다. 주의해서 선택해야 한다. 기본 타입과 박싱된 타입의 주된 차이는 크게 세 가지다. 첫 번째...

2023년 8월 15일
·
0개의 댓글
·
post-thumbnail

전통적인 for 문 보다는 for-each 문을 사용하라

전통적인 for 문 보다는 for-each 문을 사용하라 for 문을 사용할 때 필요한 건 원소들뿐이지만 필요하지 않은 반복지와 인덱스 변수가 생긴다. 이는 모두 코드를 지저분하게 할 뿐이다. 이렇게 요소 종류가 늘어나면 오류가 생길 가능성이 커진다. 그리고 for 문을 사용하면 컬렉션이냐 배열이냐에 따라 코드 형태가 달라진다. 이러한 문제는 f...

2023년 8월 8일
·
1개의 댓글
·
post-thumbnail

지역변수의 범위를 최소화하라

지역변수의 범위를 최소화하라 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 적어진다. 지역변수의 범위를 줄이는 가장 강력한 기법은 '가장 처음 쓰일 때 선언하기'다. 또한 거의 모든 지역변수는 선언과 동시에 초기화해야 한

2023년 8월 8일
·
0개의 댓글
·
post-thumbnail

공개된 API 요소에는 항상 문서화 주석을 작성하라

공개된 API 요소에는 항상 문서화 주석을 작성하라 API를 쓸모 있게 하려면 잘 작성된 문서도 곁들여야 한다. 자바에서는 자바독이라는 유틸리티가 이 작업을 도와준다. 자바독은 소스코드 파일에서 문서화 주석이라는 특수한 형태로 기술된 설명을 추려 API 문서로 변환해 준다. 문서화 주석을 작성하는 규칙은 공식 언어 명세에 속하지는 않지만, 자바 프...

2023년 8월 3일
·
0개의 댓글
·

로깅 그리고 MDC

로깅 그리고 MDC > 해당 내용은 WifiObserver라는 와이파이 공유기의 접속 목록을 크롤링 하여 해당 정보를 활용하는 프로젝트를 수행하며 공부한 내용입니다. > > 깃 허브 바로가기 이전까지 로그에 대해서 크게 신경 쓰지 않았던 것 같다. 그래서 API 요청, SQL 문과 같이 가장 기본적인 요소들에 대해서만 로깅을 하였다. "멀티 모듈 구...

2023년 8월 3일
·
0개의 댓글
·

테스트: 행위 검증과 상태 검증

테스트: 행위 검증과 상태 검증 > 해당 내용은 WifiObserver라는 와이파이 공유기의 접속 목록을 크롤링 하여 해당 정보를 활용하는 프로젝트를 수행하며 공부한 내용입니다. > > 깃 허브 바로가기 테스트 테스트를 통해 검증할 수 있는 것은 크게 아래 2가지라고 할 수 있다. 상태 검증 행위 검증 상태검증 우선 상태 검증이라는 것은 적절한 ...

2023년 8월 3일
·
0개의 댓글
·

스트림과 비동기

스트림과 비동기 > 해당 내용은 WifiObserver라는 와이파이 공유기의 접속 목록을 크롤링 하여 해당 정보를 활용하는 프로젝트를 수행하며 공부한 내용입니다. > > 깃 허브 바로가기 배경 현재 수행중인 프로젝트의 핵심 기능 중 하나로 "회원 공유기의 와이파이 설정 페이지에서 와이파이에 접속하여 있는 기기 목록을 크롤링"하는 기능이 있다. 프로젝...

2023년 8월 2일
·
0개의 댓글
·
post-thumbnail

옵셔널 반환은 신중히 하라

옵셔널 반환은 신중히 하라 자바 8전에 메서드가 특정 조건에서 값을 반환할 수 없을 때 취할 수 있는 선택지는 다음과 같다. 예외를 던진다. null을 반환한다. 하지만 예외는 정말 예외적인 상황에서만 사용해야 하며 예외를 생성할 때 스택 추적 전체를 캡처하는 비용도 만만치 않다. null을 반환한다면 null을 처리하는 코드를 추가해야 한다. ...

2023년 8월 2일
·
0개의 댓글
·
post-thumbnail

null이 아닌, 빈 컬렉션이나 배열을 반환하라

null이 아닌, 빈 컬렉션이나 배열을 반환하라 컬렉션이나 배열 같은 컨테이너가 비었을 때 null을 반환하는 메서드를 사용할 때면 항시 방어 코드를 넣어주어야 한다. 클라이언트에서 방어 코드를 빼먹으면 오류가 발생할 수 있다. 한편 null을 반환하려면 반환하는 쪽에서도 이 상황을 특별히 취급해줘야 해서 코드가 더 복잡해진다. 때로는 빈 컨테이너...

2023년 8월 2일
·
0개의 댓글
·