반응형

분류 전체보기 271

Optional

Optional 이란? 오직 값 한 개가 들어있을 수도 없을 수도 있는 컨테이너 NullPointerException 개발하면서 가장 많이 괴롭히는 예외 중 하나가 NPE(NullPointerException) 이다. 이를 피하기 위해서는 어떤 방법이 있었을까? Test t = null; System.out.println("t = " + t.v); // NPE 발생 //예외 처리 로직 if( t == null) { System.out.println("Test is NULL"); } else { System.out.println(" t = " + t.v); } NPE를 해결하기 위하여 위와 같이 if...else 문으로 null을 검사하는 예외 처리 로직을 추가해야한다. 하지만 이 방법으로는 null값을 ..

Language/Java 2022.07.02

Java8 Stream

Stream 이란? 컬렉션, 배열등에 대해 저장되어있는 요소들을 하나씩 참조하며 반복적인 처리를 가능하게 하는 기능이다. Stream을 이용한다면 불필요한 for문과 그 안에서 이루어지는 if문 등의 분기 처리를 쓰지 않고도 깔끔하게 직관적인 직관적인 코드로 변형할 수 있다. Stream API 사용법 Stream API는 데이터, Stream생성(), 중개연산()...종료연산(); 구조로 사용된다. Stream 특징 데이터를 담고 있는 저장소 (컬렉션)이 아니다 Funtnional in nature 스트림이 처리하는 데이터 소스를 변경하지 않는다 스트림으로 처리하는 데이터는 오직 한번만 처리한다 무제한일 수도 있다(Short Circuit 메소드를 사용해서 제한할 수 있다 중개 오퍼레이션은 근본적으로 ..

Language/Java 2022.07.02

추상 팩토리 & 팩토리 메서드 패턴 & 팩토리 패턴 정의

팩토리 패턴이란? 클래스의 인스턴스를 만드는 것을 서브클래스에서 결정하도록 한다는 것이다. 즉, new 키워드를 사용하는 부분을 서브클래스에 위임함으로서 객체 생성을 캡슐화하고 구상 클래스에 대한 의존성이 줄어든다는 이점을 얻을 수 있다. 팩토리 패턴에는 2가지 종류가 있다. 팩토리 메서드 패턴 추상 팩토리 패턴 팩토리 메서드 패턴 객체를 생성하는 인터페이스는 미리 정의하되, 객체 생성은 서브클래스(팩토리)로 위임하는 패턴 객체를 생성해서 반환하는 것을 말한다. 즉, 결과값이 객체인 것이다 팩토리는 인터페이스로 추상화되어 구체 팩토리의 변경을 유연하게 한다. 클라이언트는 결과적으로 어떤 객체가 생성될 것인지 알 필요가 없는 것이 특징이다. 추상 팩토리 패턴 서로 연관되거나 의존적인 객체들의 조합을 만드는..

디자인패턴 2022.06.19

인터페이스 기본 메소드와 스태틱 메소드

기본 메서드 (Default Methods) 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있다. 기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다. 반드시 문서화 할 것. (@implSpec 태그 사용) /** * @IimplSpec * getName()으로 가져온 문자열을 대문자로 바꿔 출력 */ public interface Foo { void printName(); default void printNameUpperCase(){ System.out.println (getName().toUpperCase()); } String getNa..

Language/Java 2022.06.19

메소드 레퍼런스

메소드 레퍼런스란? 람다가 하는 일이 기존 메서드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현 즉, 람다식을 더 간결하게 표현하는 방법이 메소드 레퍼런스 이다. 메소드 참조하는 방법 스태틱 메소드 참조 타입::스태틱 메소드 특정 객체의 인스턴스 메소드 참조 객체 레퍼런스::인스턴스 메소드 임의 객체의 인스턴스 메소드 참조 타입::인스턴스 메소드 생성자 참조 타입::new 메소드 또는 생성자의 매개변수로람다의 입력값을 받는다 리턴값 또는 생성한 객체는 람다의 리턴값 이다. 예제 코드 import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util.functi..

Language/Java 2022.06.18

함수형 인터페이스와 람다 표현식

람다 (인자 리스트) -> { 바디 } // 인자 -> 바디 Function plus10 = (i) -> i + 10; 인자 리스트 인자가 없을때 : () 인자가 한개일 때: (one) 또는 one 인자가 여러개 일 때 : (one, two) 인자의 타입은 생략 가능, 컴파일러가 추론(infer)하지만 명시할 수도 있다. (Integer one, Integer two) 바디 화상표 오른쪽에 함수 본문을 정의한다. 여러 줄인 경우에 {}를 사용해서 묶는다 함 줄인 경우에 생략 가능, return도 생략 가능 import java.util.function.BinaryOperator; import java.util.function.Supplier; public class Foo { public static v..

Language/Java 2022.06.18

자바에서 제공하는 함수형 인터페이스

Function T타입을 받아서 R타입을 리턴하는 함수 인터페이스 사용 방법 1 public class Plus10 implements Function { @Override public Integer apply(Integer integer) { return integer + 10; } } public class Foo { public static void main(String[] args) { Plus10 plus10 = new Plus10 (); System.out.println (plus10.apply ( 1 )); } } 사용 방법 2 import java.util.function.Function; public class Foo { public static void main(String[] args..

Language/Java 2022.06.18

함수형 인터페이스와 람다 표현식 소개

함수형 인터페이스 인터페이스 안에 추상 메소드가 하나만 있는것을 말한다. 함수형 인터페이스를 사용하고 싶으면 @FunctionalInterface 어노테이션을 사용하면 된다. @FunctionalInaterface는 자바에서 지원하기 때문에 import 할 필요가 없고 @FunctionalInaterface을 안써도 사용이 가능하지만 함수형 인터페이스인걸 알리기 위해 사용해주는것이 좋다 @FunctionalInterface을 사용하면 추상 메소드가 2개 이상일시 @FunctionalInterface에 에러 표시가 나타난다. static,default 사용하여 다른 메소드를 사용이 가능하다 @FunctionalInterface public interface RunSomething { void doIt();..

Language/Java 2022.06.15

팩토리 메소드 패턴(Factory Method Pattern)

팩토리 메소드 패턴이란? 객체를 생성하기 위한 인터페이스를 정의하고, 어떤 클래스의 인스턴스르 생성할지에 대한 처리는 서브클래스가 결정하는 디자인 패턴이다. 팩토리 메소드 패턴을 사용하는 이유? 팩토리 메소드 패턴을 사용하는 이유는 클래스의 생성과 사용의 처리로직을 분리하여 결합도를 낮추기 위한 것이다. - 생성할 객체 타입을 예측할 수 없을 때 - 생성할 객체를 기술하는 책임을 서브클래스에게 정의할때 - 객체 생성의 책임을 서브클래스에 위임시키고 서브클래스에 대한 정보를 은닉하고자 할때 팩토리 메소드의 장점 과 단점 장점 - 인스턴스를 만드는 과정를 수정하지 않고 새로운 인스턴스를 다른 방법으로 생성하도록 확장할 수 있다. - 코드가 간결해진다. 단점 - 클래스가 많아진다. 팩토리 메소드 패턴을 적용할..

디자인패턴 2022.06.11

싱글톤 패턴(singleton pattern)

싱글톤 패턴(Singleton Pattern) 이란? 인스턴스를 오직 하나만 제공하는 패턴을 싱글톤 패턴이라고 한다. 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러개 일 때 문제가 생길 수 있는 경우가 있다. 생성자가 여러차례 호출되어도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 리턴한다. 클래스의 인스턴스가 오직 1개만 생성되는 것을 보장하는 디자인 패턴이다. 싱글톤 패턴 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다 의존관계상 클라이언트가 구체 클래스에 의존한다 -> DIP를 위반한다 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다 테스트하기 어렵다 내부 속성을 변경하거나 초기화 하기 어렵다 private 생성..

디자인패턴 2022.06.04
반응형