반응형

Developer's_til/그외 개발 공부 20

[Java] Json을 활용하는 구글의 오픈소스 Gson

✅ Gson이란? Json을 파싱하고, 생성하기 위해 구글에서 개발한 오픈소스로 데이터를 처리하는데 높은 수준의 유연성을 제공한다. 내부적으로 리플렉션(Reflection)을 사용하기 때문에 Map을 사용하여 Json을 파싱하는 것보다 가독성있는 코드를 작성할 수 있다. Spring Framework에 Gson을 적용하려면 의존성(dependency)를 추가해서 사용해야 한다. [ Maven 설정 ] com.google.code.gson gson 2.8.5 [ Gradle 설정 ] dependencies { implementation 'com.google.code.gson:gson:2.8.5' } ✅ Gson 활용하기 예제 코드를 통해 Java 객체와 Gson 라이브러리를 활용하여 Json을 파싱 및 생..

[Java] Optional이란? 개념과 사용법 - 1

✅ Optional이란? Optional 개념 및 사용법 자바로 프로그래밍 하다보면 정의되지 않은 객체에 대해 NULL값을 고려하게 되는 경우가 발생한다. 안정적인 실행을 위해서는 NULL값을 처리해 NPE(NullPointerException)가 발생하지 않게 체크해야 한다. 단순한 코드라면 짧은 로직으로 처리할 수 있지만, 스케일이 커질 수록 고려해야할 변수가 많아지고, 그만큼 NULL 체크 로직이 길어지게 된다. 이러한 상황을 위해 Java8에서는 Optional 클래스를 도입하여 NPE를 방지할 수 있도록 도와준다. Optional는 NULL이 올 수 있는 값을 감싸는 Wrapper 클래스로, NPE가 발생하지 않도록 도와준다. Optional 클래스는 아래 예제처럼 value에 값을 저장하기 때..

[Design Pattern] 컴포지트 패턴(Composite Pattern)이란

✅ 컴포지트 패턴이란? 컴포지트 패턴이란, 클라이언트가 복합 객체나 단일 객체를 동일하게 취급하는 것을 목적으로 한다. 특히 컴포지트(Composite)의 의도는 트리 구조로 작성하며, 전체-부분 관계를 표현하는 것으로 전체와 부분은 동일한 인터페이스를 사용할 수 있다. [ 해당 패턴을 사용하는 경우 ] 1. 복합 객체와 단일 객체의 처리 방법이 동일한 경우, 전체-부분 관계를 정의할 수 있다. 2. 객체들 간에 계급 및 계층 구조가 있고 이를 표현해야 할 경우, 3. 대표적으로 Directory-File 관계가 존재한다. [ 구조 ] Component Leaf와 Composite가 구현해야하는 Interface로, Leaf와 Composite는 모두 Component라는 같은 타입으로 다뤄 진다. Le..

[Design Pattern] 템플릿 메서드 패턴(Template Method Pattern)이란

✅ 템플릿 메서드 패턴이란? 템플릿 메서드 패턴이란 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않고, 특정 단계에서 수행하는 내용을 바꾸는 패턴이다. 즉, 동일한 기능을 상위 클래스에서 정의하면서 확장/수정이 필요한 부분만 서브 클래스에서 오버라이딩으로 구현하도록 만든다. 예를 들어, 전체 로직은 상위 클래스에서 구현하고, 나머지 부분은 하위 클래스에서 구현하도록 만들어서 코드의 재사용성을 높이는 것이다. [ 구조 ] [ 장단점 ] 장점 1. 코드의 재사용성을 높여 중복 코드를 줄일 수 있다. 2. 하위 클래스의 역할을 줄여 핵심 로직의 관리가 용이하다. 3. 객체지향적으로 코드를 구성할 수 있다. 단점 1. 추상 메서드가 많아지면서 클래스 관리가 복잡해진다. [ 예제..

[Java] 제네릭(generic)이란?

✅ Generic 자바에서 제네릭(generic)이란, 데이터의 타입을 일반화(generalize)한다는 것을 의미한다. 쉽게 설명하자면 '데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 일반화하는 방법'이다. 이렇게 컴파일 시에 미리 타입 검사를 수행하면 다음과 같은 장점이 있다. 1. 클래스나 메서드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다. 2. 반환값에 대해 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다. JDK 1.5 이전에서는 여러 타입을 사용하는 대부분의 클래스나 메서드에서 인수나 반환값으로 Object 타입을 사용해왔다. 하지만 반환된 Object 객체를 다시 원하는 타입으로 변환해야 하며, 이러한 상황에서 오류가 발생할 가능성도..

[Java] Lambda Expression(람다 표현식)

Stream에 이어 Java8에서 추가된 Lambda. 토비의 스프링에서 Lambda와 관련된 파트를 보면 자바에서 왜 람다를 추가했는지 알 수 있다. 바로 함수형 프로그래밍을 위해서다. 단순히 추가된 문법이 아닌 프로그래밍 자체의 패러다임에 따른 내용이 추가된 것이다. 이제 추가된 API로 문제 해결을 위한 사고를 다시 한번 생각해 볼 필요가 있다. ✅ Lambda 람다의 핵심은 코드의 간결화로 줄일 수 있는 코드는 모두 지우자는 것이다. 비교를 위해 Lambda를 쓰지 않은 방식의 코드를 살펴보겠다. public interface Danceable { void hiphop(String str); } class Street implements Danceable { @Override public void..

웹훅[Webhook]이란 무엇일까?

✅ Webhook 웹훅은 웹페이지 or 웹앱에서 발생하는 특정 행동(이벤트)들을 커스텀 Callback으로 변환해주는 방법으로 이러한 행동 정보들을 실시간으로 제공하는데 사용됩니다. 보통 REST API로 구축된 웹 서비스는 하나의 요청에 따라 하나의 응답을 제공합니다. 이러한 구조로 인해 특정 이벤트가 발생했는지 조회하려면 서버로의 요청이 선행되어야 합니다. 즉, 일반적인 API(Polling)는 클라이언트가 서버를 호출하는 방식입니다. 하지만, 웹훅은 서버에서 특정 이벤트가 발생했을 때, 클라이언트를 호출하는 방식으로써 역방향 API라고도 불립니다. 이렇게 서버측에서 클라이언트의 어떤 URL로 데이터를 보낼지 정해놓은 주소를 바로 Callback URL이라고 부릅니다. ✅ Webhook endpoin..

[Java] Stream API의 기본 메서드 - 2

✅ Stream의 중첩 구조 제거하기 [ FlatMap이란? ] 간혹, 이중 배열 또는 이중 리스트로 되어 있는 데이터를 1차원으로 처리해야 하는 경우가 발생합니다. 이럴 때 중첩 구조를 한 단계 제거하기 위한 중간 연산으로 flatMap을 사용합니다. flatMap은 Function 함수형 인터페이스를 매개 변수로 받고 있는데, 이 매개 변수는 Stream을 extends하여 구현한 객체여야 합니다. 예를 들어, 아래와 같이 요소가 문자열 배열(String[])인 Stream이 있다고 가정하겠습니다. Stream strArrstream = Stream.of( new String[] {"abc", "def", "ghi"}, new String[] {"ABC", "DEF", "GHI"} ); 각 요소의 문..

[Java] Stream API의 기본 메서드 - 1

✅ Stream 생성하기 앞선 포스팅에서 설명한대로 Stream API를 사용하려면 먼저, Stream 객체를 생성해야 합니다. 사용하려는 객체마다 Stream 객체를 생성하는 방법이 다른데, 여기서는 Collection과 Array에 대해서 알아보도록 하겠습니다. // List로부터 Stream 생성 List stones = Arrays.asList("mind", "soul", "power", "time", "space", "reality"); Stream listStream = stones.stream(); // array로 부터 Stream 생성 String[] stones = {"mind", "soul", "power", "time", "space", "reality"}; Stream arrStr..

[Java] 람다식과 함수형 인터페이스

람다식은 Java를 객체지향 언어인 동시에 함수형 프로그래밍이 가능하게 만들었습니다. 지난 포스팅에서 Stream API를 통해 함수형 프로그래밍의 장점들을 살펴보았습니다. 이번 포스팅에서는 Stream 연산들에 매개변수로 활용되는 람다식과 함수형 인터페이스에 대해 알아보겠습니다. ✅ 람다식(Lambda Expression)이란? 간단히 말하자면 메서드를 하나의 식(Expression)으로 표현한 것입니다. 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줍니다. 람다식은 함수형 인터페이스를 반환하기 때문에 Streamp API를 정확히 이해하기 위해서는 람다식과 함수형 인터페이스에 대해 알고 있어야 합니다. 메서드를 람다식으로 표현하기 때문에 메서드의 이름과 반환값이 없어지므로, 익명 함수..

반응형