Java - Generics에서 Covariance, Contravariance 개념 이해하기

Generics에서 Invariance, Covariance, Contravariance의 개념을 설명하고 어떤 상황에서 이런 개념을 사용하는지 설명하려고 합니다. 이런 개념들은 클래스들의 상속관계에 따라서 Generics에서 객체의 관계를 결정하는 것을 의미합니다.

10 Apr 2020

Java - 현재 시간, 날짜를 원하는 형식으로 출력

SimpleDateFormat으로 현재 시간, 날짜를 원하는 형식으로 출력할 수 있습니다. SimpleDateFormat는 Java8 이전 부터 사용되었으며, 시간을 특정 형식에 맞게 출력하거나 문자열을 파싱할 수 있습니다. 참고로, Java8에서는 DateTimeFormatter라는 클래스가 소개되었습니다.

10 Apr 2020

Kotlin - inline functions 이해하기

inline functions는 함수 내용을 호출하는 부분에 복사하여 추가적인 메모리 할당이나 함수 호출로 발생하는 Runtime overhead를 줄여줍니다. noinline 키워드는 특정 인자만 제외하고 나머지만 inlnie으로 처리되도록 합니다. 함수 내부에서 참조가 필요한 함수 앞에 noinline 키워드를 붙여주면 됩니다.

10 Apr 2020

Java의 Effectively final이란 무엇인가?

Java8에서 final이 붙지 않은 변수의 값이 변경되지 않는다면, 그 변수를 Effectively final이라고 합니다. Effectively final은 익명 클래스 내부에서 접근할 수 있습니다. 개발자의 의도를 알 수 있게 명시적으로 final을 붙여주는 것이 좋을 것 같은데요. 요즘 트렌드에 맞춰 추가된 기능인 것 같습니다.

09 Apr 2020

Android11 - Storage(저장소) 정책 변경사항 정리

Android11(R)의 Preview에서 Storage(저장소) 변경사항을 정리하였습니다. 이번 업데이트는 Android10의 Scoped storage를 보완한 것들이 대부분입니다. All Files Access이 추가되고, 퍼미션들의 정책도 조금 변경되었습니다.

06 Apr 2020

Android11 - Package visibility 변경사항 소개

Android 11의 Package visibility는 디바이스에 설치된 다른 앱들을 찾거나(query), 실행을 제한하는 변경사항입니다. 만약 앱 동작에 의존성이 있는 패키지가 있다면 queries 태그로 앱의 manifest에 정의해야 합니다. 하지만, QUERY_ALL_PACKAGES 퍼미션을 선언하면 앱은 이 제약사항을 무시할 수 있습니다.

05 Apr 2020

Java - Map을 List로 변경하는 방법

Map은 keySet(), values()라는 메소드를 제공하며, 이 메소드를 이용하여 Map을 List로 변환할 수 있습니다. 생성자를 통해 변환하는 방법과 Stream을 이용하여 변환하는 방법이 있습니다. 예제를 통해 알아보겠습니다.

04 Apr 2020

Java - 문자열(String)에서 숫자(int)만 추출하는 방법

문자열(String)에서 숫자(int)만 추출하는 방법 여러가지 방법이 있습니다. 정규표현식(regex)를 사용하거나, for 또는 Stream을 사용하여 구현할 수 있습니다. 예제 코드와 함께 구현 방법을 알아보겠습니다.

04 Apr 2020