JAVA) 자바에서는 Call By Reference가 불가능 합니다.

Intro 사실 자바를 처음 배우고나서 최근까지도 함수를 호출 하여 파라미터가 전달 될 때에 primitive 타입인 경우에는 value가, 그 외에는 reference가 전달 된다 라고 알고 있었습니다. 자바에서의 Primitive 데이터 타입들 byte short int long float double boolean char String의 경우에만 String pool을 통해 immutable로 관리되기 때문에 primitive가 아님에도 call by reference가 되지 않지만 Java) String의 Immutable이 의미하는 것 그 외에는 reference가 넘어간다고 알고 있었는데요 그 개념 하에서는 LinkedNode 나 Trie 등을 다루는 메서드를 짤 때 마다 뭔가 생각한 대로 동..

Programming/Java 2022.06.06
Kotlin) Data class 에 기본 생성자 만들기

Intro Kotlin과 SpringBoot를 활용해 스프링 시큐리티를 공부하고 있습니다. 아직은 코틀린에 익숙하지가 않아 자바로 된 코드를 코틀린으로 작성 할 때는 한번씩 꽤나 막히는 부분이 있는데, 이번에는 기본 생성자를 찾지 못한다는 오류가 발생했습니다. 생성자가 없다는 오류 기본 생성자를 찾지 못해 에러가 발생하고 있었는데요.. 자바였다면 그냥 @NoArgsContructor 라는 롬복 어노테이션 하나만으로도 해결 할 수 있는 이 상황을 코틀린에서는 어떻게 해결 해야 할까요? 문제의 원인이 된 상황과 해결 방법을 확인 해 보겠습니다. 원인 일단 발단이 된 코드는 아래와 같습니다. jackson 라이브러리를 활용해 request의 reader를 그대로 읽어 AccountDto 로 변환 하는 과정 인..

Programming/Kotlin 2022.05.25
JAVA) Date 를 LocalDateTime 으로, 혹은 그 반대로 변환하기

Intro 제법 오래된 프로젝트를 유지보수 하고 개선하다보니, Date 타입을 다루어야 할 일이 제법 많이 있습니다. Date API는 JDK 1.0 부터 제공된 유구한 역사를 가진 클래스인데요, 워낙 문제가 많다보니 JDK 1.1에서 바로 Calendar 클래스가 추가 되며 Date의 많은 메서드들을 @Deprecated 시켜버렸지만 여전히 오랜기간 꾸준히 애용되어 왔습니다. 그러다 마침내 JDK 1.8 버전에서 JodaTime 의 날짜와 시간 API가 추가되면서 LocalDateTime 이나 LocalDate를 사용 할 수 있게 되었습니다. 기존에 있는 Date를 걷어낼 수 있으면 참 좋겠지만, 그럴 여유가 없을 경우에는 일단 새로 작성하는 코드들에서 최대한 Date 사용을 피하지만, 어쩔 수 없이 ..

Programming/Java 2022.05.23
Spring) 스프링의 "redirect:" 리다이렉트 처리

Intro Spring Framework 를 사용한다면 컨트롤러에서 리턴타입은 String으로 하고 view 이름 대신 "redirect:" 로 시작하는 문자열을 반환 하면 해당 주소로 리다이렉트를 시켜 줍니다. "redirect:" 를 했는데 리다이렉트가 되지 않고 있다는 질문을 받아서 코드를 확인해보는데, 일단 redirect에 오타는 없었습니다. 그러면 혹시 @ResponseBody 어노테이션이 적용된건지 확인을 하는데 그렇지 않기에 코드를 맨 위로 올려보니 아니나 다를까 @RestController 어노테이션이 보였습니다. 이럴땐 간단하게 @Controller로 바꾸고 필요한 부분들에만 @ResponseBody 어노테이션을 작성 하거나 아니면 리턴타입을 ResponseEntity로 하는 방법이 있..

Programming/JPA ⁄ Spring 2022.05.13
Java) HashMap에서 특정 value를 제거하기

Intro Map에서 특정 key를 가진 EntrySet을 제거하는건 어렵지 않습니다. map.remove(삭제할key객체) key로 제거 하는 것 뿐만 아니라, key와 value를 모두 인자로 넘겨서 해당하는 key-value 쌍이 있을때에만 제거하는 방법도 있습니다. 그렇다면 특정 값만 제거 하고 싶다면 어떻게 해야 할까요? values().remove(Object value) 단순 궁금증에 values()로 값들이 들어있는 컬렉션 객체를 불러 온 뒤에, 거기에서 remove 메서드를 호출 해 보았는데 정말 감쪽같이 key, value 쌍이 모두 사라졌습니다. values는 제거가 될 거라고 생각했지만, keySet은 변화가 있기 때문에 오류가 발생하거나 혹은 문제가 생길 거라고 예상 했는데 기대한..

Programming/Java 2022.05.13