Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- AWS
- db
- xml
- list중복제거
- 리스트차집합
- 지옥같은git
- hashset
- 리스트합집합
- ansible
- WordPress
- Annotation
- enum
- peer authentication 에러
- 두개리스트비교
- 리스트교집합
- Spring
- 권한정책
- 널포인터에러
- 중복제거
- Java
- instance생성
- postgresql13
- PostgreSQL
- awsconsole
- anymatch메서드
- mybatis
- route53
- 리스트비교
- wordpress블로그
- lightsail
Archives
- Today
- Total
Anyway
[Spring] 정적 팩토리 메서드 패턴 본문
이전에 개발했을 때는 객체를 인스턴스화 할 때 직접적으로 생성자를 호출하여 생성하였는데 별도의 객체 생성의 역할을 하는 Class 메서드를 통해 객체 생성할 수 있다는 것을 알았다! 정적 팩토리 메서드 패턴이라고 하는 개발자가 구성한 Static Method를 통해 간접적으로 생성자를 호출하여 객체를 생성하는 디자인 패턴이라고 한다. 좀 더 명확하게 정리해보자.
[정적 팩토리 메서드 패턴(Static Factory Method Pattern]
정적 팩토리 메서드 패턴은 객체 생성의 복잡성을 감추고, 객체 생성을 위한 더 나은 가독성, 유연성을 제공하는 패턴이다. 이 패턴은 'new' 키워드를 직접 사용하지 않고 클래스 내에서 정의된 정적 메서드를 통해 객체를 생성하는 방법을 의미한다. 이 메서드는 일반적으로 객체를 생성하거나 변환할 때 사용된다.
[정적 팩토리 메서드 패턴의 주요 특징]
- 정적 메소드 사용 :
객체를 생성하기 위해 'static' 메서드를 사용한다. 이 메서드는 클래스의 인스턴스를 생성하여 반환한다. - 명명된 메서드 :
정적 팩토리 메서드의 이름을 개발자가 결정할 수 있다. 이로 인해 메서드 이름을 통해 객체의 의도나 생성 방법을 명확하게 알 수 있다. - 캡슐화된 생성 로직 :
객체 생성 로직이 메서드 내부에 캡슐화되어 있기 때문에 복잡한 객체 생성 과정을 메서드 내부에 감출 수 있다. - 객체 재사용 :
정적 팩토리 메서드는 동일한 객체를 반환하거나 캐싱을 통해 객체를 재사용할 수 있다. 이는 성능 최적화에 유리하다. - 상속을 통한 유연성 제공 :
팩토리 메서드는 클래스의 서브클래스를 반환할 수 있다. 이를 통해 다양한 하위 클래스의 객체를 생성할 수 있다.
[정적 팩토리 메서드 패턴의 장점]
- 가독성 :
메서드 이름을 통해 생성될 객체의 의도나 용도를 명확하게 나타낼 수 있어 코드의 가독성이 높아진다. - 객체 재사용 :
동일한 객체를 반환하거나 캐싱 메커니즘을 통해 객체를 재사용할 수 있어 메모리 효율을 높일 수 있다. - 유연한 객체 생성 :
팩토리 메서드를 통해 생성 로직을 변경해도 외부 코드에 영향을 미치지 않으므로 유지보수가 용이하다. - 추가적인 생성 로직 :
객체 생성 시 추가적인 로직을 포함할 수 있다. 예를 들어, 입력 값 검증, 초기화 작업 등을 포함할 수 있다. - 다형성 제공 :
서브 클래스를 반환하거나 상황에 다라 다른 객체를 반환할 수 있어 다형성을 쉽게 구현할 수 있다.
[정적 팩토리 메서드 예시]
public class CommonResult {
private int code;
private String message;
private Object data;
public static CommonResult data(Object data) {
return new CommonResult(CommonResultCode.SUCCESS, data);
}
}
static이 아니면 ?
익히 쓰고 아는 인스턴스 팩토리 메서드가 된다.
[인스턴스 팩토리 메서드]
- 클래스의 인스턴스가 필요하며, 해당 인스턴스를 통해 메서드를 호출해야 한다.
- 'static' 키워드가 없으며 인스턴스마다 호출할 수 있다.
- 여러 인스턴스가 각기 다른 방식으로 객체를 생성해야 하는 경우 유용하다.
- 주로 상태를 기반으로 객체를 생성하거나 상속 구조에서 사용된다.
[인스턴스 팩토리 메서드의 사용 시 고려사항]
- 인스턴스 필요성 :
인스턴스 팩토리 메서드는 메서드를 호출하기 전에 반드시 클래스의 인스턴스를 생성해야 한다. 따라서 단순히 객체를 생성하는 것보다 인스턴스가 필요한 더 복잡한 상황에 적합하다. - 상태 관리 :
인스턴스 팩토리 메서드는 클래스의 인스턴스 필드와 상호작용하여 객체를 생성할 수 있다. 이를 통해 객체 생성 시 더 많은 컨텍스트를 제공할 수 있다. - 다형성 :
인스턴스 팩토리 메서드는 상속을 통해 다양한 하위 클래스에서 다른 방식으로 객체를 생성할 수 있다.
[인스턴스 팩토리 메서드 예시]
public class UserFactory {
private String defaultName;
private int defaultAge;
public UserFactory(String defaultName, int defaultAge) {
this.defaultName = defaultName;
this.defaultAge = defaultAge;
}
// 인스턴스 팩토리 메서드
public User createUser() {
return new User(defaultName, defaultAge);
}
}
// 인스턴스 팩토리 메서드 호출
UserFactory factory = new UserFactory("DefaultName", 20);
User user = factory.createUser();
즉 정적 팩토리 메서드 'static'이 아니게 되면, 메서드 호출에 인스턴스가 필요해지며 그 성격이 인스턴스 팩토리 메서드로 변하게 된다.
이 경우, 메서드를 호출하기 위해 클래스를 먼저 인스턴스화해야 하므로 인스턴스 상태를 반영한 객체 생성이 가능해지지만 단순한 객체 생성이 목적이라면 정적 팩토리 메서드가 더 적합할 수 있다.
'Java > Spring' 카테고리의 다른 글
[Spring] @RequestBody가 쓰이지 않는 경우 (0) | 2024.08.28 |
---|---|
[Spring] @RequestBody 사용하기 (0) | 2024.08.28 |
[Spring] @Builder 패턴 사용하기 (0) | 2024.08.27 |
[Spring] @Configuration (0) | 2024.08.26 |
[Mybatis] <trim> 동적 쿼리 사용하기 (0) | 2024.08.26 |