Languages/java 51

[android] android.support.v4.content.FileProvider class not found 오류 해결

현재 모바일 프로젝트에서 다양한 버전의 안드로이드 기기를 사용중이라(7.1.1...) 버전이 올라갈수록 호환이 잘 안되는 경우가 많더군요. 검색해 보니 androidx라는 호환을 위한 라이브러리가 존재하더군요. 그래서 지금 프로젝트를 android -> androidx로 라이브러리 변경을 시도하는 중입니다. 여전히 아주 예전 버전의 라이브러리들을 사용중이고 버전 업만하면 오류를 토해내는 중이라 아주 골치가 아프지만 시간이 지나면 또 잊어먹기 때문에 변경하는 와중에 해결한 오류들을 기회가 될 때마다 작성해 보겠습니다. 버전 변경 implementation 'com.android.support:appcompat-v7:23.4.0' 에서 implementation 'androidx.app..

Languages/java 2023.03.06

[java] jar 내부 class 파일 수정하기

직접 사용중이던 jar 파일이 android 버전이 올라감에 따라 클래스명이 겹치는 오류가 발생했습니다.(Type class is defined multiple times:...) 따라서 직접 jar의 클래스 명을 수정해 보기로 했습니다.(build.gradle에서 exclude가 왜안될까...) solution 크게 세 단계로 수정해 보았습니다. 1. .jar파일 구조 분석 2. 동일한 구조로 구현(maven) 3. 생성된 .jar파일 구조 확인 .jar 파일 구조 분석 .jar파일 내부를 볼 수 있는 프로그램이 필요합니다. 저는 알집을 사용했습니다. 제가 분석할 .jar파일은 아래와 같은 구조와 .class파일들을 포함하고 있습니다. maven을 사용했군요. 내부 설정도 확인할 수 있습니다. JD-G..

Languages/java 2023.03.06

[Java] ^연산자(XOR)란? (chatGPT)

저는 부끄럽게도 개발경력이 1년이 넘어가는데도 아직도 bit 개념이 낯섭니다. 이번에 codewars 사이트를 처음으로 사용해 보았는데 거기에서 Find the odd int라는 문제를 풀게 되었습니다. 제가 푼 방법과 다른 방식으로 풀으신 분들의 문제가 이해가 가지 않더라구요. 구글링을 해도 원하는 지식을 습득할 수 없어서 답답하여 chatGPT를 활용해 보았습니다. chatGPT에게 물어가면서 습득한 방법에 대해 작성해 보도록 하겠습니다. faced with a problem codewars에서 풀게된 문제인 Find the odd int 입니다. codewars Given an array of integers, find the one that appears an odd number of times...

Languages/java 2023.02.15

[java] Set<>의 contains() 파헤치기

Set 의 contains() 함수를 사용하여 값을 비교하던 도중 기대했던 결과와 다른 결과가 출력되는 것을 확인할 수 있었습니다. 이에 왜 이렇게 다른 결과값이 나왔는지 살펴보았고 그에 대한 것들을 정리해 볼까 합니다. 문제 Set의 contains() double a = 0.0; Set c = new HashSet(); c.add(a); System.out.println(c.contains(0d)); System.out.println(a == -0d); for (Double aDouble : c) { System.out.println(aDouble == -0d); } 아래 이미지와 같이 위의 코드를 실행시켜 보았습니다. 저는 모든 결과가 true로 반환될 것이라 기대했었지만 아래와 같이 System...

Languages/java 2023.01.09

[Java] com.sun.image.codec.jpeg(jdk1.6) 를 jdk 1.8에서 적용하기(ImageIO, maven)

인수받은 프로젝트에서 pom.xml에서 maven compile 시 jdk 1.6을 참조하게끔 되어 있더군요. 확인해보니 1.8에서는 deprecated 된 com.sun.image.codec.jpeg 라이브러리를 import하고 있는 소스를 발견했습니다. jdk 1.6 의존을 삭제하고, deprecated 된 com.sun.image.codec.jpeg 소스를 jdk 1.8에 맞게 수정해보겠습니다. 분석 com.sun.image.codec.jpeg 라이브러리를 확인해 보니 rt.jar 에 포함되어 있는 라이브러리입니다. jdk 1.8로 버전업 되면서 deprecated 되었습니다. 구글링을 해 보니 stackoverflow에 해결책이 존재하더군요. 생각보다 많이 간단했습니다. 코드 실제 코드와는 다르지..

Languages/java 2022.12.29

[java] SpringBoot 사용 시 field에 변수 선언 관련 문제

어제 저녁 옆 팀의 다른 동료가 위의 문제에 대해서 질문을 해 왔습니다. Field에 String 변수에 static을 선언하지 않을 시 error가 나는데 그 이유를 모르겠다고 하더군요. 간단한 문제였는데 '이것 때문이다!' 라고 콕 집어서 이야기 하기가 힘들더군요. 그래서 관련 문제를 해결하면서 제대로 설명 할 수 있을 정도로 정리해 보는것이 이번 글의 목적입니다. 문제 회사의 코드를 불러올 순 없으니 회사코드와 비슷한 아래의 코드로 진행하도록 하겠습니다. @Slf4j @Service @AllArgsConstructor // 1. 어노테이션의 기능 파악 public class SpringBootFieldStaticSample { private SpringBootFieldStaticSam..

Languages/java 2022.11.29

[java] Function을 활용하여 If문 제거하기

회사에서 기존에 작성되어있는 코드를 보다 하나의 method 내에 십여개의 if문...으로 작성된 파일을 보게 되었습니다. 파악하는게 너무 힘들더군요... 그래서 조금 더 파악하기 쉽고 유지보수에 효과적인 코드는 없을까 고민을 했다 예전에 차장님이 구현해놓으신(당시에는 Functional Interface를 몰라 이해하기 무척 어려웠다는 사실은 비밀) 코드와 몇일전에 보았던 다른 언어들의 if문 처리 방법에 대해 생각이 나더군요. 그래서 그것과 비슷한 방식으로 전반적인 refactoring을 진행해 보았습니다. 적용을 다 하고 나니 정리할 필요가 있을 듯 해서 sample 코드를 사용해서 java에서 if문을 제거하는 방법을 정리해 보았습니다. Sample if 가 '많이' 사용되고 있는 ..

Languages/java 2022.11.09

[java]default method의 호환성

모던 자바 인 액션의 default method 부분을 읽던 중에 호환성이란 단어를 지나치게 되었습니다. 그러다 문득 제가 생각하는 호환성과 프로그램에서 이야기하는 호환성이 맞나? 하는 의문을 가지고 있을 때 책에서 호환성에 대해 한번 더 상세하게 설명을 해 놓았더군요. 그래서 이를 글로 작성을 해 보려고 합니다. default method default method는 자바 8에서 처음 나타난 기능으로 List 인터페이스에 sort() 기능이 추가되면서 입니다. 내부를 보시면 아래와 같이 default 메서드를 사용해서 기존에 List 인터페이스를 상속한 모든 클래스를 사용자들이 수정하지 않을 수 있도록 default 메서드 기능을 사용했습니다. 인터페이스에 static 메서드를 추가하지 않고 왜 def..

Languages/java 2022.10.26

[Junit] private Method 테스트하기2(Exception 검증)

얼마전 Junit 중 privateMethod를 테스트 하는 중에 실패했을 경우에 대해 test를 하려다 의도한 대로 풀리지 않아 해당 테스트를 진행하지 못하고 있었습니다. 그러던 중 토비의 spring 책에서 해당 관련된 exception 확인하는 방법을 찾았습니다.ㅎㅎ 생각보다 쉬운 방법이었지만 그때 당시에는 떠오르지 않더군요!ㅎㅎ(분명 해당 exception 내부를 확인하면 될것 같았지만 그 내부를 확인하는 방법을 몰라서 못했었었네요ㅠㅠ) 그래서 관련된 해결법을 작성해 보도록 하겠습니다. Before we go further 이 글은 private method를 junit으로 Exception테스트를 어떻게 하는지에 관해 작성되었습니다. 만약 private method를 junit으로 어떻게 테스트..

Languages/java 2022.09.23

[JUnit] private Method 테스트하기!

사실 private Method가 test가 되지 않은 이유는 기본적으로 테스트할 필요가 없게끔 구현하라는 의도가 깔려 있다고 생각합니다. 하지만 가끔 private Method를 테스트 해야할 때가 존재합니다. 저 같은 경우 중간에 인수인계받은 작업이 존재하는데 spec이 변경되면서 해당 Method만을 테스트 해야 하는 상황이 존재했습니다. 검색하고 나름의 방법을 찾은 후 해당 방법에 대해 정리해 보겠습니다. Method와 ReflectionTestUtils 테스트 방법에는 여러가지 방법이 있지만 여기서는 두가지 방법을 다뤄보겠습니다. java.lang.reflect.Method org.springframework.test.util.ReflectionTestUtils TestCode 아래와 같이 Pr..

Languages/java 2022.09.07
728x90
반응형