of (static factory)
Creates an instance where the factory is primarily validating the input parameters, not converting them.
--> of는 주로 입력 매개변수를 변환하지 않고 객체를 바로 생성하는 정적 메서드라고 할 수 있다.
class User {
private String name;
private int age;
// private 생성자: 외부에서 직접 호출할 수 없음
private User(String name, int age) {
this.name = name;
this.age = age;
}
// of 정적 메서드:
public static User of(String name, int age) {
return new User(name, age);
}
// hour, minutes을 인자로 받아 9시 30분을 의미하는 LocalTime 객체를 반환
LocalTime openTime = LocalTime.of(9, 30);
from (static factory)
Converts the input parameters to an instance of the target class, which may involve losing information from the input
--> from은 입력 매개변수의 데이터를 파싱하거나 변환하여 객체를 생성하는 정적 메서드라고 할 수 있다.
public class CarDto {
private String name;
private int position;
pulbic static CarDto from(Car car) {
return new CarDto(car.getName(), car.getPosition());
}
}
DTO와 Entity 간에 자유롭게 형 변환이 가능하여 내부 구현을 모르더라도 쉽게 변환할 수 있습니다.
Car carDto = CarDto.from(car); // 정적 팩토리 메서드를 쓴 경우
CarDto carDto = new CarDto(car.getName(), car.getPosition); // 생성자를 쓴 경우
parse (static factory)
Parses the input string to produce an instance of the target class.
--> 입력 문자열을 파싱하여 타겟 클래스의 인스턴스를 생성합니다.
public class Main {
// 입력 문자열을 파싱해서 User 인스턴스를 생성하는 메서드
public static User parseUser(String input) {
String[] parts = input.split(",");
String name = parts[0].trim();
int age = Integer.parseInt(parts[1].trim());
return new User(name, age);
}
public static void main(String[] args) {
String input = "John Doe, 30"; // 입력 문자열
User user = parseUser(input);
// 결과 출력
System.out.println("Name: " + user.getName());
System.out.println("Age: " + user.getAge());
System.out.println(user);
}
}
예시 자바 클래스
class Rectangle {
private int width;
private int height;
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
}
get (instance)
Returns a part of the state of the target object
--> 타켓 객체에 일부 데이터 값을 반환합니다.
// get: 타겟 객체의 상태 중 일부 반환
public int getWidth(Rectangle rectangle) {
return rectangle.width;
}
is (instance)
Queries the state of the target object.
--> 타겟 객체의 일부 데이터인지 물어보는 것
// is: 특정 상태인지 확인
public boolean isSquare(String state) {
return width == height;
}
to (instance)
Converts this object to another type.
--> 객체를 다른 타입으로 변환하는 것
// to: 객체를 다른 타입으로 변환 (여기서는 직사각형을 String 타입으로 변환)
public String toString() {
return "Rectangle[width=" + width + ", height=" + height + "]";
}
at (instance)
Combines this objects with another
→ 해당 객체를 다른 것과 결합하는 것
// at: 두 객체를 결합 (여기서는 두 직사각형의 넓이를 더한 새로운 객체를 생성)
public Rectangle at(Rectangle other) {
int combinedWidth = this.width + other.width;
int combinedHeight = this.height + other.height;
return new Rectangle(combinedWidth, combinedHeight);
}
참고자료
Method Naming Conventions (The Java™ Tutorials >
Date Time > Date-Time Overview)
'JAVA' 카테고리의 다른 글
[Java] 자바 predicate, consumer, supplier, function 이해하기 - 함수형 인터페이스 이해하기 (3) | 2024.09.22 |
---|---|
[Java] 자바 추상화 설계 이해하기 - 추상 클래스와 인터페이스 활용 (0) | 2024.09.21 |
[Java] Java Switch와 if/else 성능 비교 - jump table, lookup table (1) | 2024.09.17 |
[Java] 자바 인코딩, 디코딩, base64 인코딩, 디코딩 처리하기 (1) | 2024.09.14 |
[JAVA] static, final, staic final 개념 이해하기 - 전역 변수, 상수 (0) | 2024.09.14 |