# 리펙토링
- 기존의 코드를 외부의 동작방식에는 변함 없이 내부 구조를 변경해서 재구성하는 작업 또는 기술. 리펙토링이 시급한 일부 혹 전체 부분의 코드의 특징을 나쁜 냄새라 부르는데 대표적 나쁜 냄새는 중복되는 코드들이다.
# 디자인 패턴
- 소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할 수 있는 재사용 가능한 솔루션. 객체지향적인 설계를 확장성을 추구할 수 있는 방법은 크게 두 가지로 나뉨
1. 클래스 상속
2. 오브젝트 합성
# 템플릿 - 메서드 패턴
- 일부 기능을 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만둔 뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법. 즉쓴, 상속을 이용한 패턴. 변하지 않는 기능은 부모클래스 변경되며 확장되는 기능은 자식 클래스에 만든다.
템플릿 메소드는 오버라이드 가능한 메소드들을 담아놓고 이들을 활용한 전반적인 기본적인 알고리즘을 담고있다.
훅 메소드는 추상 메소드를 제외하고도 오버라이딩 가능한 형태로 선언된 메소드 대체적으로 수정자로 protected를 쓰지만 다른 걸 써도 가능.
추상 메소드 abstract 붙은 거
public abstract class ex {
public void templetemethod{
hook();
abstract();
}
protected void hook(){
....
}
abstract void abstract(){
...
}
}
[디자인 패턴] 템플릿 메소드(Template Method) 패턴이란? (tistory.com)
[디자인 패턴] 템플릿 메소드(Template Method) 패턴이란?
안녕하세요? 제이온입니다. 저번 시간에는 전략 패턴에 대해서 알아 보았습니다. 오늘은 템플릿 메소드 패턴을 설명하겠습니다. 템플릿 메소드(Template Method) 패턴 GoF의 디자인 패턴에 의하면, 템
steady-coding.tistory.com
# 팩토리 - 메서드 패턴
- 부모클래스에서 정의해둔 메서드를 상속해서 자식클래스에서 구체적인 오브젝트 생성하고 생성 방법을 결정하게 하는 것. 부모클래스에선 자식클래스에서 구현한 메소드를 호출해서 자식클래스에서 오버라이딩한 메서드에서 만든 필요한 타입의 오브젝트를 가져와 사용. 자식클래스에서 부모클래스로 생성한 오브젝트를 리턴할 때 인터페이스 형태로 리턴하기에 정확히 어떠한 오브젝트를 생성하였는지 부모클래스에서는 알지 못한다.
팩토리 메소드: 자식클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 정의한 메소드
# 전략 패턴
- 자신의 기능 맥락에서 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴. 디자인 패턴의 꽃이라 불릴 만큼 다양하고 자주 쓰이며 개방 폐쇄 원칙에 가장 잘 들어맞는 패턴.
# 템플릿/콜백 패턴 - 익명 내부 클래스
- 전략 패턴의 기본 구조에 익명 내부 클래스를 사용하는 것.
# 템플릿
- 고정된 작업, 변화 X
# 콜백
- 변화되는 작업. 템플릿 안에서 호출되는 것을 목적으로 만들어진 오브젝트. 자바에서는 메소드 자체를 파라미터로 전달할 수 없기 때문에 해당 메소드를 가진 오브젝트로 전달해야한다. 그래서 functional object라고도 불림.
콜백은 일반적으로 단일 메소드 인터페이스를 활용. 템플릿의 작업 흐름 중 특정 기능을 위해 한 번 호출되는 경우가 일반적이기 때문. 하지만 템플릿에서 여러가지의 전략을 사용한다면 다양한 수의 콜백을 사용할 수 도 있다. 즉, 콜백은 일반적으로 하나의 메소드를 가진 인터페이스를 구현한 익명 내부 클래스로 만들어짐.
- 패턴은 아래와 같은 흐름으로 작동한다.
1. 클라이언트의 역할은 템플릿 안에서 실행될 로직을 담은 콜백 오브젝트를 만들고, 콜백이 참조할 정보를 제공하는 것. 만들어진 콜백은 클라이언트가 템플릿의 메소드를 호출 할 때 파라미터로 전달.
2. 템플릿은 정해진 작업 흐름을 따라 작업을 진행하다가 내부에서 생성한 참조정보를 가지고 콜백 오브젝트의 메소드를 호출 한 호출함. 콜백은 클라이언트 메소드에 있는 정보와 템플릿이 제공한 참조정보를 이용해서 작업을 수행하고 그 결과를 다시 템플릿에 돌려준다.
3. 템플릿은 콜백이 돌려준 정보를 사용해서 작업을 마저 수행. 경우에 따라 최종 결과를 클라이언트에 다시 리턴.
위의 과정을 요약하자면 DI 방식의 전략 패턴 구조라 이해하면 편하다.
일반적인 DI에선 템플릿에 인스턴스 변수를 만들고 사용할 의존 오브젝트를 수정자 메소드로 받아서 사용. 반면 해당 패턴에선 매번 메소드 단위로 사용할 오브젝트를 새롭게 전달 받는 다는게 특징. 즉쓴, 콜백 오브젝트가 내부 클래스로서 자신을 생성한 클라이언트 메소드 내의 정보를 직접 참조한다는 것도 해당 패턴의 고유 특징.
# 싱글톤 패턴
# 나쁜 냄새 제거하는 다양한 코드 정리 전략
1. 중복된 코드는 먼저 메소드로 분리하는 간단한 시도.
2. 그중 일부 작업을 필요에 따라 바꾸어 사용해야한다면 인터페이스를 사이에 두고 분리해서 전략 패턴을 적용하고 DI로 의존 관계를 관리하도록 만든다.
3. 바뀌는 부분의 한 애플리케이션 안에서 동시에 여러 종류가 만들어질 수 있다면 이번엔 템플릿/콜백 패턴을 적용.
가장 전형적인 마지막 케이스에 해당하는 부분이 try/catch/finally 블록이다.
[Spring] 싱글톤? (0) | 2022.11.23 |
---|---|
[Spring] 제어의 역전(IoC)에 관한 고찰 (0) | 2022.11.22 |
[Spring] 스프링 각종 용어 및 개념 정리,, (0) | 2022.11.18 |
[JAVA] 임의로 Socketexception 발생시키기 (0) | 2022.11.17 |
[JAVA] 자바 패키지 컴파일 할 때 안될 때 (0) | 2022.11.14 |