[Java] static 키워드 이해하기

Intro자바를 사용해 코드를 작성하다보면 static 키워드를 자주 마주하게 된다.하지만 이 키워드가 적절하지 않게 사용되는 경우가 종종 있는데, 이번 글에서는 static 키워드의 개념과, 언제 어떻게 사용해야 하는지 예제 코드를 통해 자세히 알아보겠다.static자바에서 static 키워드는 클래스의 멤버(변수나 메서드)를 클래스 레벨로 정의할 때 사용된다. 일반적인 클래스의 변수나 메서드는 인스턴스를 생성한 뒤에 접근할 수 있지만, static 키워드를 사용하면 클래스 인스턴스 없이도 해당 멤버에 접근할 수 있다.간단히 말해, static 멤버는 클래스 자체에 속해 있으므로 여러 인스턴스가 공유하는 특징을 갖는다. 인스턴스가 여러 개여도 static 변수는 딱 하나만 존재하고, 이를 모든 인스턴스..

Programming/Java 2024.11.10
Java의 텍스트 블록으로 간편하게 멀티라인 문자열 다루기

Intro코드를 작성하다 보면 SQL 쿼리나 JSON과 같은 긴 문자열을 사용해야 할 때가 많다. 기존에는 여러 줄의 문자열을 표현하려면 줄마다 문자열을 따로 작성하거나, 줄바꿈을 위해 \n과 같은 이스케이프 문자를 일일이 추가해야 해서 불편함이 있었다.이번 글에서는 Java 13부터 도입된 새로운 기능인 텍스트 블록 (Text Blocks) 에 대해 다룬다. 텍스트 블록은 멀티라인 문자열을 보다 간편하게 작성할 수 있는 기능으로, 가독성을 높이고 실수를 줄일 수 있는 여러 장점이 있다.멀티라인 문자열 처리Old Java이전까지 Java에서 멀티라인 문자열을 처리하는 것은 다소 번거로운 작업이었다. 예를 들어, SQL 쿼리를 작성해야 한다고 생각해 보자.String sql = "SELECT id, nam..

Programming/Java 2024.11.08
Java로 Tesseract를 활용한 OCR 구현하기

Intro최근에 점심 도시락 메뉴가 종종 궁금한데 확인하러 일일히 들어가는 건 번거로워서 슬랙 봇을 만들까 생각을 했다.점심 도시락 업체에서는 메뉴를 이미지로 웹사이트에 게시하고 있었고, 이 이미지를 가져오면 되는데, 이왕 하는 김에 텍스트로 변환까지 하면 더 좋겠단 생각이 들었다. 이를 위해 OCR(Optical Character Recognition) 기술을 활용했고, 그 과정에서 얻은 경험을 공유하려고 한다.OCR은 이미지나 PDF에 포함된 텍스트를 기계가 인식하여 디지털 텍스트로 변환하는 기술이다. 스캔된 문서, 사진 속 텍스트 등을 데이터로 활용할 수 있게 해주며, 문서 디지털화, 자동 번역, 데이터 입력 자동화 등 다양한 분야에서 활용되고 있다.TesseractTesseract는 HP에서 아주..

Programming/Java 2024.11.07
TreeSet에서 객체를 구별할 때 equals와 hashCode만으로는 충분하지 않다

Intro컬렉션을 사용할 때, 특히 중복을 허용하지 않는 Set을 사용할 경우, 우리는 보통 사용하는 클래스의 equals와 hashCode만 올바르게 오버라이드하면 된다고 생각한다. HashMap에서는 그랬을지 몰라도 TreeSet을 사용할 때는 상황이 조금 달라진다.TreeSet은 내부적으로 요소를 정렬하는 과정에서 compareTo 메서드를 사용하는데, 이를 간과하면 문제가 발생할 수 있다. compareTo 메서드는 단순히 정렬만을 위한 것이 아니라, 중복을 체크하는 데도 사용되기 때문이다.이 글에서는 TreeSet에 집어넣는 클래스의 equals, hashCode 뿐만아니라 compareTo에 대해서도 신경 써야 하는 이유에 대해 살펴본다.문제 상황TreeSet은 삽입된 데이터를 자동으로 정렬하..

Programming/Java 2024.09.29
스프링 시큐리티 필터가 2번 중복적용된 문제 해결

Intro JWT 토큰 값을 읽어서, 상황에 따라 인증하거나 만료되었다면 리프레시 토큰을 사용해 새로운 토큰을 발급받는 역할을 하는 JwtAuthFilter 를 만들어 등록해두었다. 시큐리티 필터체인에서 아래와 같이, AuthorizationFilter 이전에 등록해서 작동하도록 해 두었는데 http.addFilterBefore(jwtAuthFilter, AuthorizationFilter::class.java) 요청이 올 때마다 자꾸 해당 필터를 두번씩 거치는 문제가 있었다. 원인 간편하게 Bean으로 등록 해두고 사용하려고 클래스에 @Component 어노테이션을 붙여서 사용했는데 그게문제였다. 아래는 스프링 부트 도큐먼트에서 Filter에 관한 내용이다 https://docs.spring.io/sp..

Programming/JPA ⁄ Spring 2024.01.23