Skip to content

CHAPTER 6 생성 디자인 패턴 #6

@lee-ji-hoon

Description

@lee-ji-hoon

6-1. 싱글턴 패턴 (1) 생각해보기

public class Demo {
    private UserRepo userRepo;  // 생성자  또는 IoC 컨테이너를 통한 의존성 주입

    public boolean validateCachedUser(long userId) {
        User cachedUser = CacheManager.getInstance().getUser(userId);
        User actualUser = userRepo.getUser(userId);
        // 주요 로직 생략
    }
}

CacheManager가 싱글턴 패턴인데, 리팩터링 시 코드의 변경을 최소화하면서 테스트 용이성을 향상 시키는 방법이 무엇이 있을까?

6-2. 싱글턴 패턴 (2) 생각해보기

Java의 경우 엄밀히 말하면 싱글턴 패턴의 유일성의 범위는 프로세스 안이 아닌 클래스 로더 안에 있다. 왜 그런지 생각해보자.

6-3 팩터리 패턴 (1) 생각해보기

  1. 팩터리 패턴은 보편적인 디자인 패턴인데, 팩터리 패턴을 사용중인 라이브러리들을 찾아보고 그 예시를 찾아보자.
  2. 단순 팩터리 패턴은 객체를 생성하는 메서드가 정적 메서드이기 때문에 정적 팩터리 메서드 패턴이라고 한다. 이와 같이 객체를 생성하는 메서드가 정적이어야 하는 이유와 이때 코드의 테스트 용이성에 어떤 영향을 미치는가?

6-4 팩터리 패턴 (2) 생각해보기

BeansFactroy 클래스의 createBean() 함수는 재귀 함수인데, 이 함수의 매개변수가 ref 유형이면 ref 속성이 가리키는 객체를 재귀적으로 생성한다. 설정 파일에서 객체 사이의 의존성을 잘못 설정하여 의존성이 순환하게 된 경우, BeansFactory 클래스의 createBean() 함수에 스택 오버 플로가 발생할 가능성이 있는지 생각해보고, 가능성이 있다면 해결방법이 무엇일까

6-5 빌더 패턴 생각해보기

public class A {
    private boolean isRef;
    private Class type;
    private Object arg;
    // TODO 개선해보자
}

이런 상황에서 isRef가 true이면 arg를 설정해야 하지만, type은 설정할 필요가 없고, isRef가 false이면 arg와 type 모두 설정해야 하는데 이런 요구 사항에서 위 클래스를 어떻게 개선해야 할까?

6-6 프록시 패턴 생각해보기

  • 키워드의 삭제도 지원해야 한다면 어떻게 구현을 해야 할까?
  • ShoppingCart 클래스의 getItems() 메서드를 통해 items 컬렉션을 얻으며, 컬렉션 내의 ShoppingCartItem 개별 객체의 데이터를 수정할 수 있기 때문에 이 설계에 문제가 있는데 이 문제를 어떻게 해결할 수 있을까?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions