전체 글 54

제네릭을 활용한 열거 타입 예제

한정적 타입 토큰 & Operation>자바 제네릭스 문법에서 사용되는 상한 경계(bound) 지정 구문이다.이 구문은 제네릭 타입 T가 두 가지 조건을 모두 만족해야 함을 나타낸다:Enum의 서브타입이어야 한다.Operation 인터페이스를 구현해야 한다.이 구문을 사용하면 T는 반드시 열거형(enum)이면서 동시에 Operation 인터페이스를 구현한 타입이어야 한다.이를 통해 열거형 타입에 대한 제네릭 클래스나 메서드를 정의하면서도, 해당 타입이 특정 인터페이스를 구현하도록 강제할 수 있다. Operation 인터페이스 정의public interface Operation { double apply(double x, double y);} Operation을 구현하는 Enum 정의public en..

ParameterizedTypeReference와 실체화 불가 타입

ParameterizedTypeReference는 스프링 프레임워크에서 제공하는 클래스로, 제네릭 타입을 갖는 객체의 타입 정보를 보존하기 위한 목적으로 사용된다. 주로 제네릭 타입을 갖는 클래스나 메서드를 호출하고 그 결과를 가져올 때 사용된다.일반적으로 자바의 제네릭은 런타임에 소거되기 때문에, 제네릭 타입에 대한 정보를 동적으로 추출하기 어렵다.하지만 ParameterizedTypeReference를 사용하면 런타임에 제네릭 타입 정보를 유지할 수 있다. 사용 예시ParameterizedTypeReference를 사용하는 예시를 살펴보겠다.스프링의 RestTemplate을 사용하여 HTTP 요청을 보내고, 응답을 받을 때 제네릭 타입을 유지하고 싶은 경우에 사용할 수 있다. import org.sp..

아이템 31 한정적 와일드카드를 사용해 API 유연성을 높여라

// E 생산자(producer) 매개변수에 와일드카드 타입 적용public void pushAll(Iterable src) { for (E e : src) push(e);}// E 소비자(consumer) 매개변수에 와일드카드 타입 적용public void popAll(Collection(? super E) dst) { while (!isEmpty()) dst.add(pop());} Stack 클래스의 메소드를 한정적 와일드카드를 사용해 구현했다.간단한 예제지만, 헷갈리는 부분들을 분명하게 공부하고 넘어가고자 한다. 제네릭에서의 생산자(producer)와 소비자(consumer)생산자(producer) 생산자는 데이터를 "생산"하여 제공하는 역할을 한다. 즉, 컬렉션이나 객체로부터 데이터를 추출하거나 ..

Nuxt 3 완벽 마스터 복습 항목 2

1. nuxtApp 프로그램이 실행되는 동안의 정보를 갖고 있는 객체 https://nuxt.com/docs/guide/going-further/nuxt-app NuxtApp · Nuxt Advanced In Nuxt 3, you can access runtime app context within composables, components and plugins. nuxt.com 2. plugins auto-import 적용 ,, 하지만 중첩 디렉토리가 있다면 nuxt.config.js에서 수동으로 등록해줘야 한다. 등록 순서는 알파벳 순 .. 하지만 병렬 등록도 할 수 있음. 3. GA 관련 활용 참고 'vue-gtag' https://gymcoding.notion.site/Nuxt-plugins-uti..

Nuxt 3 완벽 마스터 복습 항목

0. 아래 코드는 왜 내가 생각한 대로 작동하지 않을까 ? watchEffect(() => { const { data } = useAsyncData("fetch1", () => $fetch("https://jsonplaceholder.typicode.com/posts", { params: { page: id.value, }, }) ); console.log(data); console.log(id); }); 1. auto-imports 2. 페이지 이동 이벤트 => script에 라우터 이동 함수를 만들어서 click 이벤트로 거는 것 보다, 로 감싸서 이동 이벤트를 거는 것이 SEO 최적화에 유리하다. 3. Nuxt alias https://nuxt.com/docs/api/nuxt-config#alias..

[Next.js] Next14에서 Route Handlers 사용해보기

쇼핑몰 프로젝트에서 이니시스 PG를 이용한 결제 시스템을 구축하고 있었다. 모바일 기준이긴 하지만 대충 요런 구조로 구축을 하면 된다. 여기서 P_MID, P_OID같은 속성 값들만 PC에 맞게 바꿔주면 되는거고, 기본적인 처리 순서는 동일하다. 주문서에서 PG창을 띄우는 것 까지는 수월했다. PG창에서 사용자가 인증한 인증 결과 값을 수신할 수 있도록 PG창을 띄울 때 파라미터로 returnUrl을 보내는데, 이 부분을 어떻게 넘겨야 할지 미궁에 빠졌다. 만약, spring 서버의 컨트롤러로 view 페이지로 리다이렉트 하는 구조라면 controller의 mapping url을 적으면 그만이다. 그리고, Nuxt.js 2 같은 경우도, asyncData라는 SSR로 들어오는 데이터를 받을 수 있는 내장..

아이템 13 clone 재정의는 주의해서 진행하라

자바에서 Object 클래스의 clone() 메서드는 해당 객체를 복제하는데 사용된다. 그러나, Object 클래스의 clone() 메서드는 복제될 객체가 Cloneable 인터페이스를 구현하고 있지 않으면 'CloneNotSupportedException'을 던진다. 즉, 해당 객체가 clone() 메서드를 구현하기 위해서는 Cloneable을 implements 해야한다. 그런데, Cloneable을 구현하는 것만으로는 외부 객체에서 clone 메서드를 호출할 수 없다. 왜냐하면, Cloneable은 인터페이스 자체가 메서드를 갖지 않는 마커 인터페이스이기 때문이다. 마커 인터페이스란? 메서드를 갖지 않는 인터페이스로, 해당 인터페이스를 구현한 클래스가 특정한 특성이나 동작을 갖고 있음을 나타낸다. ..

아이템 12 toString을 항상 재정의하라

Object의 기본 toString 메서드는 '클래스_이름@16진수로_표시한_해시코드' (ex: PhoneNumber@adbbd)같은 형식을 반환한다. toString 메서드는 객체를 println, printf, 문자열 연결 연산자(+), assert 구문에 넘길 때, 혹은 디버거가 객체를 출력할 때 자동으로 불린다. toString은 해당 객체에 관한 명확하고 유용한 정보를 읽기 좋은 형태로 반환해야 한다.

아이템 11 equals를 재정의하려거든 hashCode도 재정의하라

equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으킬 것이다. equals 비교에 사용되는 필드를 고려해서 논리적으로 동일한 객체끼리는 동일한 hashCode를 갖게 구현해야 한다. 전형적인 hashCode 메서드 @Override public int hashCode() { int result = Short.hashCode(areaCode); // 1 result = 31 * result + Short.hashCode(prefix); // 2 result = 31 * result + Short.hashCode(lineNum);..