본문 바로가기

java19

Design Patterns - Factory Method 구체적으로 어떤 인스턴스를 만들지는 서브 클래스가 정한다 다양한 구현체(Product)가 있고, 그중에서 특별한 구현체를 만들 수 있는 다양한 팩토리(Creator)를 제공할 수 있다. 확장에 열려있고 변경에 닫혀있는 구조로 만들어보자 public interface ShipFactory { default Ship orderShip(String name, String email) { validate(name, email); prepareFor(name); Ship ship = createShip(); sendEmailTo(email, ship); return ship; } void sendEmailTo(String email, Ship ship); Ship createShip(); private void .. 2021. 11. 17.
Design Patterns - Singleton 인스턴스를 오직 한개만 제공하는 클래스 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러개 일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한개만 만들어 제공하는 클래스가 필요하다. 싱글톤 패턴을 가장 단순히 구현하는 방법 public class Settings1 { private static Settings1 instance; private Settings1() { } public static Settings1 getInstance() { if (instance == null) { instance = new Settings1(); } return instance; } } 생성자를 private으로 만든 이유 : 외부에서 해당 인스턴스에 직접 접근을 막기 위해 getInstance(.. 2021. 11. 11.
함수형 인터페이스를 이용한 Builder Builder 패턴 Java에서 객체를 생성하기 위해선 기본적으로 생성자를 이용한다. 필요에 따라서 파라미터가 없는 생성자, 전체 멤버변수를 입력받는 생성자 또는 일부만 받는 생성자를 사용한다. 하지만 이 생성자를 이용해 객체 생성을 할때 불편함이 좀 있다. 만약 클래스의 멤버변수가 엄청 많을 때, 그리고 상황에 따라서 그 중 일부의 멤버변수만 사용하고 그 사용처가 매우 많다면 각 상황별 생성자를 매번 만들어 주는것은 너무 번거롭다. 이를 해소할 수 있는 방법이 Builder이다. public class Member { private String name; private int age; private String address; public Member() { } public Member(String n.. 2021. 5. 29.
더 자바(java 8) - CompletableFuture Concurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 ex) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있다 ex) 녹화를 하면서 인텔리J로 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있다 Java에서 지원하는 Concurrent 프로그래밍 멀티프로세싱 멀티쓰레드 Java 멀디쓰레드 프로그래밍 Thread public class App { public static void main(String[] args) throws InterruptedException { MyThread myThread = new MyThread(); myThread.start(); } static class MyThread extends Thread { public void run(.. 2021. 5. 26.
더 자바(java 8) - Stream, Optional, Date Stream List names = new ArrayList(); names.add("Kang"); names.add("Min"); names.add("Hyeong"); Sequence of elements supporting sequential and parallel aggregate operations 데이터를 담고 있는 저장소(컬렉션)이 아니다 Funtional in nature, 스트림이 처리하는 데이터 소스를 변경하지 않는다 Stream stringNames1 = names.stream().map(String::toUpperCase); names.forEach(System.out::println); 스트림으로 처리하는 데이터는 오직 한번만 처리한다 Stream stringNames1 = name.. 2021. 5. 19.
더 자바(java 8) - 인터페이스의 변화 기본 메소드 (Default Method) 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법 해당 인터페이스를 구현한 클래스를 깨뜨리지 않고 새 기능을 추가할 수 있다. 기본 메소드는 구현체가 모르게 추가된 기능으로 리스크가 있다. 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다. 반드시 문서화 할 것 (@implSpec 자바독 태그 사용) Object가 제공하는 기능 (equals, hashCode)는 기본 메소드로 제공할 수 없다. 인터페이스를 상속받는 인터페이스에서 다시 추상메소드로 변경할 수 있다. 인터페이스 구현체가 재정의 할 수도 있다. public interface Foo5 { void printName(); /* @ImplSpec 이 구현체는 getName()으로.. 2021. 5. 11.