공부/Java 4

Decorator Pattern

Proxy Pattern과 많이 유사하지만 그 의도에 따라 나뉜다. 프록시를 통해 접근 제어가 목적 -> Proxy 프록시를 통해 기능 부가 -> Decorator 데코레이터는 인터페이스를 의존한다. 인터페이스의 구현체는 String을 반환함. 데코레이터는 인터페이스를 구현한 뒤 실제 객체 혹은 데코레이터를 주입받는다. MessageDecorator에서 String값에 ******을 앞뒤로 추가해주고, TimeDecorator에서 실제 객체의 메서드 실행시간을 구해준다. 클라이언트 또한 인터페이스를 의존하며 주입받은 객체의 메서드를 이용하여 요청을 완료한다. 실 객체 인스턴스를 생성 -> 데코레이터가 실 객체를 주입받음 -> 클라이언트는 데코레이터를 주입받아 요청을 실행.

공부/Java 2024.01.09

Proxy Pattern

A객체가 B객체로 직접 요청을하는것이 아닌 어떠한 대리자를 통해 간접적 요청하여 접근을 제어하는 패턴 손님이 식당에 토시살 3인분을 주문했는데 식당에서 직접 횡성으로가서 한우를 잡아오지않고 냉장되어있던 토시살을 꺼내오는 느낌.. 요청은 실제 객체를 호출하지않고 대리자인 Proxy에 요청해 값을 넘겨받는다. 또한 요청은 interface에 의존하므로 요청자는 의존하는것이 Proxy인지 실제객체인지 알 수 없음. 강의중 학습 테스트를 통해 더 이해하게됬다. RealSubject는 실제 객체며 이 클래스의 역할은 호출시 로그를 출력하고 1초간 쓰레드를 잠시 멈춘다. 실 객체인 RealSubject는 Subject라는 인터페이스의 구현체이다. 요청을 하는 객체인 ProxyPatternClient는 Subjec..

공부/Java 2024.01.08

TemplateMethod Pattern | Strategy Pattern

프로그램 코드를 작성하며 비슷한 규격의 코드가 반복 될 때, 프로그램의 핵심 기능과 부가 기능을 나누고 싶을 때 TemplateMethod Pattern을 사용한다. 학습 테스트를 통해 알아보자. 위 메서드의 대해 간단하게 훑어보자면 비지니스 로직을 실행하는 핵심기능과 메서드의 시작시간과 종료시간을 구해 메서드 실행시간을 구하는 부가기능이 공존하는 메서드다. 비지니스 로직을 수행하는 핵심기능은 각 logic별로 다르지만 시작시간과 종료시간을 구해 실행시간을 구하는 부가 기능은 logic1과 logic2 모두 같다. 이러한 비슷 규격의 코드를 템플릿화 시켜 변경되는 부분만 템플릿에 맞춰 사용하는 패턴이 템플릿메서드 패턴이다. 학습테스트에 적용해보자 Abstract Class에 골격이되는 템플릿메서드를 작성..

공부/Java 2024.01.06

동시성 문제와 TreadLocal

Spring 동시성 문제에 관한 강의를 듣고 복습 겸 정리겸 겸사겸사.. 우선 동시성 문제란... n개의 Thread가 동시에 하나의 자원에 접근할 때 발생하는 문제 강의에서 본 학습 테스트로 직접 동시성문제를 겪어봤다. nameStrore 라는 이름을 저장하는 필드값이 존재하고 fieldService가 제공하는 logic이라는 메서드에서는 매개변수로 name을 받고 log로 받은 name, nameStore에 현재 어떤 name값이 들어와있는지를 조회한다. (동시성문제 확인을위해 nameStore 조회전 1초간 Thread를 멈췄다.) 테스트는 2개의 Thread로 name을 nameStore에 저장해본다. 첫번째 동시적으로 nameStore Field 변수에 접근하지않고 2초라는 시간텀을 두고 각각의..

공부/Java 2024.01.04