본문 바로가기

Programing

(403)
[Gson] List 타입 추론 방법 feat Super Type Tokens Gson deserialize 하는 코드를 보면서 항상 이상했다. gson.fromJson 호출을 할 때, 아래와 같은 이상한 형태의 객체를 두 번째 파라미터로 넘기고 있었기 때문이다. new TypeToken(){}.getType() 객체를 매번 만드는 것도 그랬고, 만든 객체가 아닌 타입을 호출하는 것도 이상해보였기 때문이다. 오늘 삽질을 하고 나서 왜 이렇게 하는 것과 해결 방법에 대해 알게 되었다. 왜 이런 방법을 할까? 자바 객체의 List 타입의 경우 JSON 형태로 serialize 하면 배열의 형태로 바뀐다. 이것은 특별한 규칙이 없어도 가능하다. 하지만 반대의 경우 어떤 객체로 바꿔야 하는지 타입을 받아야 한다. 하지만 타입만 받을 때는 문제가 없지만 List와 같이 Generic 타입을..
[Java] Inner class 에도 main 함수(진입점)이 가능하나? package goharrm; public class Outer { static class StaticInner { public static void main(String[] args) { System.out.println("main method of Static inner class is running"); } } public static void main(String[] args) { System.out.println("main method of outer class is running"); } } 내부 클래스에 대한 질문을 계속 올리는 난바 님이 제목과 같은 질문을 올렸다. 사실 뭐가 문제냐는 질문이지만 특별히 문제가 없다. 코드는 다음과 같다. 콘솔에서 실행 이전 글인 [Java] Inner cl..
[Java] Inner clsss의 접근 범위 네이버 카페에 다음과 같은 질문이 올라왔다. 코드는 아래와 같다. 아래 처럼 밖의 클래스(Outer)안의 메서드에 정의된 내부 클래스를 지역 내부 클래스(Local inner class)라고 부른다. public class Outer { private int a = 1; private static int b = 2; public void method1() { int c = 3; class Inner { public void method2() { System.out.println("sum: " + (a + b + c)); } } Inner i = new Inner(); i.method2(); } public static void main(String[] args) { Outer O = new Outer()..
[Java] 통화 표준 및 통화코드 그리고 Currency 클래스 결제 관련 개발을 하면서 410이라는 코드를 많이 접하게 되었다. 비단 한 PG 뿐만 아니라 광범위하게 사용되고 있음을 알게 되었다. 간단한 구글링으로 410 이라는 코드는 ISO 4217에 있는 숫자형태의 통화 코드라는 것을 알게 되었다. ISO 표준문서는 돈내야 열람 가능하지만 테이블 형태는 그냥 조회가 된다. Current currency & funds code list Currency 클래스에는 통화 관련 정보를 조회하는 로직과 구조이지 실제 데이터는 lib 디렉터리 하위에 currency.data 라는 바이너리 파일에 저장되어 있다. JDK 1.8이 설치되어 있는 mac OS의 경우는 아래 디렉토리에 있다. /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jd..
[Spring] 스프링 부트에서 SOAP 클라이언트 사용하기 최근에 내가 개발했던 웹서비스(클라이언트던 서버던 간에) RESTful 웹서비스였다.메세지의 포맷도 JSON으로 사실상의 표준(De facto)으로 자리잡은 듯하다고 느꼈다. 얼마전부터 멤버십 서비스 연동을 할 일이 있어서 타 사와의 업무를 진행하게 되었다.하지만 연동해야 하는 방식이 이제는 더 이상 안쓸 것 같다고 생각했던, 소켓(socket) 통신을 실 환경에서도 사용되고 있었다.좀 더 추상화된 레벨을 요구했더니 SOAN 기반의 웹서비스를 제공해주었다. SOAP과 RESTful 웹서비스가 익숙하지 않은 사람은 ETRI(한국전자통신연구원)에서 2010년에 출간한 비교 자료를 참고하면 좋다.SOAP with Spring Framework일반적인 스프링 서적중에 SOAP 웹서비스를 다루고 있는 책은 스프링..
[Jackson vs Gson] 오버라이딩한 메서드의 JSON serialize 테스트 기존에 JSON으로 만들던 객체에 메서드가 추가된다면 어떨까? 단순하게 생각하면 public 한 getter가 추가 되면 프로퍼티로 추가가 될 것 같다. 실험을 해보자. 테스트 DTO import lombok.Getter; import lombok.Setter; @Getter @Setter public class Apple { private String color; private int radius; } 1. Gson 및 Jackson 대조군 import com.fasterxml.jackson.databind.ObjectMapper import com.google.gson.Gson import spock.lang.Specification class AppleTest extends Specification..
[Lombok] @RequiredArgsConstructor 의 득과 실? 백기선 님이 YouTube에 올린 영상 중에 @RequiredArgsConstructor 관한 것이 있다. https://youtu.be/qmI7uJapocw 장점 생성자 주입을 사용하는 경우에는 중복해서 작성해야 하는 슈가 코드를 줄일 수 있다. 역으로 리팩터링하여 주입이 더 이상 안필요할 때 세 군데를 수정해야 할 것을 하나의 수정으로 해결 할 수 있다. @Service public class NamopayService { private final NamopayUrls namopayUrls; private final StoreCache storeCache; private final NamopayApi namopayApi; private final PaymentRepository paymentRepos..
[IntelliJ IDEA] 9000 포트의 사용 sonarqube를 로컬에서 테스트 할 일이 있어서 docker로 띄우려고 하는데 자꾸 에러가 난다. 자세히 살펴보니 누군가 9000포트를 사용하고 있다고 한다. 아래 명령으로 9000 포트를 LISTEN 하고 있는 프로세스를 찾아보았다. sudo lsof -i -n -P | grep TCP | grep 9000 범인은 IntelliJ 였다. 시간이 없어서 인텔리J를 종료하고 docker를 띄우니 정상적으로 떴다. 그런데 나중에 IntelliJ IDEA를 실행했더니 아래에 다음과 같은 메세지가 표시된다. 환경설정에서 찾아보니 PHP 하위에 Debug에 Xdebug라는 포트가 9000으로 설정되어 있었다. PHP 개발도 아닌데 이게 왜 활성화가 되어 있을까???