목록Language/Java (10)
나의 개발일지
🚀개요[Java] Gdal 라이브러리 사용하기 - 1. InputStream to TempFile 변환 및 후처리위의 포스트에서 java.io.InputStream을 javo.io.File로 변환하여 임의로 정의한 TempFile 클래스의 객체로 생성하는 방법을 다뤘습니다. 이번 포스트에서는 TempFile 객체를 gdal의 Dataset 객체로 변환 후 COG(Cloud Optimized GeoTIFF 형식으로 변환하는 과정을 다룹니다.🔥발단위성 사진 파일을 COG 형식으로 변환해야 합니다. 저는 Gdal이라는 라이브러리를 사용할 것 입니다. Gdal 라이브러리를 통해 변환을 하기 위해서는 아래의 네가지 과정을 거쳐야 합니다.gdal.Open(String name) 메소드를 통해 Dataset 객체..
개요InputStream으로 받은 파일은 보통 디스크에 저장하지 않고 그대로 활용하는 것이 속도 측면에서 좋습니다. 하지만 사용하고자 하는 라이브러리에서 InputStream을 받지 않는 경우에는 디스크에 저장할 수 밖에 없습니다. 이 글은 디스크에 저장한 InputStream을 통해 저장한 임시 파일을 안정적으로 삭제까지 하는 방법을 기록합니다.발단최근 이력서를 넣은 한 회사에서 과제를 주었습니다. 파일을 Gdal이라는 라이브러리로 변환하는 것이 주요 골자입니다. 이번 글의 핵심은 Gdal의 API 중 하나인 gdal.Open 메소드에 있습니다.public class gdal { // name(=path)의 위치에 있는 파일을 Gdal에서 정의한 파일 형식인 Dataset 객체로 불러옵니다. ..
HotShare 프로젝트도 막바지에 다다랐습니다. 새로운 기능을 개발하기엔 애매한 시간입니다. 1차 프로젝트 때도 괜히 막바지에 무리를 해서 기능들을 우겨넣었다가 장애가 잔뜩 생겨서 제때 마감을 못할 뻔 했기에 조심스러워졌습니다. 그래서 테스트 코드를 작성해보기로 했습니다. 다른 팀원분들 또한 저와 같은 계획을 가지신 터라 이미 서비스 클래스들에 대한 테스트 코드를 작성하고 계시더라구요. 저는 대신 컨트롤러 클래스를 진행하기로 했습니다. 문제 @WebMvcTest(CashLogController.class) @MockBean(JpaMetamodelMappingContext.class) public class CashLogControllerTest { @Autowired private MockMvc moc..
문자열 클래스 자바에서는 대표적인 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder라는 3가지 자료형을 지원합니다. 연산이 많지 않을 때는 어떤 클래스를 사용하더라도 차이가 없지만 연산 횟수가 많아지거나 멀티쓰레드 환경에서 사용될 경우 각각의 특징에 맞는 적절한 클래스를 사용하는 것이 중요합니다. 불변과 가변 String : 불변 자바에서 String 객체의 값은 변경할 수 없습니다. 한번 할당된 공간이 변하지 않는다고 해서 '불변 자료형'이라고도 불립니다. 그래서 초기 공간과 다른 값에 대한 연산에서 많은 시간과 자원을 사용하게 된다는 특징이 있습니다. String 객체 내의 내부 구성 요소를 보면 다음과 같습니다. 인스턴스 생성 시 생성자의..
직렬화(serialize) 직렬화란 자바 안에서 사용되는 Object나 Data를 다른 컴퓨터의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술입니다. 그 반대의 개념인 역직렬화는 바이트로 변환된 데이터를 원래대로 자바 시스템의 Object 또는 Data로 변환하는 기술입니다. 직렬화의 조건 기본형 변수 직렬화는 데이터를 바이트 형태로 변환합니다. 기본 자료형들의 경우 바이트가 정해져 있기 때문에 변환이 가능합니다. 참조형 변수 참조형 변수의 크기는 가변적이고, 참조형 변수를 구성하는 자료형들의 종류와 수에 따라 객체의 크기가 다양하게 바뀔 수 있습니다. 이를 위해 참조형 변수의 경우 Serializable 인터페이스를 구현해야 합니다. Transient 선언 객체 내의 데이터 ..
오토 박싱 & 오토 언박싱 박싱 & 언박싱 자바에서 변수형에는 기본형 타입과 참조형 타입이 있습니다. 박싱과 언박싱은 Wrapper 클래스를 통해 기본형 변수를 참조형 변수로 바꿔주는 기능입니다. Wrapper 클래스 자바의 Wrapper 클래스는 객체가 기본형 변수를 래핑하거나 포함하는 클래스입니다. 래퍼 클래스로 객체를 생성하면 객체 내에 기본형 변수값을 저장할 수 있습니다. Wrapper 클래스의 필요성 프로그램에 따라 기본 타입의 데이터를 객체로 바꿔줘야 하는 경우가 있습니다. ArrayList, HashMap, Scanner를 포함한 java.util 내의 패키지들은 객체만을 처리합니다. 멀티스레딩에서 동기화를 지원하려면 객체가 필요합니다. Wrapper 클래스의 장점 객체만 허용하는 컬렉션 프..
Primitive type & Reference type 변수 변수란 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미합니다. 자바에서 말하는 데이터 타입(자료형)은 변수에 적재할 데이터가 어떤 식으로 활용될 수 있는지 알려주는 키워드이기도 합니다. 변수에는 두가지 종류가 있습니다. 기본형 타입(Primitive Type) 참조형 타입(Reference Type) 기본형 타입의 특징 소문자로 시작된다. 변수의 선언과 동시에 메모리가 생성된다. 모든 값 타입은 메모리의 스택(stack)에 저장된다. 저장공간에 실제 자료 값을 가진다. 비객체 타입이 아니므로 null 값을 가질 수 없다. (기본값이 정해져 있다) 기본형 타입의 종류 자바에서는 총 8가지의 기본형 변수를 제공합니다. ..
자바의 컴파일 과정 개발자는 Eclipse 혹은 IntelliJ 같은 IDE(Integrated Development Environment)에서 .java 확장자를 가진 파일에 소스 코드를 작성한다. 소스 코드는 사람이 알아보기 쉽게 영어로 작성되어 있지만 기계는 이를 해석하지 못한다. 사람이 읽을 수 있는 고수준 언어를 기계가 읽을 수 있는 저수준 언어로 치환해주는 것을 컴파일 과정이라고 한다. 자바의 특징 자바는 OS 에 독립적인 특징을 가지고 있다. OS와 자바 사이에 JVM이라는 가상 머신이 중개자 역할을 하고 있기 때문이다. JVM을 통해 자바는 어느 OS 상에서도 컴파일 할 수 있다. 이를 WORN(Write Once Run Anywhere)이라고 표현한다. 컴파일 순서 1. 바이트코드 변환 ..
이 두 단어는 파라미터 내 변수의 값(value)을 복사하는 방식으로 호출하는가, 주소값(reference)을 복사하는 방식으로 호출하는가를 애기한다. 파라미터를 사용해 함수를 호출할 경우 함수에선 새로운 변수를 생성한다. 이때 이 변수에 어떤 값이 들어오느냐에 따라서 작동이 달라진다. 스택에는 변수값 혹은 객체의 주소값이 들어가고 힙의 경우에는 객체가 저장된다. call by reference의 경우 변수 안에 '리모콘' 즉 주소값이 복사된다. 그리고 call by value의 경우에는 값 그 자체를 복사한다. 원시 변수에서는 변수값을, 참조형 변수의 경우에는 참조형 변수값을 복사해서 가져온다. 자바의 경우에는 call by value 방식을 사용한다. Call by value의 예시 p..
다른 Json 라이브러리에서는 어떤지 모르겠지만 Gson에서 객체가 담긴 ArrayList를 Json 파일로 전환하는 것은 어렵지 않았습니다. PrintWriter pw = new PrintWriter("name.json"); pw.println(quotesToJson); pw.close(); gson의 toJson 함수를 이용해 ArrayList를 통째로 Json파일로 옮긴 후 PrintWriter로 저장해주면 되는 아주 간단한 일이었습니다. 불러오기도 넣을 때 순서대로만 넣어준다면, 혹은 Id값만 명확히 해준다면 BufferReader를 통해 한줄한줄 읽어 온 후 그대로 한 객체씩 .add 해주면 됩니다. 하지만 만약 setPrettyPrinting 메소드를 이용하여 보기 좋은 Json 폴더를 만..