Java

·Java
개발을 하다 보면 환율 정보를 필요로 하는 기능들이 점점 많아집니다.예를 들어, 상품 목록을 원화로 계산해서 보여줘야 한다면, 환율 정보가 필수적이죠. 그렇다면 환율 정보가 필요할 때마다 매번 웹 API를 호출해야 할까요?매번 API를 호출하게 되면 트래픽이 많아지고 성능 문제가 발생할 수 있습니다. 만약 환율 정보가 30분 동안만 보장된다고 한다면, API를 30분에 한 번만 호출하고 그동안 캐시된 데이터를 사용하는 방법을 고려할 수 있습니다.하지만 캐시 기능을 어떻게 추가할 수 있을까요? 이번 글에서는 데코레이터 디자인 패턴을 활용해 API 호출 코드를 수정하지 않고도 캐시 기능을 추가하는 방법을 소개하도록 하겠습니다!WebApiExRateProvider에 캐시 기능을 추가하기현재 WebApiExRa..
·Java
Cloneable을 사용한다고 clone이 완벽하게 되는 것은 아니다!!clone 메서드가 선언된 곳이 cloneable이 아닌 Object이고접근 제한자가 protected 이다.그래서 Cloneable 을 구현하는 것만으로는 외부 객체에서 clone 을 호출할 수 없다.Cloneable 인터페이스는 빈 인터페이스라서 clone 메서드를 따로 오버라이딩 해주어야 한다.그렇다면 Cloneable은 무슨 일을 할까?Object의 protected 메서드인 clone의 동작 방식을 결정한다.Cloneable을 구현한 클래스의 인스턴스에서 clone 을 호출하면 그 객체의 필드들을 하나하나 복제한 객체를 반환한다.Cloneable을 구현하지 않은 클래스의 인스턴스에서 호출하면 CloneNotSupportedE..
·Java
코딩 컨벤션이 중요한 이유일관된 형식과 스타일을 유지하게 해주어 가독성이 향상되고, 개발 생산성이 증가합니다.코드는 시간이 지남에 따라 변경되고 확장되기 마련입니다. 일관된 코드 스타일을 유지하면 다른 개발자가 코드를 수정하거나 업데이트 하는 경우 쉽게 접근 할 수 있습니다.어느 컨벤션에 따라야 할까?코딩 컨벤션은 사실 정답이 정해져 있는 것이 아니며, 기업마다 다르고 심지어 팀 단위로도 다르기도 한다. 따라서 사람들이 많이 사용하는 코딩 컨벤션인 구글의 코딩 컨벤션을 적용해보기로 하였으며,일관성을 유지하는 것이 중요합니다.자바에서 쉽게 코딩 컨벤션을 적용하는 방법대부분의 IDE에서는 Auto Formatting을 지원하고 있습니다.vscode에서 eslint와 prettier를 사용하듯 자바를 사용할 ..
·Java
오늘의 주제는 Exception이다. 최근 공통 프로젝트에서 무지성 200 OK를 반환하는 바람에, 이제 슬슬 예외 처리에 대한 필요성을 느끼고 있다. 더 깔끔한 코드를 작성하기 위해서 이펙티브 자바를 읽으며 공부해 본 내용을 공유하겠다.표준 예외를 사용하자 표준 예외는 이미 많은 개발자들에게 익숙한 예외들이다. 그렇기 때문에 다른 개발자들이 읽기 쉽고 사용하기 쉬워진다. 또한 예외 클래스 수가 적어질수록 메모리 사용량과 클래스 적재 시간이 줄어든다. Java 라이브러리에서 대부분의 API를 커버할 수 있는 예외를 제공하기 때문에 표준 예외로도 충분하다. 가장 자주 재사용하는 Exception 몇 가지를 소개해보겠다.IllegalArgumentException허용하지 않는 값이 parameter로 건네졌..
·Java
1. JWT란 무엇인가? JWT는 JSON Web Token의 약자이다. 인터넷에서 두 당사자 사이에서 정보를 JSON 객체 형태로 안전하게 전송하기 위한 컴팩트하고 독립적인 방식이고, 이 토큰은 정보가 디지털 서명되어 있기 때문에 검증하고 신뢰할 수 있다.  로그아웃을 하면 로컬 스토리지에 저장된 JWT 데이터를 제거한다. ⇒ 아무튼 사용자 인증, 정보 교환 등에 사용되고, JSON 방식을 이용하기 때문에 JWT라고 하는것이다. 토큰 기반 인증 시스템..?이러한 토큰 기반의 인증 시스템은 아래와 같은 과정으로 작동한다.사용자가 아이디와 비밀번호로 로그인을 한다.서버 측에서 해당 정보를 검증한다.정보가 정확하다면 서버 측에서 사용자에게 토큰을 발급한다. 클라이언트 측에서 전달받은 토큰을 저장해두고, 서버..
·Java
들어가며자바 라이브러리 중에는 close 메서드를 호출해 직접 닫아주어야 하는 자원이 많다.InputStream, OutputStream, java.sql.Connection 등이 있는데, 자원 닫기는 클라이언트(여기서의 클라이언트는 우리 코드를 직접 작성해야하는 개발자이다)가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어지기도 하니 주의해야한다.이런 자원 중 상당수가 안전망으로 finalizer를 활용하고는 있지만, finalizer는 그리 믿을만 하지 못하다.finalizer에 대해서 알아보기 전에, close에 대해서 간단하게 알아보자. 그냥 단순히 close를 해주면 문제가 생길 수 있다!보통 나는 지금까지 close 를 사용하면 아래 코드처럼 사용하였는데.. 이는 잘못된 사용방법이다.Buffe..
·Java
최근 프로젝트에서 REST API의 DTO를 개발하며 불변객체를 사용하는게 적합하다고 생각했고, 그 이유에 대해서 공유하고 싶어서 글을 쓰게 되었다. 불변객체(Immutable Object)가 뭘까?객체가 생성된 이후 내부 상태가 일정하게 유지되는 객체 즉, 객체가 생성되고 파괴될 때까지 동일한 동작을 할 것을 보장하는 객체라는 뜻이다. 불변객체는 내부 상태를 조회하는 메서드는 가질 수 있지만 setter같은 내부 상태를 변화하는 메서드는 가질 수 없다. 일정한 상태를 유지하기 때문에 멀티 스레드 환경에서 안정적이고, side-effect가 적다. Java에서의 불변객체는?자바에서는 field의 값의 변경을 막지 않기 때문에, final 키워드를 사용하여 내부 field의 값을 변경하는 것을 막을 수 있..
·Java
들어가며 😊정적 팩토리 메서드와 생성자는 선택적 매개변수가 많을 때, 적절히 대응하기가 어렵다는 단점이 있다.그래서 이런 경우에는 점층적 생성자 패턴, 자바 빈즈 패턴, 빌더 패턴을 사용해서 대응할 수 있다.우선, 점층적 생성자 패턴, 자바 빈즈 패턴, 빌더 패턴을 살펴보고 어떤 상황에 사용할지 알아보도록 하자.점층적 생성자 패턴이란? (telescoping constructor pattern) 😁점층적 생성자 패턴은 나도 많이 사용했었고, 가장 많이 사용되어지고 있는 방식이다.코드로 설명하자면public class NutritionFacts { private final int servingSize; // 필수 private final int servings; // 필수 p..
·Java
팩토리 메서드 패턴이란?객체들을 생성하는 팩토리 인터페이스가 있고 인터페이스를 구현하는 클래스들이 객체 생성의 책임을 가진다.자바를 공부하면서 디자인 패턴은 항상 뜬구름 잡는 소리처럼 들린다. 실제 코드에 디자인 패턴을 적용할 만한 로직이나 큰 프로그램 규모를 경험해보지 못해서 일지도 모른다. 이번 글에서는 내가 공부하며 이해한 팩토리 메서드 패턴에 대해서 설명해보려고 한다.팩토리 인터페이스에는 하위 클래스들이 상속받아 구현해야 하는 생성 메서드가 정의되어 있다. 그리고 이 인터페이스를 하위 클래스들이 구현하여 실제 객체 생성은 하위 클래스들에서 담당한다. 인터페이스에서 정의하고 하위 클래스들에서 구현하여 생성해야 하기 때문에 팩토리 메서드에서 생성하는 객체들은 상속관계여야 사용 가능하다는 제약사항이 있..
월월월월2
'Java' 카테고리의 글 목록