자바 라이브러리에는 직접 close 메서드를 통해 닫아줘야 하는 것들이 많다. 가장 쉽게 접할 수 있는 Scanner 클래스부터 객체를 사용한 후 close 메서드를 통해 닫아줘야 한다. 이외에도 InputStream, OutputStream, java.sql.Connection 등 다양한 것들이 존재한다. 자원을 사용한 후 close 메서드 호출을 통해 닫아주는 것을 가볍게 생각하면 안된다. 왜냐하면 예측할 수 없는 성능 문제로 이어질 수 있기 때문이다. try-finally 전통적으로 자원을 사용한 후 닫기 위한 방법으로 아래 예제코드와 같은 try-finally를 많이 사용했습니다. static String firstLineOfFile(String path) throws IOException { B..
C, C++에서와는 다르게 JAVA에서는 GC(가비지 컬렉터) 덕분에 메모리 관리에서 어느정도 벗어나 프로그래밍에 더욱 집중할 수 있다. 하지만, 그렇다고 해서 JAVA는 메모리 관리를 하지 않아도 된다고 오해해서는 절대 안된다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { this.elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push() { ensureCapacity(); elements[size++] = e; } public ..
제목에서 느낄 수 있듯이 객체를 생성하는데도 컴퓨터 자원이 필요하기 때문에 이를 최소화하기 위한 아이템이다. 제목 그대로 불필요한 객체를 매번 생성하는 것이 아니라 하나의 객체를 재사용 함으로써 더 빠르고 세련된 코드를 짤 수 있다. (불변 객체는 언제든 재사용할 수 있다.) String s = new String("ch4njun"); String s = "ch4njun"; 위 코드에서 첫 번째 코드는 절대 하지 말아야할 극단적인 예시이다. 생성자를 통해 만들려는 객체는 인자로 넘긴 "ch4njun"과 기능적으로 완벽하게 동일한 객체이기 때문이다. 첫 번째 코드를 사용할 때마다 새로운 String 객체를 만드는데 모두 "ch4njun"과 동일한 기능을 가지는 객체가 된다. 즉 첫 번째 코드가 호출됨으로써..
JWT 토큰 인증방식을 위한 두 가지 방법을 소개하려고 한다. 첫 번째는 기본적으로 Spring Security를 이용해 인증을 구현하는 방식이고, 두 번째는 API Gateway에서 토큰 인증을 구현하는 방식이다. 차례로 살펴보고 그에 대한 장단점을 이야기해보도록 하자. Spring Security를 이용한 방법 들어가기에 앞서 SecurityConfig, 즉 WebSecurity Configuration에 설정줘야 하는 코드를 먼저 살펴보자. 기본적으로 Spring Security를 사용해 로그인 시스템을 구현했기 때문에 관련코드와 함께 있다. 첫 번째 네모를 통해 해당 Filter에서 인터셉트할 URL(/api/*/**)와 인터셉트하지 않을 URL들을 정해주도록 구성한다. 즉, 로그인과 회원가입에 ..
우선 제목은 거창하지만 사실 내용은 별거 없다... 옛날에 프로젝트를 진행할 때 Spring Security를 사용해 로그인 시스템을 구현한적이 있는데 최근 인프런 강의에서 Spring Security를 사용해 로그인 시스템을 구현하는 것을 공부하게 되었다. 물론 사람마다 코드를 짜는 방식이 다르겠지만 내가 프로젝트에서 사용한 방법과 인프런 강의에서 소개된 방식의 차이를 알아보고자 이번 포스팅을 작성하게 되었다. 첫 번째 방법 첫 번째 방법은 아래 링크에서 소개했던 방식으로 자세한 내용을 확인하려면 아래 링크를 확인하면 된다. https://ch4njun.tistory.com/228 [Spring Boot] Spring Security Vue.js와 Spring Boot를 사용 해 진행중인 나의 프로젝트..
이번 포스팅은 제목에서 무슨말을 하려 하는지 충분히 이해가 되리라 생각한다. 그럼 간단하게 인스턴스화를 막아야하는 상황에는 어떠한 것이 있는지 살펴보도록 하자. 정적 메서드와 정적 필드만 담은 클래스를 구성하고자 할 때 인스턴스화를 막을 수 있다. 정적 메서드와 정적 필드만 포함되어 있다면 이러한 코드들은 인스턴스를 생성하지 않아도 이미 메모리에 올라가있는 상태로 사용할 수 있다. 따라서 인스턴스화할 이유가 없는 것이다. (이 방법 자체가 객체 지향적으로 사고하지 않는 것이기 때문에 추천하진 않지만 쓰임새가 분명히 존재한다.) 예를 들면 아래 상황에서 위와 같이 정적 메서드와 정적 필드만 담은 클래스를 구성할 수 있다. java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 관련..