반응형

Programming/Java 70

XML to Java Object 변환하기 JAXB API

JAXB api를 사용하여 XML 형식의 데이터를 자바 객체로 변환하는 방법입니다. 지금까지 JSON 형식의 데이터만 접해보다가 이번에 공공데이터 포털의 open api를 사용하며 데이터 포멧이 XML인 경우를 처음 접해봤습니다. 데이터를 조회하여 xml 형식으로 뽑아오는 것은 금방 할 수 있었지만, 조회된 XML 데이터를 자바 객체로 변환하는 것은 생소하여 생각보다 시간이 걸렸습니다. 해당 포스팅은 JAXB에 대한 구체적인 내용과 설명, 이해에 관한 내용 없이 단순하게 XML 데이터를 Java Object로 변환하는 과정만 담았습니다. 추후 해당 내용에 대해 더 공부하여 구체적인 설명과 함께 다시 포스팅을 작성하도록 하겠습니다. JAXB (Java Architecture for XML Binding)는..

Programming/Java 2021.09.28

Java 객체 복사 Cloneable interface

Java 객체 복사 Cloneable interface 카드 결제 내역을 기록으로 테이블에 남기던 중, 찾아서 적용한 방식입니다. 이전에 성공 처리된 결제 내역에 대해서 취소 요청한 경우, 기존의 거래 기록 row는 그대로 두고, 다른 데이터는 같지만 state가 취소 요청인 새로운 row를 생성하여 저장해야 하는 상황에서 Cloneable interface를 적용하여 사용하였습니다. @Builder @Getter @Setter @NoArgsConstructor @Entity public class PaymentTransaction extends BaseEntity implements Cloneable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY)..

Programming/Java 2021.09.16

함수형 프로그래밍을 위한 Java Stream 기본 개념

Java Stream Java는 객체지향 언어이기 때문에 기본적으로 함수형 프로그래밍이 불가능합니다. 하지만 JDK 8부터 Stream API와 람다식, 함수형 인터페이스 등을 지원하면서 Java에서도 함수형 프로그래밍이 가능하게 되었습니다. JDK 8 이전에는 배열 또는 컬렉션 인스턴스를 다룰 때 for문 또는 for each 문을 돌면서 요소를 하나씩 꺼내서 다루는 방법을 사용했습니다. 간단한 경우는 상관이 없지만 로직이 복잡해질 경우 코드 양이 많아져서 여러 로직이 섞이게 되고, 메서드를 나눌 경우 루프를 여러 번 도는 경우가 발생합니다. Stream은 '데이터의 흐름' 입니다. Stream을 사용하면 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하여 가공된 결과를 얻을..

Programming/Java 2021.09.11

Java 국가 코드 및 국가명 Locale Class로 쉽게 가져오기

Locale Class Java에서 국가코드 및 국가명, 국가별 언어가 필요할 때 Locale Class를 통해 쉽게 가지고 올 수 있습니다. Locale Class에 사용되는 국가명(country)은 'ISO 3166'를 기준으로 하고, 언어(language)는 'ISO 639'를 기준으로 합니다. 사용 예시를 간단하게 보고 아래에서 더 자세한 내용을 보도록 하겠습니다. String[] countries = Locale.getISOCountries(); for(String country : countries) { Locale locale = new Locale("en", country); System.out.printf("2글자 국가 코드 : %s | 3글자 국가 코드 : %s | 영문 국가명 : %s..

Programming/Java 2021.08.28

String class가 final인 이유, String의 불변성 (Immutable)

Java의 final에 대해 공부하면서 String class가 대표적인 final class라는 것을 알게 되었고, String class가 final으로 정의된 이유가 궁금하여 찾아보게 되었습니다. Java String String str1 = new String("Hello"); // new 연산자를 통해 객체 생성 String str2 = "Hello"; // 리터럴 형태로 바로 할당 java에서 문자열(String) 타입의 특징은 참조 타입임에도 불구하고 직접 new 연산자를 통해 객체를 생성하는 방법이 아닌, 문자열 리터럴 형태로 사용하는 것이 허용된다는 것입니다. String의 불변성 (Immutable) String 객체는 최초 한 번 생성되면 절대로 그 값이 변하지 않습니다. String..

Programming/Java 2021.08.24

Static, Stack, Heap / Java 메모리 영역의 구조와 특징

Java를 사용하면서 알아야 할 메모리 구조 및 특징에 대해서 정리합니다. (Static, Stack, Heap) 먼저 프로그램을 구동하기 위해서는 운영체제(OS)가 메모리(RAM)에 데이터 및 명령어를 저장할 공간을 할당하여 줍니다. 메모리는 컴퓨터에 있어 가장 핵심이 되는 부품이고, CPU가 처리할 데이터가 임시로 저장되는 공간입니다. 동작은 하드디스크에 저장된 데이터가 메모리에 올라가서 실행되며, 메모리(RAM)를 주 기억 장치라고 부릅니다. 메모리는 사용할 수 있는 공간이 한정되어 있기 때문에 어떻게 관리하느냐에 따라서 프로그램의 성능(속도 등)이 좌우됩니다. 따라서 Java 어플리케이션에서 메모리를 효율적으로 사용하기 위해서는 메모리 구조와 특징에 대해 이해할 필요가 있습니다. 1. Static..

Programming/Java 2021.08.23

Java 빌더 패턴 (Builder Pattern)이란?

Java 빌더 패턴 (Builder Pattern) 이란? Java에서는 클래스를 객체화하는 '점층적 생성자 패턴', '자바 빈즈 패턴', '빌더 패턴' 3가지 패턴이 존재합니다. https://wildeveloperetrain.tistory.com/29 (Java) 점층적 생성자 패턴 & 자바 빈즈 패턴 프로그래밍에서 Class를 설계하다 보면, 필수로 받아야 할 인자와 선택적으로 받아야 할 인자가 구분됩니다. 그리고 Java에서는 이렇게 설계된 다양한 형태의 Class들을 객체화하는 3가지 패턴이 존 wildeveloperetrain.tistory.com 이전 포스팅의 점층적 생성자 패턴, 자바 빈즈 패턴에 이어 점층적 생성자 패턴의 안전성과 자바 빈즈 패턴의 가독성을 더한 빌더 패턴 (Builder..

Programming/Java 2021.08.22

(Java) 점층적 생성자 패턴 & 자바 빈즈 패턴

프로그래밍에서 Class를 설계하다 보면, 필수로 받아야 할 인자와 선택적으로 받아야 할 인자가 구분됩니다. 그리고 Java에서는 이렇게 설계된 다양한 형태의 Class들을 객체화하는 3가지 패턴이 존재합니다. '점층적 생성자 패턴', '자바 빈즈 패턴', '빌더 패턴' 먼저 점층적 생성자 패턴 (Telescoping Constructor Pattern)과 자바 빈즈 패턴 (Java Beans Pattern)을 알아보고, 다음으로 점층적 생성자 패턴의 안전성과 자바 빈즈 패턴의 가독성을 더한 빌더 패턴 (Builder Pattern)에 대해서 알아보겠습니다. 점층적 생성자 패턴 (Telescoping Constructor Pattern) 이란? public class Member { private Str..

Programming/Java 2021.08.21

Java Primitive Type (원시 타입), Wrapper Class (래퍼 클래스) 차이점

프로젝트를 하면서 대부분의 경우에 Long을 쓰면서 가끔 어떤 경우에서는 IntelliJ가 자동으로 Long을 long으로 바꿔주는 경우가 있었습니다. 왜 그런지 이유를 몰랐고, 궁금하지도 않았다는 것을 반성하며 Java의 원시 타입 Primitive Type과 래퍼 클래스 Wrapper Class의 차이에 대해서 알아보았습니다. 먼저 Primitive Type, Wrapper Class에 어떤 것들이 해당하는지 보겠습니다. Primitive Type Wrapper Class byte Byte short Short int Integer long Long float Float double Double boolean Boolean char Character 원시 타입으로는 byte, short, int, l..

Programming/Java 2021.08.04

Java 문자열을 다루는 클래스 String, StringBuilder, StringBuffer 차이점은 무엇일까?

자바에서 문자열을 다루는 클래스는 String, StringBuilder, StringBuffer 세가지가 있습니다. 이 세가지 클래스의 차이점과 어떤 경우에 어떤 클래스를 사용하는 것이 적합한지 알아봅니다. String 먼저 String 입니다. String은 불변 (immutable) 의 속성을 가지고 있습니다. 문자열이 변할 때 마다 새로운 객체 (인스턴스) 를 생성합니다. StringBuilder, StringBuffer 반면 StringBuilder, StringBuffer는 가변 (mutable) 의 속성을 가지고 있습니다. 둘 다 문자열의 변경이 가능하며, 내부에 char 배열 공간이 존재하기 때문에 문자열의 크기가 늘어나면 자동으로 증가시켜주고, 배열이 꽉 차면 자동으로 늘려줍니다. Str..

Programming/Java 2021.07.16
반응형