개발을 하다보면 정적 팩토리 메서드를 자주 사용하게 된다.그런데 문득 정적 팩토리 메서드를 왜 사용하는 것인지 정확히 알지 못한채 사용한다는 생각이 들어 정적 팩토리 메서드를 왜 사용해야하는지 한번 정리해보려고 한다. 정적 팩토리 메서드란?우선 팩토리(factory)라는 용어는 GoF 디자인 패턴 중 팩토리 패턴에서 유래한 단어로, 객체를 생성하는 역할을 분리한다는 의미가 담겨 있다. 따라서 정적 팩토리 매서드란 객체 생성의 역할을 하는 클래스 메서드이다.직접적으로 생성자를 통해 객체 생성을 하는 것이 아니라 객체 생성 역할을 대신해주는 정적 팩토리 메서드를 사용해 객체 생성을 하는 것이다. 왜 생성자 대신에 정적 팩토리 메서드를 통해 객체를 생성하는 것일까?생상자와 정적 팩토리 메서드는 객체를 생성한다..
☕ Java/이론
본 포스팅은 [인프런] 스프링 DB 1편 - 데이터 접근 핵심 원리 강의를 바탕으로 공부하고 정리한 글입니다. 자바의 예외 계층 Object • 예외도 객체이므로 최상위 부모가 Object이다. (자바의 모든 객체의 최상위 부모는 Object) Throwable • 최상위 예외 Error • 메모리 부족이나 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외 • 개발자는 이 예외를 잡으려고 해서는 안된다. Exception • 체크 예외 • 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다. • 컴파일러가 체크하는 예외 (단 RuntimeException은 예외) RuntimeException • 언체크 예외, 런타임 예외 • 컴파일러가 체크 하지 않는 예외 예외 처리 규칙 예외는..
Junit5부터 파라미터 테스트를 사용할 수 있다. 파라미터 테스트파라미터 테스트란?여러 argument를 사용해 테스트를 여러번 돌릴 수 있는 기능사용을 위해 @Test 대신 @ParameterizedTest를 붙여준다.@ParameterizedTest를 사용하면 최소 하나의 source 어노테이션을 붙여줘야 한다. 의존성 추가하기@ParameterizedTest를 사용하기 위해서는 우선 JnuitParams 의존성을 추가해줘야한다.프로젝트 환경(Maven, Gradle)에 맞춰 의존성을 추가해주도록 하자.✅ Maven (버전 확인하기) pl.pragmatists JUnitParams 1.1.1 test✅ GradletestImplementation 'org.junit.jupite..
추상클래스가 무엇이고 왜 사용하는지 알아보자. 추상클래스란? 추상클래스가 뭘까? A 클래스, B 클래스, C클래스가 있다고 했을 때, 각 클래스 안에는 각자의 필드와 메소드가 있을 것이다. 추상클래스는 A 클래스, B 클래스, C 클래스 간에 비슷한 필드와 메소드를 공통적으로 뽑아내 만들어진 클래스다. 예를 들어 "키보드"라는 클래스가 있다. 이 "키보드"를 만드는 제조사는 여러개이다. A 제조자, B 제조사, C 제조사는 각 제조사만의 스타일대로 키보드를 제작하고 제품을 출시한다. 이때 A 제조사는 키보드를 누를 때마다 불빛이 들어오고, B 제조사는 키보드를 누를 때마다 딸각거리는 소리가 나고, C 제조사는 키보드를 살짝만 눌러도 잘 눌리는 특징을 가진다. 이 키보드들 간에 공통점이 있을까? 바로 "키..
스트림 스트림(Stream)이란 데이터의 흐름을 가리킨다. 컬렉션 인스턴스나 배열에 저장된 데이터들을 꺼내서하는 일련의 작업들을 조금 더 쉽게 하기 위해 스트림을 사용한다. 스트림은 원본 데이터를 변경하지 않는다. 동작 흐름 스트림은 크게 세단계에 걸쳐서 동작한다. 스트림의 생성 스트림의 중간 연산 스트림의 최종 연산 스트림을 생성하고 이를 대상으로 중간 연산을 진행하면, 원하는 기준으로 데이터를 필터링하고 필터링 된 데이터의 결과를 얻을 수 있다. 스트림의 생성은 저장소에 저장된 데이터를 뽑아 파이프에 흘려보내기 좋은 구조로 나열한 인스턴스의 생성을 의미한다. 데이터를 흘려보내는 파이프는 연산을 의미하며, 메소드(파이프)의 종류는 두가지로 나뉜다. 중간 연산 : 마지막이 아닌 위치에서 진행이 되어야하는..
Optional 클래스 Optional클래스는 T타입의 객체를 포장해주는 일종의 래퍼 클래스이다. Optional 클래스는 if~else 구문을 대신할 수 있다. 조건에 따른 코드의 흐름이 나눠지는 것을 막을 수 있어 코드를 더 깔끔하게 구성할 수 있다. Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 단순하게 처리할 수 있다. 즉, 복잡한 조건문 없이도 null값으로 인해 발생하는 예외를 처리할 수 있게 된다. 💡 NullpointerException 예외 처리 클래스를 정의할 때 인스턴스 변수는 null이 되지 않게 유효한 값을 가지고 있도록 초기화 해주는 것이 좋지만, null을 허용해야 하는 경우도 있다. 이때 null 가능성에 대비하는 코드의 작성은 번거..
메소드 참조 메소드 참조는 람다식으로 줄어든 코드의 양을 조금 더 줄일 수 있게 한다. 따라서 메소드 참조가 유용한 상황에서는 람다식이 아닌 메소드 참조를 사용해 해결 할 수 있다. 메소드 참조의 유형은 다음과 같이 4가지로 정리할 수 있다. static 메소드 참조 참조변수를 통한 인스턴스 메소드 참조 클래스 이름을 통한 인스턴스 메소드 참조 생성자 참조 static 메소드 참조 자바 8부터 이미 정의되어 있는 메소드를 사용할 때 람다식을 작성할 필요 없이 메소드 정보만 전달할 수 있다. 대입연산자 오른편에 메소드에 대한 정보만 전달되면 전달된 인자를 그대로 넘겨주면서 해당 메소드를 호출하라는 의미이다. 클래스 이름 :: static 메소드 이름 Consumer c = l -> Collections.r..
자바에서 표준으로 정의하고 있는 함수형 인터페이스들에 대해 알아보자. 기본 함수형 인터페이스 함수형 인터페이스 추상 메소드 설명 Predicate boolean test(T t) 전달 인자를 근거로 참/거짓 반환 Supplier T get() 메소드 호출시 무언가를 반환 Consumer void accept(T t) 인자를 받아들이기만 함 Funtion R apply(T t) 입력/출력이 있음 (수학적으론 함수) * java.util.funtion 패키지에 정의되어 있음 Predicate 전달된 인자를 판단하여 true 또는 false를 반환해야 하는 상황에 사용할 수 있다. @FuntionalInterface public interface Predicate { boolean test(T t); } 더보..