Java

Java

[Java] 리플렉션 공부

상황) SQL로 Select했을 때 name 칼럼에 클래스의 변수명이 들어있어서 DTO에 넣으려면 name 칼럼의 값을 확인하고 DTO와 매칭 시켜서 값을 담아주어야 한다. 과정) 하나하나 setter로 모두 담아주려고 보니 코드가 길어지고 가독성이 떨어지는 것 같아서 한번에 담을 수 없을까라는 생각에 리플렉션을 공부하게 되었다. 리플렉션이란? 리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API 리플렉션을 언제 사용하는가? 정적 언어인 자바를 동적인 문제로 해결해야 하는 경우가 있는데 이때 리플렉션을 사용한다고 한다. 클래스의 변수 명을 비교한 뒤 값을 넣어주어야 하는 나의 상황도 이러한 상황이라고 할 수 있을 것 같다. 리플렉션은 ..

Java

ObjectMapper

Jackson에서 제공하는 클래스이고, Java 클래스 내용을 확인하거나 파싱하는 과정에서 Object를 Json으로 변환하거나 Json을 Object로 변환할 때 사용한다고 한다. Dependency 추가 jackson-databind Object ➡️ Json ObjectMapper objectMapper = new ObjectMapper(); User user = new User("meanji", 100); objectMapper.writeValue(new File("user.json"), user); String userAsString = objectMapper.writeValueAsString(user); Json ➡️ Object String json = "{ \"name\" : \"meanj..

Java

@PostConstruct, @PreDestroy

@PostConstruct Spring은 빈 속성 초기화 직후에 @PostConstruct로 주석이 달린 메서드를 한 번만 호출한다. (초기화할 항목이 없는 경우에도 메서드 실행) @PostConstruct가 있는 메서드는 static 할 수 없다. 기본 사용자를 만들기 위해 사용하는 예시) @Component public class DbInit { @Autowired private UserRepository userRepository; @PostConstruct private void postConstruct() { User admin = new User("admin", "admin password"); User normalUser = new User("user", "user password"); us..

Java

UnrecognizedPropertyException

ObjectMapper로 JsonNode를 Class에 넣어주는 코드에서 UnrecognizedPropertyException 가 발생했다. mId라고 분명 클래스에 저장했는데, mid라고 인식하는 것 때문에 필드명 에러를 뱉어냈다. @JsonIgnoreProperties를 선언하면 무시하고 작업을 수행한다. 하지만, mId가 null로 들어가기 때문에 @JsonProperty를 써서 직접 mId로 지정 해주었다. @Getter @Setter @JsonIgnoreProperties(ignoreUnknown = true) public class PaymentInfoDTO { @JsonProperty("mId") String mId; }

Java

JsonNode to Object

JsonNode는 Jackson 라이브러리에서 제공하는 객체이다. 토스페이먼츠 결제 후 반환 값이 JsonNode로 반환되는데, 잘 몰라서 아래의 대참사를 만들어냈다 (허허) 찾아보니 JsonNode를 클래스 객체로 변환할 수 있었다. (jackson 라이브러리 추가되어 있어야 한다!) import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jacdson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; // 클래스 생략 public PaymentInfoDTO JsonNodeToObject(successNode) { try { ObjectMa..

Java

mac 자바 8 설치

자바 8 설치 방법 이 곳에서 macOS를 선택한 뒤 jdk-8u321-macosx-x64.dmg를 다운로드 다운로드 후 열고 설치를 진행 설치를 마친 뒤 터미널에 다음 명령어를 입력하면 설치된 자바를 모두 확인할 수 있다. /usr/libexec/java_home -V 자바 버전 변경 방금 설치한 자바로 버전을 변경하기 위해 터미널에 다음 명령어를 입력한다. export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) 자바 8과 자바 1.8 차이 예전부터 자바 8이 왜 1.8일까 궁금했는데 찾아보니(참고) 11 부터는 그냥 11로 사용하고 8은 1.8, 7은 1.7, 6은 1.6 --- 이런식으로 사용한다고 한다. 8은 Version Number이고 이 버전에 대한 Vers..