
가변 데이터를 공유하지 말자. 그럼에도 여러 스레드가 가변 데이터를 공유해야 한다면 그 데이터를 읽고 쓰는 동작은 반드시 동기화해야 한다. 📚 동기화 synchronized 키워드는 해당 메서드나 블록을 한 번에 한 스레드씩 수행하도록 보장한다. 한 객체가 일관된 상태를 가지고 생성되고, 이 객체에 접근하는 메서드는 그 객체에 락(lock)을 건다. 락을 건 메서드는 객체의 상태를 확인하고 필요하면 수정한다. 즉, 객체를 하나의 일관된 상태에서 다른 일관된 상태로 변화시킨다. 또한 동기화에는 중요한 기능이 하나 더 있다. 동기화는 일관성이 깨진 상태를 볼 수 없게 하는 것은 물론, 동기화된 메서드나 블록에 들어간 스레드가 같은 락의 보호하에 수행된 모든 이전 수정의 최종 결과를 보게 해 준다. 자바 언어..

예외를 적절히 처리하면 오류를 완전히 피할 수도 있다. 무시하지 않고 바깥으로 전파되게만 놔둬도 최소한 디버깅 정보를 남긴 채 프로그램이 신속히 중단되게는 할 수 있다. 📢 catch문을 비워두지 말아라 API 설계자가 메서드 선언에 예외를 명시하는 까닭은, 그 메서드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다. 따라서, 예외는 문제 상황에 대처하기 위해 존재하는데 catch 블록을 비워두면 예외가 존재할 이유가 없어진다. 예를 들면, 화재경보가 났는데 이 것을 꺼버려 다른 사람들이 화재경보를 못 듣는 경우와 같다. 물론 FileInputStream을 닫을 때 처럼 예외를 무시해야 할 때도 있지만, 예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 ..

예외가 발생해도 객체가 여전히 정상적으로 사용할 수 있는 상태라면 검사 예외를 던진 경우, 호출자가 오류 상태를 복구할 수 있다. 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다. 이러한 특성을 실패 원자적(failure-atomic)이라고 하는데, 실패 원자적 특성을 활용하면 작업 도중 예외가 발생해도 그 객체는 여전히 정상적으로 사용할 수 있는 상태이고, 검사 예외를 던진 경우에 호출자가 오류 상태를 복구할 수 있으니 매우 유용하다. 💡 메서드를 실패 원자적으로 만드는 다양한 방법 첫 번째, 불변 객체로 설계한다. (가장 간단한 방법) 불변 객체는 태생적으로 실패 원자적이다. 메서드가 실패하면 새로운 객체가 만들어지지 않을 수 있으나 기존 객체가 불안정한 상태에 빠지는 ..

예외의 상세 메시지에 최대한 많은 것을 담자 👌 예외의 상세 메시지 예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 그 예외의 스택 추적(stack trace) 정보를 자동으로 출력한다. 스택 추적은 예외 객체의 toString 메서드를 호출해 얻는 문자열로, 보통은 예외의 클래스 이름 뒤에 상세 메시지가 붙는 형태다. 이러한 상세 메시지는 실패 원인에 관한 정보를 가능한 한 많이 담아 반환하므로, 사후 분석을 위해 실패 순간의 상황을 정확히 포착해 예외의 상세 메시지에 담아야 한다. 즉, 실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 한다. 하지만 보안과 관련한 정보는 스택 추적 정보를 많은 사람이 볼 수 있으므로, 상세 메시지에 비밀번호나 암호 키 ..
- Total
- Today
- Yesterday
- 그래프탐색
- 아이템59
- dp
- 운영체제
- 완전탐색
- 백준
- BFS
- docker
- Retrofit2
- docker-compose
- IMAGE
- OS
- cicd
- 아이템61
- 아이템60
- BOJ
- subset
- 순열
- bruteforce
- Java
- EffectiveJava
- springboot
- 알고리즘
- DevOps
- Container
- 토큰기반인증
- 완탐
- 조합
- dfs
- 이펙티브자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |