정적 팩터리와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기가 어렵다는 점이 있다. 그럼 이런 선택적 매개변수가 많을 때 클래스는 어떤 식으로 대응을 할까? 점층적 생성자 패턴 사용 점층적 생성자 패턴은 필수 매개변수만 받는 생성자와 선택 매개변수를 받는 생성자 여러개를 모두 두어 클라이언트가 요구하는 사항에 따라 객체를 생성하는 패턴 방식이다. public class NutritionFacts { private final int servingSize; // (mL, 1회 제공량) 필수 private final int servings; // (회, 총 n회 제공량) 필수 private final int calories; // (1회 제공량당) 선택 private final int fat; // (g..
지난 포스팅 때, 책을 그저 적기만 한 것 같아 다시 한번 포스팅을 시작했다.. 생성자와 정적 팩터리 메서드 보통 클래스의 인스턴스는 public 생성자를 활용하여 생성한다. 그런데 클래스 자체는 생성자와 별도로 아래와 같은 정적 팩토리 메소드를 제공할 수 있다. public static int testMethod() { return 0; } 위에서 설명한 바와 같이 클래스에서는 클라이언트에게 public 생성자를 제공해주지만 이 뿐만 아니라 정적 팩토리 메소드도 제공해줄 수 있다. //public 생성자 public class MyBook { public MyBook() {} } //static factory method public class MyBook { private MyBook() {} pub..
공통으로 사용하는 클래스를 만드는 팩토리 클래스를 두고 사용 클래스의 인스턴스가 팩토리 클래스 내에 있을 시에는 꺼내서 사용하고, 없을 시에는 새로 생성해서 사용하는 패턴 플라이 웨이트 패턴을 통해 메모리 공간을 절약할 수 있다. 기본 설계 FlyWeight를 다루는데 Client가 직접적으로 다루지 않고, FlyWeightFactory를 통해 다루는 것을 볼 수 있다. 예시 Client가 어떤 Image라는 객체를 반복적으로 필요로 하고자 할 때, Image 객체는 반복적으로 새로운 객체로 생성하게 된다. 그러나 이 때, 플라이웨이트 패턴을 사용하게 되면, Image 객체를 반복적으로 새로운 객체로 생성하는 것이 아니라 기존에 Image 객체가 있으면 기존 객체를 Client에게 전달하는 것이다. 이렇..
퍼사드 패턴 복잡한 과정을 간단하게 표현하는 퍼사드 패턴을 이해해보자. Facade는 "건물의 정면"을 의미하는 단어로 내부의 클래스를 추상화한 인터페이스를 외부에 제공해주는 의미를 지닌 패턴이다. 기본 설계 소스 예제를 통해 살펴보자 package com.pattern.ch14_facade.system; public class Facade { private HelpSystem01 helpSystem01; private HelpSystem02 helpSystem02; private HelpSystem03 helpSystem03; public Facade() { helpSystem01 = new HelpSystem01(); helpSystem02 = new HelpSystem02(); helpSystem0..
옵저버 패턴 한 객체의 상태 변화에 따라 다른 객체의 상태도 연동되도록 일대다 객체 의존 관계를 구성하는 패턴이다. 그럼 언제 사용하는 걸까? 데이터의 변경이 발생했을 경우 상대 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 사용하기 유용하다. Ex 1. 탐색기는 새로운 파일이 추가되거나 기존 파일이 삭제되었을 때 다른 탐색기에게 즉시 변경을 통보해야한다. Ex 2. 차량 연료량 클래스는 연료량이 부족한 경우 연료량에 관심을 가지는 구체적인 클래스(연료량 부족 경고 클래스, 주행 가능 거리 출력 클래스)에 직접 의존하지 않는 방식으로 연료량의 변화를 통보해야한다. 옵저버 패턴은 통보 대상 객체의 관리를 Subject 클래스와 Observer 인터페이스로 일반화한다. 이를 통해 데이터 변경을 통..
DNS(Domain Name System) 개인 컴퓨터의 웹에서 www.naver.com을 입력하면 어떤 과정을 통해 접속하는 지 살펴보자. DNS는 IP 주소를 기억하는 것이 어렵기 때문에 DNS가 등장한 것이다. DNS의 과정을 간략히 말하면 웹에서 www.naver.com을 입력하면 IP를 알아내기 위해 사용자에서 가장 가까운 곳에 위치한 DNS 서버에 www.naver.com의 IP주소를 문의하여 접근하게 되는 것이다. DNS의 상세한 과정을 알기 전에 먼저 Host와 IP 주소에 대해서 알아보자. IP 주소와 Hosts의 개념 Host : 인터넷에 연결된 컴퓨터 한대 한대 IP address : Host끼리 통신을 하기 위해 필요한 주소. 2대의 컴퓨터가 인터넷 통신을 위해 반드시 필요한 것은 ..
다양한 처리 방식을 유연하게 처리할 수 있다. 어떤 요청이 그 요청을 담당하는 객체에 들어오면 요청에 대해서 담당하는 것이 일반적이지만, 만약 해당 요청을 수행하지 못하는 객체라면 이 요청을 수행하기 위해 객체들을 연결 리스트와 같은 사슬 방식으로 연결하여 다음 객체에게 책임을 넘기는 형태를 말한다. 이는 요청을 보내는 객체와 이를 처리하는 객체간의 결합도를 느슨하게 하기 위한 방법이며 여러 객체에 처리 기회를 주는 것이다. 기본 설계 예제 : 사칙연산 프로그램 //Main public class ChainMain { public static void main(String[] args) { Calculator plus = new PlusCalculator(); Calculator sub = new Sub..
방문자 패턴을 이용하여 객체에서 처리를 분리해서 사용할 수 있다. 기본 설계 예제 소스 Visitor 및 Visitable public interface Visitor { public void visit(Visitable visitable); } public interface Visitable { public void accept(Visitor visitor); } VisitorA 및 VisitableA public class VisitorA implements Visitor{ private int ageSum; public VisitorA() { ageSum = 0; } @Override public void visit(Visitable visitable) { if(visitable instanceof..
- Total
- Today
- Yesterday
- springboot
- ifPresent
- 김영한
- 점층적 생성 패턴
- @Lazy
- jdk버전
- 이펙티브 자바
- 인프런
- JPA
- 자바8
- 빈 순환 참조
- package-private
- 팩토리 메소드 패턴
- try catch finally
- try with resources
- 복사 팩토리
- java8
- 정적팩터리메서드
- 생성자
- Effective Java
- 연관관계
- 스프링부트
- mustache
- 이펙티브자바
- Spring
- effectivejava
- flatMap
- 빌더 패턴
- junit
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |