현재 내가 참여 중인 프로젝트에서는 정적 팩토리 생성자를 이용하여 객체를 생성하는 경우가 많은데,
다른 프로젝트의 코드 리뷰를 하면서 보니 그러한 생성자 네이밍에도 뭔가 규칙이나 컨벤션이 있을 것 같았다.
물론 정적 팩토리 생성자의 장점 중 하나가 create, make 등 생성자 이름에 의미를 부여할 수 있다는 것이지만,
나는 흔히들 쓰는 of, from의 차이가 궁금했다.
우연히 개발자 단톡에서 아래와 같은 Java 공식 문서를 공유 받아, 간략하게 정리해보려고 한다.
- [Oracle] Method Naming Conventions
어떤 문서냐?
위 문서에서는 Java의 Date-Time API에서 사용 중인 여러 클래스의 다양한 메소드 네이밍 컨벤션을 표로 정리했다.
문서를 해석해보자면,
그러한 메소드의 이름들은 가능하면 클래스들 간에 일관성 있도록 만들어졌는데,
예를 들어 now 라는 메소드를 제공하는 많은 클래스들은 해당 클래스와 관련있는 현재 순간의 시간을 return 한다.
또다른 예시로는 하나의 클래스로부터 다른 클래스로 변환하는 역할을 하는 from 이라는 이름의 메소드들도 존재한다.
메소드 이름의 prefix와 관련된 표준화도 존재하여 Java Date-Time API들은 모두 그 표준화를 따르는데,
이 부분이 내가 알고 싶었던 부분이다.
Static Factory Method Prefix Convention
메서드 타입이 instance인 녀석들은 Data-Time과 관련된 인스턴스 prefix 이름들이라 자세히 볼 필요는 없을 것 같고,
나한테 필요한 정보는 메서드 타입이 static factory인 녀석들이다.
of
팩토리 메서드의 파라미터로 넘어온 값들을 검증하여 인스턴스를 생성할 때 사용한다.
DTO 같은 것이 넘어와 걔네들을 인스턴스로 변환하는 것이 아니다.
from
팩토리 메서드의 파라미터로 넘어온 값들을 해당 클래스의 인스턴스로 변환할 때 사용한다.
이 과정에서 파라미터의 값들 중 일부는 유실될 수 있다.
parse
팩토리 메서드의 파라미터로 넘어온 string 값을 파싱하여 해당 클래스의 인스턴스로 만들 때 사용한다.
Java에서 사용하는 Data-Time API에만 적용되는 내용일 수도 있지만,
읽어보면 우리가 코딩하면서 충분히 사용할 수 있는 것들이라고 생각한다.
끝!
'Study > Java' 카테고리의 다른 글
[Java][Jackson][Spring] @JsonIgnoreProperties(ignoreUnknown=true)? 꼭 필요한가? (1) | 2022.06.26 |
---|---|
[Java] removeIf 사용법 (0) | 2022.04.01 |
[Java] Java의 Garbage Collection - Generational GC, G1 GC (3) | 2021.05.10 |
[Java] HashMap, HashSet 이란? - (5) HashMap과 HashSet의 차이 (4) | 2021.04.01 |
[Java] HashMap, HashSet 이란? - (4) HashSet이란? (0) | 2021.03.31 |