Java16 Optional 기초 사용법 Optional 이란?개발을 진행하다 보면, Primitive Type(원시 타입)과 더불어 Reference Type(참조 타입)을 사용한다. 원시 타입과 달리 참조 타입은 Null 값을 발생시키고 이로 가장 많이 발생하는 예외 중 하나인 바로 NPE(NullPointerException)을 유발한다. 이를 피하려면, null 여부를 검사하고 처리하는 로직이 필요한데 이를 모든 코드에서 사용하는 것을 상상해보면,꽤나 번거롭고 코드 가독성을 더럽힐 것이다. 따라서 Java는 8버전부터 Optional 클래스를 사용해서 NPE를 방지할 수 있도록 도와준다.이는 Null이 올 수 있는 값을 감쌀 수 있는 Wrapper 클래스이다. 이번 글에서는 Optional의 사용법에 대해 공부하고 정리해보겠다. .. Java/자바개념 2025. 1. 18. 리액티브 프로그래밍( reactive streams ) reactive streams 표준 라이브 러리에 대한 이해와 실습reactive streams은 데이터 스트림을 Non-Blocking하면서, 비동기적 방식으로 처리하기 위한 리액티브 라이브러리 표준 사양이다.즉, 리액티브한 코드를 작성하기 위한 라이브러리로 개발자는 보다 쉽게 리액티브 어플리케이션을 구성할 수 있게 만든다. 이를 실습하기 위해서 우선, java 프로젝트를 생성한 후에 해당 라이브러리를 사용하기 위한 빌드를 해준다. Gradle을 기준으로 아래와 같은 의존성을 주입해준다.// https://mvnrepository.com/artifact/org.reactivestreams/reactive-streams implementation group: 'org.reactivestreams'.. Spring/WebFlux 2025. 1. 3. 스프링 핵심 원리 - 싱글톤 컨테이너(stateless 코드 작성의 필요성과 @Configuration의 바이트 조작(CGLIB)을 통한 싱글톤 작동원리) Repeat is the best medicine for memory 스프링의 싱글톤스프링 컨테이너는 싱글톤이 적용되었다. 그 이유는 어플리케이션의 목적과 특수성을 생각해보면, 아래와 같은 고려 사항들이 있기 때문이다. 위의 내용처럼 웹 어플리케이션은 다수의 고객이 동시에 요청하는 경우가 빈번하게 발생한다.만약, 요청마다 새로운 인스턴스를 만들어 고객의 요청에 대응하는 어플리케이션이라면, 메모리 사용 관점에서 매우 비효율적이다. 이와 같은 상황을 스프링이 적용되지 않은 순수한 DI 환경으로 구성한다면, 아래와 같은 테스트 코드로 표현할 수 있을 것이다. public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void .. Spring/SpringCore - basic 2024. 12. 28. 스프링 핵심원리 - 스프링 컨테이너 설계 이해, 스프링의 다양한 설정 형식 지원(JAVA/Xml), 스프링 빈 메타 정보(BeanDefinition) Repeat is the best medicine for memory 앞서, 스프링으로 전환과 더불어 스프링 컨테이너의 작동 원리에 대해서 알아보고 있었다.그리고 컨테이너 생성에 있어 ApplicationiContext 부모 타입을 사용해왔고, 구현체로는 AnnotationConfigApplicationContext을 사용하였다. 이번에는 이러한 컨테이너가 어떻게 설계되었는 가에 대해서 살펴보며, 동시에 다양한 설정 형식을 지원해주는 구조를 지닌 스프링의 설계적 측면을 파악하며 알 수 있는 BeanDefinition의 역할을 알아보자. 스프링 컨테이너의 설계 ( 1 ) - BeanFactory지금까지 사용해온 ApplicationiContext는 사실 BeanFactory라는 부모타입을 상속한 인터페이.. Spring/SpringCore - basic 2024. 12. 28. 스프링 핵심 원리 - 스프링 컨테이너와 스프링 빈(컨테이너 생성 원리 및 다양한 Bean 조회 방법들) Repeat is the best medicine for memory 지금까지 다뤘던 내용들은 객체 지향적인 관점을 기준으로 스프링이 하는 역할과 핵심 원리을 이해하기 위한 과정이었다.이제, 스프링 자체에 대한 이해와 학습을 위한 내용들을 정리해보겠다.스프링 컨테이너 생성 방법과 작동 원리 먼저, 스프링 컨테이너가 생성되는 과정에 대해서 알아보자. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Appconfig.class); 위의 코드 부분이 이전 포스팅에서 스프링 컨테이너를 만드는 로직에 해당한다.코드의 내용은 ApplicationContext 타입의 변수에 사용할 구현체로 어노테이션 기반의 자바 설정을 .. Spring/SpringCore - basic 2024. 12. 27. 객체 지향과 디자인 패턴 Chapter 05 - 의존 역전 원칙(SOLID) 더보기'개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴'을 읽고 학습합니다. ( 최범균 저 ) SOLID의 마지막 원칙인 의존 역전 원칙은' 고수준 모듈은 저수준 모듈의 구현에 의존하면 안 된다. 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다. ' 이다. 말이 어렵다.. 먼저 고수준 모듈과 저수준 모듈이 무엇인지 정의부터 해보자.고수준 모듈은 어떤 단일 기능을 제공하는 모듈이라고 정의할 수 있으며, 저수준 모듈은 고수준 모듈의 기능을 구현하기 위해 필요한 하위 기능의 실제 구현으로 정의 가능하다. 아래의 예제를 보며 쉽게 이해해보자. 위의 예시는 바이트 데이터를 암호화하는 것이 이 프로그램의 의미 있는 단일 기능으로 고수준 모듈에 해당한다.이 고수준 모듈은 데이터 읽기, 함호.. Java/객체지향 2024. 11. 15. 객체 지향과 디자인 패턴 Chapter 05 - 인터페이스 분리 원칙(SOLID) 더보기'개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴'을 읽고 학습합니다. ( 최범균 저 ) 이번 장에서 다룰 인터페이스 분리 원칙(ISP)을 표현하자면 다음과 같다.' 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다. ' 본래 원칙 정의는 ' 클라이언트는 자신이 사용하는 메서드에만 의존해야 한다 '지만, 저자는 이해와 기억을 위해 나름 문장을 바꿔서 표현하였다. 해당, 내용에서 저자는 C++ 언어를 사용하여 인터페이스 분리 원칙을 설명하였다. 하지만, 필자는 C++에 능숙하지 않고 책에 적힌 내용만으로 이해되지 않는 부분이 있어, 자료 조사를 더하여 정리해보겠다. 인터페이스 분리 원칙을 다루기에 앞서 인터페이스와 클래스( 특히, 추상 클래스 )는 설계와 관련이 깊다.인.. Java/객체지향 2024. 11. 14. 객체 지향과 디자인 패턴 Chapter 05 - 리스코프 치환 원칙(SOLID) 더보기'개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴'을 읽고 학습합니다. ( 최범균 저 ) 이전의 개발 폐쇄 원칙은 추상화와 더불어 다형성을 이용하여 구현했는데, 리스코프 치환 원칙은 개방 폐쇄 원칙을 받쳐 주는 다형성에 관한 원칙을 제공한다. 리스코프 치환 원칙→ ' 상위 타입의 객체를 하위 타입 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다. ' 이 말의 의미를 코스 수준에서 살펴보자면 상위 타입 클래스와 하위 타입 클래스를 통해 파악할 수 있다.아래의 코드로 예시를 살펴보자.public void somMethod(SuperClass sc) { sc.someMethod();} someMethod()는 상위 타입인 sc 객체를 사용하는 메서드이다. 그리고 만약 이 .. Java/객체지향 2024. 11. 13. 스프링 핵심 원리 - 스프링이란? Repeat is the best medicine for memory 스프링 생태계 스프링으로 개발한다는 것은 위의 그림과 같이 스프링 프레임워크 또는 스프링 부트 사용이 필수적이다. 이외의 오른쪽에 있는 기술들도 제공하는데, 각 용도에 맞춰 필요한 경우 스프링과 함께 편리하게 개발할 수 있도록 도와준다. 이외에도 스프링은 많은 기능들을 제공한다. ( 필요하다면 공식 사이트에 들어가서 확인해보자 ) 이들 중에서 가장 중요한 것은 ' 스프링 프레임워크 ' 자체이며 아래와 같은 사항들이 모두 스프링 프레임워크 안에 들어간 기능이다. 여기에서는 스프링 프레임워크의 핵심 기술들에 대해서 정리하며 학습을 진행하겠다. 단, 스프링 부트를 사용하며 정리할 것인데, 스프링 부트는 스프링 프레임워크의 사용과 관.. Spring/SpringCore - basic 2024. 11. 4. Spring Batch 서버 개발(2) - ItemReader 와 Bulk Insert처리 😎 이 글에서 다룰 것성능적 측면에서 고려했던 DB 접근 기술인 ItemReader 선택 고려사항과 Bulk 처리 Write에서의 고려사항 ItemReader 선택앞서 언급한 내용처럼 배치작업은 결국 일괄적으로 많은 데이터를 한번에 모아서 처리하는 작업이다.즉, 단순한게 표현하자면 요구사항에 맞춰서 데이터를 읽고 처리해주는 것이 핵심인 것이다. 이를 다르게 생각하면 실시간 처리가 어려운 대용량의 데이터를 다루기 위한 기술으로도 볼 수 있다. 따라서 자연스럽게 데이터 처리와 관련하여 효율성을 높이는 것에 최대한 초점을 맞춰 개발을 진행하였고 과정에서 고려했던 내용들을 정리해보겠다. 먼저 데이터를 읽어오는 ItemReader 부분이다. ItemReader ? 영어 단어가 의미하는 뜻이 직관적으로 다가오.. Dev Log/Batch개발(청구-수납) 2024. 11. 2. Spring Batch 서버 개발(1) 🤔 6주 동안 3명의 인원으로 진행했던 ' 청구/수납 ' 을 주제 프로젝트에서 Batch Server를 개발하며 과정에서 고민했던 내용과 새롭게 알게된 지식들을 정리하고자 적어보는 개발 일지 🛑 주제설명'청구 수납'이 생소한 주제이니 예시를 들어 설명해보겠다.' A 학원의 원장 B씨는 학생들의 수강료를 매달 직접 청구하고 수납하며 수기로 장부를 기록하면서 운영하고 있다. 그런데 갑자기 수강생이 기존에 50명이었지만, 다음달부터 150명이 되었다. 따라서 지금과 같이 직접 수강료를 청구하고 수납하는 과정을 유지하는 것은 이제 너무나 많은 리소스가 들어간다..이러한 문제에 대한 고객(원장 B씨)의 회원(수강생)에 대한 수납 청구를 도와주는 솔루션이 해당 프로젝트의 주제이다. 😎 이 글에서 다룰 것프로젝.. Dev Log/Batch개발(청구-수납) 2024. 11. 1. 상속 GitHub - KOSA-Group-04-Study/JAVA-StudyContribute to KOSA-Group-04-Study/JAVA-Study development by creating an account on GitHub.github.com자바스터디 3회 주제는 ‘상속’이다. 상속은 객체지향적 언어에 있어 매우 중요한 기능이자 문법으로 정리하자면 이와 관련된 주제와 내용이 많다. 앞서 클래스 주제까지 다뤘고 이후에 인터페이스에 대한 내용이 있기에 객체지향적 설계에서 클래스의 상속과 관련된 내용을 다루기로 결정하였다. 따라서 먼저 상속에 대한 내용과 필요성을 살펴보겠다. 이후 객체지향적 설계 원칙인 SOLID에서 개인적으로 OCP(Open Closed Principle)과 LSP(Liskov Su.. Java/자바개념 2024. 3. 14. 이전 1 2 다음