본문 바로가기

[Sonarqube] Functional Interfaces should be as specialised as possible 함수형 인터페이스는 가능하면 스페셜한 놈을 찾아써라... Core Java SE 9 For the impatient (가장 빨리 만나는 코어자바9)책에도 한 페이지지만 분명 언급되어 있었다. (158쪽) 기본 타입 int, long, double에 특화된 함수형 인터페이스 34개... 이것을 사용을 하면 오토박싱을 줄일 수 있어서 성능에 향상을 줄 수 있다. Current Interface Preferred Interface Function IntFunction Function LongFunction Function DoubleFunction Function DoubleToIntFunction Function DoubleToLongFunction Function LongToDoubleFunction Fu..
[Spring] Bean 생성시 필드주입 시점은? 객체의 생성은 프레임워크가 해준다. 문제는 프레임워크가 JVM을 넘어 마술을 부리는 줄 아는 경우가 있다. 아래 글을 읽어보면 결국 프레임워크도 JVM이 제공해주는 리플렉션 도구들을 이용해서 객체를 만들고 private 필드에 값을 설정함을 알 수 있다. 질문 import org.springframework.stereotype.Service; @Service public class TestService { public void print() { System.out.println("TestService - print"); } } import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype..
[Java8] toggle상태를 겸하는 함수를 함수형 인터페이스로 바꾸기 한번씩 경험해본 토글 함수가 있을 것이다. (참고로 토글이란 on/off 를 번갈아가는 상태를 가지는 것을 이야기한다.) 예를들면 윈도우가 사용가능(enable)과 사용불가능(disable) 두 가지 상태를 가질 수 있다. 이것을 EnableWindow(handle)과 DisableWindow(handle)로 만드는 대신 EnableWindow(handle, boolean)으로 해서 두 번째 인자가 true이면 enable로 만들고 false이면 disable로 만드는 식이다. Win32의 EnableWindow 함수도 그렇게 설계가 되었다. 오늘 개발을 하다가 이런 유혹에 살짝 빠졌다가 다른 방법으로 처리를 해서 정리해둔다. 요구사항은 Redis에 어떤 객체 값을 (짧은 임시기간) 저장을 해야했다. 그..
[Swift] Hours 5 - v1.2.1 : viewDidAppear 희찬님 환경에서 버전 정보가 여러개 붙는 버그를 발견했다. 그런데 나한테는 재현이 안된다. 처음에는 High Sierra에서만 발생하나 생각했다. 그러다가 원인을 찾았다. 앱버전을 붙이는 것을 viewDidAppear에서 수행하고 있었다. override func viewDidAppear() { super.viewDidAppear() let beforeTitle = self.view.window?.title let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String self.view.window?.title = "\(beforeTitle!) (v\(appVersion!))" } 문제는 애플리케이션이 Hide 상..
[IntelliJ IDEA] properties : resource bundle 지원(i18n) 자바에는 프로퍼티 파일로 다국어를 지원할 수 있다. 이클립스에서도 다국어를 쉽게 편집할 수 있는 플러그인이 있었다. 인텔리제이도 있을 것이라 생각했는데 단순히 그룹핑만 해주지 따로 별다른 기능이 없어 보였다. 딱히 컨텍스트 메뉴에는 관련 기능이 없다. 플러그인: Properties 혹시 플러그인을 설치해야 해서 Marketplace에서 검색을 해보니 JetBrains에서 제공하는 플러그인이 기본으로 설치되어 있었다. 단축키: F4 알고보니 단축키를 눌러야 했다. 자세한것은 Resource bundles 를 참고한다.
[spring] stream 사용 예, 하지만 없어졌지... ControllerAdviceBean#findAnnotatedBeans ~v5.0.9.RELEASE v5.0.9.RELEASE 까지는 enhanced for 로 구성이 되어 있었다. package org.springframework.web.method; public class ControllerAdviceBean implements Ordered { // ... /** * Find the names of beans annotated with * {@linkplain ControllerAdvice @ControllerAdvice} in the given * ApplicationContext and wrap them as {@code ControllerAdviceBean} instances. */ publi..
[spring boot] 에러처리기 스프링부트: BasicErrorController 스프링부트에는 기본 에러를 처리해주는 컨트롤러가 있다. 이름은 BasicErrorController 아래와 같은 계층 구조이다. 레퍼런스 29.1.11 Error Handling에서 자세한 내용을 볼 수 있다. 잘못된 URL에 요청을 보내면 아래와 같은 형식으로 출력을 한다. { "timestamp":"2019-10-14T07:06:11.132+0000", "status":404, "error":"Not Found", "message":"No message available", "path":"/membership/" } 이 에러 형식은 스프링 부트의 DefaultErrorAttributes가 수행한다. package org.springframework.b..
[macOS] Catalina 업데이트를 피해야 할 이유? iOS 13을 손꼽아 기다렸다. 왜냐하면 잘못 찍었던 동영상 회전 기능이 추가될 거라는 예정이었다. 업데이트 후 동영상 회전을 성공적으로 했지만 다른 문제들(예. 카플레이 화면 꺼짐과 같은 문제, 배터리 광탈, 앱이 갑자기 죽어버리는 현상 등)을 접했다. 이 글을 쓰고 있는 2019-10-14 시점에 버전은 13.1.2 이다. 개인적인 업데이트 이력 2019-09-20: 12.4.1 -> 13 2019-09-26: 13 -> 13.1 2019-09-28: 13.1 -> 13.1.1 2019-10-01: 13.1.1 -> 13.1.2 10일 동안 메이저 버전 한번, 마이너버전 한번, 패치 버전 두 번이 업데이트가 되었다. (SemVer 기준으로 설명함) 심지어 마지막 패치(13.1.2)는 정말 급했는지 다..