💡자바의 컬렉션 프레임워크를 공부하다가 전략 패턴(Strategy Pattern)이라는 디자인 패턴을 알게 되었다.전략 패턴을 설명하는 여러 문장 중 유독 인상 깊었던 문장이 있다.전략 패턴은 알고리즘을 클라이언트 코드의 변경 없이 쉽게 교체할 수 있다. 처음에는 단순히 구현체를 쉽게 교체할 수 있다는 의미로 받아들였는데 김영한 슨생님의 말이 인상깊었다."재사용성을 높이려면 나중으로 미뤄라."-대영한-프론트엔드 개발자로 근무하면서 사용자 경험을 중시함과 동시에 개발자 경험(DX)도 깊이 생각하게 되었는데 그 경험을 떠올리는 말이었다.전략 패턴이 더욱 DX 향상에 가깝단 생각이 들기도 👀 1. 재사용성을 높이려면 무엇을 미뤄야 하나?우리는 이미 여러 방법으로 결정을 나중으로 미루는 코드를 작성하고 있..
📦자바를 공부하면서 여태 제네릭과 와일드카드를 대충 감으로만 잡고 넘어가던 것들을 이번에 공부면서 개념을 탄탄하게 다질 수 있었다.그런데 제네릭 메서드와 와일드카드 메서드를 각각 언제 쓰는 게 가장 베스트인지에 대한 궁금증이 생겼다.이 두 방식의 차이와 선택 기준을 깔끔하게 정리해 보았다. 1. 예제 코드 살펴보기상위 클래스인 Fruit와 이를 상속받는 Apple, Banana가 있고, 과일을 담는 FruitBox 클래스가 있다.그리고 이 상자의 정보를 출력해 주는 FruitPrinter 클래스를 작성했다.public class FruitPrinter { // V1: 제네릭 메서드 방식 public static void printV1(FruitBox box) { box.show..
🧩자바에서 문자열을 연결할 때 + 연산자를 사용하면내부적으로 StringBuilder를 통해 최적화가 이루어진다고 배웠다.이 최적화 과정이 그래서 컴파일 시점에 이루어진다는 것인지? 궁금증이 생겼다.또 Java 9부터는 StringConcatFactory를 사용하는 방식으로 변경되었다고 하는데이 방식 역시 어느 시점에 동작하는지 궁금해졌다. 1. Java 8에서는 컴파일 시점에 StringBuilder로 변환한다String str1 = "hello";String str2 = "world";String result = str1 + str2;일반적인 String 변수의 경우 변수 안에 어떤 값이 들어있는지 컴파일 시점에는 알 수 없기 때문에 단순히 합칠 수 없다. 컴파일러가 위 코드의 str1 + str2..
🏠기존에 오라클로 홈서버를 만들었었다. 요기AWS로 환경을 변경하면서 MySQL로 마이그레이션을 하게 돼서 MySQL로 홈서버를 구축했다. 처음에는 오라클 환경처럼 공유기 포트포워딩으로 MySQL의 3306 포트를 외부에 공개하려 했지만이번에는 Tailscale이란 신세계를 접하게 되어 Tailscale을 사용해 구축했다. 💭Tailscale을 이용하면 인터넷 상에 포트를 공개하지 않고 팀원만 안전하게 접속할 수 있다.팀원은 내 컴퓨터의 공인 IP나 공유기 내부 IP로 접속하지 않고 Tailscale이 발급한 100.x.x.x 형태의 전용 IP로 MySQL에 접속한다.Tailscale을 사용하면 공인 IP가 변경되어도 영향을 받지 않기 때문에 IP가 변경될 걱정을 하지 않아도 된다! MySQL 외부..
React에서 API를 다루다 보면 데이터를 조회하는 것만큼 데이터를 생성하거나 수정하고 삭제하는 작업도 자주 발생한다.TanStack Query에서는 데이터를 조회할 때 useQuery를 사용하고 서버의 데이터를 변경할 때 useMutation을 사용한다.처음 useMutation을 접했을 때는 단순히 POST나 PUT 요청을 보내는 함수 정도로 생각했는데실제로 사용해 보니 요청 상태 관리부터 성공/실패 처리, 기존 Query 캐시 갱신까지 함께 처리할 수 있어 꽤 편리하다고 느꼈다.이번 글에서는 useMutation의 기본적인 사용법과 실제 프로젝트에서 자주 사용하는 패턴을 정리해보려고 한다.useMutation이란?useQuery와 useMutation의 차이를 간단하게 정리하면 다음과 같다.🟠 ..
📌자바 교육을 시작으로 개발자의 길에 들어섰지만 프론트엔드로 전향하니 자바를 거의 다 까먹었다..풀스택 기반으로 자바/스프링+리액트 환경의 개인 프로젝트를 진행하면서추가로 인프런에서 자바 강의를 듣고 있는데 유독 static 에 대해 물음표가 떴다.main()에서도 당연하게 사용하고 있지만 막상 static이 붙었을 때와 붙지 않았을 때 어떤 차이가 있는지,왜 어디선 붙이고 어디선 안 붙이는지 헷갈리는거다.그래서 정리해보는 글. static이란?static은 객체가 아니라 클래스 자체에 소속되도록 만드는 키워드다.MyInteger num = new MyInteger(10);num.getValue();자바에서 일반적인 필드와 메서드는 위 코드처럼 객체를 생성한 뒤 사용할 수 있다. MyInteger.s..