profile
백엔드 개발자
post-thumbnail

아이템 80. 스레드보다는 실행자, 태스크, 스트림을 애용하라

java.util.concurrent 패키지는 실행자 프레임워크(Executor Framework)라고 하는 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있다. 이것을 이용하면, 다음의 아주 짧은 코드로 작업 큐를 사용할 수 있다.실행자 서비스의 주요 기능은 다음

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

아이템 79. 과도한 동기화는 피하라

과도한 동기화는 성능을 떨어뜨리고, 교착상태에 빠뜨리고, 심지어 예측할 수 없는 동작을 낳기도 한다.응답 불가와 완전 실패를 피하려면 동기화 메서드나 동기화 블록 안에서는 제어를 절대로 클라이언트에 양도하면 안 된다.동기화된 영역 안에서는 재정의할 수 있는 메서드는 호

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

아이템 78. 공유 중인 가변 데이터는 동기화해 사용하라

synchronized synchronized 키워드는 해당 메서드나 블록을 한번에 한 스레드씩 수행하도록 보장한다. 많은 프로그래머가 동기화를 배타적 실행 용도로만 생각한다. 배타적 실행이란, 한 스레드가 변경하는 중이라서 상태가 일관되지 않은 순간의 객체를 다른 스레드가 보지 못하게 막는 것을 의미한다. 그러나 동기화에는 중요한 기능이 하나 더 있다...

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

아이템 77. 예외를 무시하지 말라

API 설계자가 메서드 선언에 예외를 명시하는 까닭은, 그 메서드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다. API 설계자의 목소리를 흘려버리지 말자. 물론 예외를 무시해야 할 때도 있다. 예를 들어 FileInputStream 을 닫을 때가 그렇다. 파일

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

아이템 76. 가능한 한 실패 원자적으로 만들라

실패 원자적(failure-atomic) 이란, 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지하는 것을 말한다. 1\. 불변 객체로 설계하기불변 객체는 태생적으로 실패 원자적이다. 불변 객체의 상태는 생성 시점에 고정되어 변하지 않기 때문에, 메

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

아이템 75. 예외의 상세 메시지에 실패 관련 정보를 담으라

예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 그 예외의 스택 추적(stack trace) 정보를 자동으로 출력한다. 스택 추적은 예외 객체의 toString 메서드를 호출해 얻은 문자열이다. 이는 보통 예외 클래스 이름 뒤에 상세 메시지가 붙는 형태다. 이 정보

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

아이템 74. 메서드가 던지는 모든 예외를 문서화하라

메서드가 던지는 예외는 그 메서드를 올바로 사용하는 데 아주 중요한 정보이므로, 각 메서드가 던지는 예외 하나하나를 문서화하는 데 충분한 시간을 쏟아야 한다.검사 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throw 태그를 사용하여 정확히 문

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

아이템 73. 추상화 수준에 맞는 예외를 던지라

메서드가 저수준 예외를 처리하지 않고 바깥으로 전파해버리면, 종종 수행하려는 일과 관련 없어 보이는 예외가 발생한다. 이는 내부 구현 방식을 드러내어 윗 레벨 API를 오염시킨다. 다음 릴리스에서 구현 방식을 바꾸면 다른 예외가 튀어나와 기존 클라이언트 프로그램을 깨지

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

아이템 72. 표준 예외를 사용하라

자바 라이브러리는 대부분 API에서 쓰기에 충분한 수의 예외를 제공한다.표준 예외를 재사용하면 얻는 점이 많다. 다른 사람이 익히고 사용하기 쉬워진다는 것이다. 많은 프로그래머에게 이미 익숙해진 규약을 그대로 따르기 때문이다. 낯선 예외를 사용하지 않으므로 읽기 쉽다.

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

아이템 71. 필요 없는 검사 예외 사용은 피하라

검사 예외는 제대로 활용하면 API와 프로그램의 질을 높일 수 있다. 검사 예외는 발생한 문제를 프로그래머가 처리하여 안전성을 높이게끔 해준다.그러나 검사 예외를 과하게 사용하면 오히려 쓰기 불편한 API가 된다. 어떤 메서드가 검사 예외를 던질 수 있다고 선언됐다면,

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

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

자바는 문제 상황을 알리는 타입(throwable)으로 검사 예외, 런타임 예외, 에러, 이렇게 세 가지를 제공한다.언제 어떤 것을 사용해야 할까?호출하는 쪽에서 복구할 것으로 여겨지는 상황이라면 검사 예외를 사용하자. 이것은 검사와 비검사 예외를 구분하는 기본 규칙이

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

아이템 69. 예외는 진짜 예외 상황에만 사용하라

예외는 오직 예외 상황에서만 써야 한다. 절대로 일상적인 제어 흐름용으로 쓰여서는 안 된다. 표준적이고 쉽게 이해되는 관용구를 사용하고, 성능 개선을 목적으로 과하게 머리를 쓴 기법은 자제하자. 실제로 성능이 좋아지더라도 자바 플랫폼이 꾸준히 개선되고 있는 최적화로

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

아이템 68. 일반적으로 통용되는 명명 규칙을 따르라

자바 플랫폼은 명명 규칙이 잘 정립되어 있으며, 그중 많은 것이 자바 언어 명세JLS, 6.1에 기술되어 있다. 자바의 명명 규칙은 크게 철자 규칙과 문법 규칙, 두 범주로 나뉜다.철자 규칙은 패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수의 이름을 다룬다.패

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

아이템 67. 최적화는 신중히 하라

최적화 이야기를 하기에 앞서, 다음의 격언들을 보자.(맹목적인 어리석음을 포장해) 그 어떤 핑계보다 효율성이라는 이름 아래 행해진 컴퓨팅 죄악이 더 많다(심지어 효율을 높이지도 못하면서) \- 윌리엄 울프Wulf72(전체의 97% 정도인) 자그마한 효율성은 모두 잊자.

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

아이템 66. 네이티브 메서드는 신중히 사용하라

자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 프로그램이 네이티브 메서드 를 호출하는 기술을 말한다.네이티브 메서드 란 C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 말한다.네이티브 메서드는 주로 다음과 같은 용도로 사

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

Spring에서의 Transaction

참고트랜잭션이란 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말하며, ACID 성질을 가지고 있다.Atomicity (원자성): 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않는다. Consistency (

2022년 11월 22일
·
0개의 댓글
·
post-thumbnail

[JPA] N+1 문제

N+1 문제란 1개의 쿼리로 처리되길 기대했지만 N개의 추가 쿼리가 발생하는 현상으로, 처음 실행한 SQL의 결과 수만큼 추가로 SQL이 실행되는 것을 말한다. 이것은 연관관계가 설정되어 있는 엔티티를 JPQL을 통해 조회하는 경우에 발생하는 문제다. JPQL을 실행하

2022년 11월 21일
·
0개의 댓글
·
post-thumbnail

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

리플렉션 기능(java.lang.reflect)을 이용하면 프로그램에서 임의의 클래스에 접근할 수 있다.Class 객체가 주어지면 그 클래스의 생성자, 메서드, 필드에 해당하는 Constructor, Method, Field 인스턴스를 가져올 수 있다. 또한 이 인스턴

2022년 11월 18일
·
0개의 댓글
·
post-thumbnail

Kotlin에서의 BDD (Behavior Driven Development)

최근 프로젝트 팀원이 추천해준 영상을 보고 BDD 라는 것을 처음 알게 되었다. 해당 영상에서는 kotest와 mockk 테스팅 툴을 사용하여 TDD와 BDD의 차이점을 잘 설명해주고 있다.\+) 최근 Kotlin 언어를 공부하고, Kotlin + Spring 조합으로

2022년 11월 15일
·
0개의 댓글
·
post-thumbnail

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

적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. 객체의 실제 클래스를 사용해야 할 상황은 '오직' 생성자로 생성할 때뿐이다. 인터페이스 사용 장점 인터페이스를 타입으로 사용하는 습관을 길러두면 프로그램이 훨

2022년 11월 9일
·
0개의 댓글
·