목록언어 (30)
개발자는 기록이 답이다
Baeldung에 올라온 포스팅을 한글로 번역한 글입니다. Java의 throw 키워드는 사용자 정의 예외 혹은 내장 예외를 명시적으로 발생시키는데 사용됩니다. 하지만 때로는 catch블록에서 동일한 예외를 다시 발생시켜야 할때도 있고, 이로 인해 예외가 다시 발생합니다. 1. Rethrowing Exceptions 때로는 예외를 더 높은 수준으로 전파하기 전에 몇 가지 수행해야 할 것이 있습니다. 예를 들어 DB트랜잭션을 롤백하거나 예외를 기록하거나 이메일을 보낼 수 있습니다. catch블록에서 이러한 활동을 수행하고 예외를 다시 발생시킬 수 있습니다. 이러한 방식으로 시스템에서 예외가 발생했음을 상위레벨에 알립니다. 예시를 들어보면, 아래 코드에서는 동일한 예외가 다시 발생합니다. 그리고 오류 메세지..
자바의 신 책에는 DTO에 Serializable를 꼭 구현해야 된다고 되어 있다. 하지만 나는 Spring boot 프로젝트를 했을때 한번도 구현하지 않았는데도, 문제가 없었던것 같다. 어떤 관련이 있는지 "직렬화"라는 개념에 대해서 더 정확히 이해하고자 한다. 본 포스팅을 이해하기 위해서는 사전에 IO에 대한 배경지식이 필요하다. 1. 직렬화란? 직렬화라는 개념은 wiki에서 나오는 것처럼"데이터의 구조"나 객체의 "상태"를 지속되게 만드는 프로세스이다. 우리가 만든 데이터와 객체는 이미 비트로 표현되어 있으며, 해당 객체가 네트워크로 전송되거나 데이터베이스에 저장되기 위해 객체의 상태를 연속적인 바이트 형태로 유지하는 것이 바로 직렬화이다. 여기서 마샬링이라는 개념도 나오는데, 직렬화랑 비슷하지만 ..
멀티 스레드에 대해 배우면서, 스레드를 재사용할 수 있는 스레드 풀에 대해 알게 되었다. 그런데 처음 보는 클래스와 인터페이스가 많아서 정리하면서 좀 더 확실히 이해하고자 한다. 여러 배경지식도 함께 포스팅했기 때문에 ThreadPoolExecutor의 디버깅 과정이 궁금하다면 하단에 있는 5번으로 가주시길 바랍니다. 1. 스레드 풀이란? 스레드 풀이 무엇인지 알기 전에 먼저 알아야 할 키워드는Thread Per Request Model 이다. (One to one thread model이라고도 부른다. 이 부분은 오라클 문서를 참고하자) 이 방식은 웹 서버에서 요청이 들어올 때마다 새로운 스레드를 생성하여 해당 요청을 처리하므로, 각 요청은 독립적으로 실행되기 때문에 동시에 여러 요청을 처리할 수 있으..
HashMap은 Map인터페이스 기반의 Hashtable 구현체라고 알려져 있다. 구글링해서 많은 자료들을 찾아봤지만, CS에서 사용하는 HashTable이라는 개념과 Java코드로 구현한 Hashtable, HashMap을 같이 엮어서 생각해보려니까 bucket, entry, node 등 용어들이 헷갈린다. 그래서 직접 디버깅하면서 원리를 파악해보고자 한다. (본 포스팅을 보기 전에 우선 동일성과 동등성 개념에 대한 이해가 있어야 한다) 1. HashSet은 중복을 허용하지 않는다 HashSet의 특징이라고 하면 순서가 중요하지 않고 중복을 허용하지 않는 자료구조라고 많이 알고 있다. 그런데 이 "중복"의 기준이 뭘까? Person클래스를 만들어서 HashSet에 데이터를 저장할때 add()메소드를 사..