자바

개발/Android

[안드로이드] EXTRA_PICK_IMAGES_MAX 사용 시 주의할 점

개발을 하다 보면 이미지 업로드를 위해 갤러리 사진 선택 기능을 사용하는 경우가 있다. 내가 구현하고자 했던 기능은 이미지를 최대 N장 선택 및 리사이클러뷰에 추가, 이후 서버에 업로드하는 기능이였는데, Tiramisu 이상에서 추가된 MediaStore.ACTION_PICK_IMAGES의 MediaStore.EXTRA_PICK_IMAGES_MAX라는 Intent extra를 설정하다 문제에 직면했다. 트러블 val maxPhotoCount = MAX_PHOTO_COUNT - currPhotoCount val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply { putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotos..

CS

[CS] Java 1.8과 Java 8의 차이

안드로이드 프로젝트 설정을 하다 보면 gradle에서 jvmTarget, javaversion 설정을 해줘야한다. 그럴 때마다 1.8과 8버전에 대해 접하는데, 정작 이에 대해 궁금해서 자세히 알아본 적이 없는 것 같아 조사해봤다. Java 버전 네이밍 방식Java se는 1.0부터 1.8까지 1.x 방식의 버전 표기법을 사용했다고 한다. 지금으로 치면 1, 2, 3, 4, 5이나 그때는 1.1, 1.2, 1.3, 1.4, 1.5로 표기했다는 얘기이다. 그러다 Java se 9 버전에 이르러서는 1.x 방식의 네이밍 기법을 버리고 한자릿수 버전 표기법으로 선회하게 된다. 개인적인 생각으로는 1.9 다음 10버전은 2.0/10.0 이런식으로 표기해야하는데, 이런 혼란스러운 네이밍을 피하기 위함이 아닐까....

개발/Kotlin

[안드로이드] 테스트 코드 - JUnit의 예외 처리 (expected, assertThrows, doThrow)

우리가 작성해야 하는 테스트 코드 비단 성공하는 케이스뿐만이 아니다. 실패하는 케이스와 발생할 수 있는 여러 예외들에 대한 처리 또한 테스트가 분명 중요한 부분인데, 오늘은 JUnit와 Mockito를 사용한 테스트 코드 작성 시에 사용 가능한 예외 처리 기법에 대해 비교해보고자 한다. ✔️ @Test @Test(expected = NumberFormatException.class) public void CalculateValues_test() { . . . } Test 어노테이션의 expected를 사용한 예외 처리는 JUnit 프레임워크 자체에서 지원하는 예외 테스트 방법이다. 어노테이션에 미리 지정해둔 예외가 해당 테스트 메서드에서 발생하면 테스트가 성공한 것으로 간주하는데, 여기서 문제가 발생한다..

개발/Kotlin

Singleton 패턴이란?

1. Singleton 패턴이란? 객체의 인스턴스를 최초 1번만 생성하고 이후에는 기존 인스턴스를 호출해서 사용하는 패턴을 말한다. 우린 일반적으로 인스턴스를 생성할 때 new 연산자를 사용하는데, 이 때 메모리에 객체의 인스턴스를 할당하게 된다. 물론 최초 1번의 할당까지는 아무런 문제가 되지 않는다. 하지만 여러 곳에서 필요할 때마다 인스턴스를 생성하고 호출한다면, 이는 메모리를 엄청나게 낭비하는 '비효율적인' 행위가 될 것이다. 따라서 객체가 유일해야할 경우에 싱글톤 패턴을 사용하여 기존에 생성된 인스턴스를 호출해서 사용한다. 2. 언제 사용하는 것이 적절할까? 싱글톤을 적용하지 않고 필요할 때마다 객체를 생성해서 사용한다면 매 생성마다 메모리를 할당받게 되고, 이는 성능 저하를 일으킨다. 하지만 ..

개발

RxJava를 알아보자

0. RxJava를 공부하게 된 계기🐥🐥🐥 코딩을 하다보면 여러 난관에 부딪히게 된다. 알고 있는 지식의 범위 안에서 쉽지만 오래걸리고 비효율적인 방법으로 처리가 가능했으나, 🌟추후에 규모 있는 프로젝트를 진행하게 된다면 이 부분에 있어 불편함을 겪게 될 것이라 생각했다🌟 ex) 콜백 지옥 물론 다른 여러 회사들이 요구하는 대표적인 기술 스택 중 하나라서 공부를 시작한 것도 있다. 그래서 더 궁금하기도 했고. 이게 대체 뭐하는 녀석이길래 다들 그렇게 사용할까? 1. RxJava란 무엇인가? 그에 앞서, 리액티브 프로그래밍에 대해 알고 가야 한다. 리액티브 프로그래밍이란, "데이터의 흐름과 전달에 관한 프로그래밍 패러다임"이다. p.s 우리가 흔히 알고 있는 객체지향 프로그래밍도 하나의 프로그래밍 패러다임..

개발/Kotlin

연산자 개수에 따른 차이(&, |와 &&,||의 차이)

1. &&, || A && B -> A가 거짓인 경우에 B는 확인하지 않음 ( 둘 다 True인 경우에 성립하므로 ) A | | B -> A가 참인 경우에 B는 확인하지 않음 ( 둘 중 하나만 True여도 성립하므로) 2. &, | A & B -> A가 거짓이더라도 B를 확인함 A | B -> A가 참이더라도 B를 확인함 3. 결론 &, | 는 논리 연산자 + 비트 연산자의 역할을 수행한다. ( 비트 마스킹에도 사용된다 ) &&, || 는 단순 논리 연산자의 역할만을 수행한다. ( 흔히들 사용하는 조건문에서 ) 우리는 일반적으로 &&, || 와 같은 논리 연산자의 역할로 사용하기에 쉽게 놓칠 수 있는 부분이다. 사소한 차이라도 알고 있다면 더 효율적인 코딩이 가능하므로 꼭 기억해두자.

개발

레거시에 대하여

얼마전에 한 테크블로그에서 Legacy에 대해 포스팅한 글을 읽었다. 다른 분야 못지 않게 Legacy에 대해 민감할 수 밖에 없는 안드로이드 개발자로서, 오늘은 Legacy에 대하여 이야기해보고자 한다. Legacy는 종종 게임, 드라마/영화, 영어 공부 책에도 심심치 않게 등장하는 단어이기 떄문에 그리 생소하게 느껴지는 단어는 아닐 것이다. # 사전적 의미 Legacy 1. (죽은 사람이 남긴) 유산 (=inheritance) 2. (과거의) 유산 출처: 네이버 영어 사전 # 개발자에게 Legacy란? Legacy system - 낡은 기술이나 방법론, 컴퓨터 시스템, 소프트웨어 등을 말한다. - 더 이상 쓰이지 않더라도 현대의 기술에 영향을 주는 경우도 포함한다. # 안드로이드 개발자에게 Legac..

최선의 최선
'자바' 태그의 글 목록