[개발 일기] 2025.02.26 - Dangling quantifier '+’ 에러
·
개발 일기
💡 개요오늘은 알고리즘을 풀 때 split() 메서드를 사용하다가 마주친 Dangling quantifier '+’ 에러에 대해 정리해 보자.   📕 Dangling quantifier '+’Dangling quantifier '+’ 에러를 마주치는 상황은 다음과 같다.  String s = "10+10+10";String[] arr = s.split("+"); // 에러 발생  split() 메서드의 입력 매개변수는 정규 표현식으로 해석된다.  정규 표현식 내에서 “+” 는 직전 문자가 하나 이상 반복될 때 사용하는 수량자(quantifier)를 의미하기 때문에, “+”를 정규 표현식에서 단독으로 사용할 경우 에러가 발생한다.  즉, 난 String s 를 “+” 을 기준으로 문자열을 분리하려고 했..
[개발 일기] 2025.02.25 - 전략 패턴
·
개발 일기
💡개요오늘은 자바에서 사용되는 디자인 패턴인 전략 패턴에 대해 정리해 보자.   📕 전략 패턴자바에서 전략 패턴이란, 실행 시점에 적절한 전략을 선택하여 유연하게 변경하거나 추가할 수 있도록 하는 디자인 패턴이다.  전략 패턴에서 각 기능을 담당하는 개별 전략은 단순히 전략이라기보다는 하나의 알고리즘으로 이해하는 것이 더 직관적이다.  다음은 전략 패턴을 도입했을 때, 클라이언트가 의존하는 전략과 관련된 다이어그램이다.   전략 패턴을 적용하면, 클라이언트는 Context만을 의존하게 되어 구체적인 전략(알고리즘) 구현에 대한 결합도를 낮출 수 있다.  이를 통해 새로운 전략을 쉽게 추가하거나 변경할 수 있으며, 코드의 유연성과 확장성이 향상된다.   🚀 전략 패턴 적용 다음은 전략 패턴 예시 코드..
[개발 일기] 2025.02.24 - == 연산자 vs Objects.isNull()
·
개발 일기
💡 개요오늘은 자바에서 null 여부 반별에 사용하는 == 연산자와 Objects.isNull() 메서드에 대해 정리해 보자.   📕 == 연산자== 연산자는 객체의 참조값을 비교한다.  만약 참조형 타입의 객체가 null이라는 것은 JVM의 힙 영역에 아무런 값을 참조하고 있지 않다는 의미이다.  다음은 == 연산자를 사용해 null 여부를 판별하는 코드이다.  String s = null;if (s == null) { System.out.println("== 연산자");} [결과]== 연산자  보다시피 정상적으로 null 여부를 판별한다.   📕 Objects.isNull()다음은 Objects.isNull() 메서드를 사용한 null 여부 판별 코드이다.  String s = null;i..
[개발 일기] 2025.02.23 - @Builder를 사용하면 생성자가 private이라도 외부에서 접근 가능한 이유?
·
개발 일기
💡 개요자바에서 많은 멤버변수를 가진 클래스 객체를 생성할 땐 가독성과 매개변수 파악을 위해 빌더 패턴을 자주 사용한다.  오늘은 이 빌더 패턴을 사용하는데, 생성자가 private 이라도 클래스 외부에서 접근 가능한 이유에 대해 정리해 보자.   📕 new() vs Builder빌더 패턴이란 객체 생성과정에서 많은 매개변수를 입력해야 할 땐, 잘못된 매개변수를 입력할 가능성이 있다.  이런 상황을 대비하고, 객체 생성을 더 안전하게 하기 위해 만들어진 디자인 패턴이다.   🚀 new 메서드 다음은 많은 멤버 변수를 사용하는 Member 클래스와 생성자이다.  class Member { private Long id; private String name; private String n..
[개발 일기] 2025.02.22 - JPA Entity 기본생성자
·
개발 일기
💡 개요Spring에서 JPA를 사용할 때, 엔티티에는 반드시 기본생성자가 필요하다. 왜 그럴까?   📕 JPA EntityJPA(Java Persistence API)는 자바 객체(엔티티)와 데이터베이스의 테이블을 매핑하는 ORM 기술로, 따로 쿼리문을 작성하지 않고 테이블에 접근하게 해 준다. 자바 객체 ↔ JPA ↔ 데이터베이스 테이블 그렇기 때문에 JPA에서 테이블에 접근하기 위해선 반드시 엔티티가 필요하다.  이러한 엔티티에 기본 생성자가 반드시 필요한 이유는 크게 두 가지가 있다.   🚀 리플렉션 첫 번째는 JPA의 엔티티 객체 생성 방식인 리플렉션이다.  자바의 리플렉션이란 컴파일 시점이 아니라 런타임 시점에 클래스에 접근하는 API이다.  클래스 정보를 가져오는 방법은 다음과 같다. ..
[개발 일기] 2025.02.21 - CDN(콘텐츠 전송 네트워크)
·
개발 일기
💡 개요오늘은 네트워크 기술인 CDN에 대해 정리해 보자.   📕 CDN (Content Delivery Network)CDN이란 Content Delivery Network의 약자로 물리적으로 거리가 먼 콘텐츠를 더 빠르게 제공하기 위해 사용되는 기술이다.  예를 들어, 서울에 데이터센터를 두고 있는 서비스가 있다고 가정해 보자.  이때, 런던에 있는 사용자가 해당 서비스에 접속하려고 하면, 물리적인 거리로 인해 지연 시간이 발생할 가능성이 크다.  이러한 문제를 해결하기 위해 CDN은 원본(origin) 서버의 데이터를 여러 지역에 분산하여 저장하고, 사용자와 가까운 서버에서 콘텐츠를 제공한다.  즉, 런던과 가까운 곳에 데이터센터를 배치하고, 원본 서버의 데이터를 해당 데이터센터에 동기화함으로써..