Java 선택적 매개 변수
- 메서드 오버로딩을 사용하여 Java에서 선택적 매개 변수 포함
-
Optional컨테이너 객체를 사용하여 Java에서 선택적 매개 변수를 갖습니다 -
Build Pattern을 사용하여 Java에서 선택적 매개 변수 포함 -
Varargs를 사용하여 Java에서 선택적 매개 변수 포함
Java 클래스에서 메서드 나 함수를 디자인 할 때 일부 인수는 실행을 위해 선택 사항 일 수 있습니다. Java에는 선택적 매개 변수가 없지만이 기사에서 설명하는 다음 기술을 사용하여 선택적 매개 변수를 시뮬레이션 할 수 있습니다.
메서드 오버로딩을 사용하여 Java에서 선택적 매개 변수 포함
클래스에 이름은 같지만 매개 변수가 다른 메서드가 여러 개있는 경우이를 메서드 오버로딩이라고합니다. 여기에는mul이라는 동일한 이름을 가진 두 개의 메소드가있는Multiply클래스가 있습니다. 메서드에 전달 된 인수는 서로 다릅니다. 하나는 두 개의 int 유형 인수를 사용하고 다른 하나는 세 개를 사용합니다.
class Multiply {
static int mul(int a, int b) {
return a * b;
}
static int mul(int a, int b, int c) {
return a * b * c;
}
}
class TestOverloading {
public static void main(String[] args) {
System.out.println(Multiply.mul(2, 11));
System.out.println(Multiply.mul(2, 2, 11));
}
}
출력:
22
44
Optional컨테이너 객체를 사용하여 Java에서 선택적 매개 변수를 갖습니다
Java에서Optional은 널이 아닌 값을 포함하거나 포함하지 않을 수있는 컨테이너 객체입니다. 값이있는 경우isPresent()메소드는 true를 리턴하고get()메소드는 값을 리턴합니다.
null 값이 예상되는 경우이 클래스의ofNullable()메소드를 사용할 수 있습니다. 빈Optional개체를 반환하고 예외를 throw하지 않습니다. 여기서lastName변수는Student클래스 개체에 대해 null로 전달되므로 null 값을 포함 할 수있는Optional개체를 만들었습니다.
isPresent()메소드는 값이 있는지 확인합니다. 그렇지 않으면 아래 코드와 같이 기본 문자열이 할당됩니다.
import java.util.Optional;
public class Main {
public static void main(String args[]) {
Student("John", null, 25);
}
private static void Student(String name, String lastName, int age) {
Optional<String> ln = Optional.ofNullable(lastName);
String a = ln.isPresent() ? ln.get() : "Not Given";
System.out.println("name : " + name + ", lastname : " + a + ", age : " + age);
}
}
출력:
name : John, lastname : Not Given, age : 25
Build Pattern을 사용하여 Java에서 선택적 매개 변수 포함
빌드 패턴의 목적은 복잡한 객체 구성을 표현에서 분리하는 것입니다. 객체를 생성하는 데 필요한 로직 및 기본 구성 값은builder클래스에 포함되어 있습니다.
여기 코드에서 추가 클래스UserBuilder를 사용합니다.이 클래스는 불변성을 잃지 않고User객체를 빌드하기 위해 필요한 모든 속성과 선택적 매개 변수 조합을 포함합니다. User클래스에는 불변성을 유지하기 위해 getter 만 있고 setter가 없습니다.
public class User {
private final String firstName; // required
private final String lastName; // required
private final int age; // optional
private final String email; // optional
private User(UserBuilder builder) {
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
this.email = builder.email;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public String getEmail() {
return email;
}
@Override
public String toString() {
return "User: " + this.firstName + ", " + this.lastName + ", " + this.age + ", " + this.email;
}
public static class UserBuilder {
private final String firstName;
private final String lastName;
private int age;
private String email;
public UserBuilder(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public UserBuilder age(int age) {
this.age = age;
return this;
}
public UserBuilder email(String email) {
this.email = email;
return this;
}
public User build() {
User user = new User(this);
return user;
}
}
}
TestUser클래스에서UserBuilder를 사용하여User클래스 개체를 만듭니다. user1오브젝트의 경우 모든 속성을 전달하고user2오브젝트의 경우age및email인수를 전달하지 않습니다. 따라서 선택적 매개 변수에 대한 기본값을 사용합니다. build()메소드는User객체를 생성하고 반환합니다.
public class TestUser {
public static void main(String args[]) {
User user1 = new User.UserBuilder("John", "Doe").age(24).email("john.doe@dex.com").build();
System.out.println(user1);
User user2 = new User.UserBuilder("Jack", "Luther").build();
System.out.println(user2);
}
}
출력:
User: John, Doe, 24, john.doe@dex.com
User: Jack, Luther, 0, null
Varargs를 사용하여 Java에서 선택적 매개 변수 포함
Java에서Varargs(가변 길이 인수)는 메소드가 0 개 또는 여러 개의 인수를 허용하도록 허용합니다. 이 특정 접근 방식을 사용하면 유지 관리 문제가 발생하므로 사용하지 않는 것이 좋습니다.
여기 아래 코드에는display() 메소드가있는VarargsExample클래스가 있습니다. 이 메소드는String유형의 임의 개수의 매개 변수를 사용합니다. varargs를 사용하는 동안 염두에 두어야 할 몇 가지 규칙은 각 메소드가varargs매개 변수를 하나만 가질 수 있으며 마지막 매개 변수 여야한다는 것입니다.
public class VarArgsCheck {
public static void main(String args[]) {
VarargsExample.display();
VarargsExample.display("here", "are", "the", "varargs", "to", "check");
}
}
class VarargsExample {
static void display(String... values) {
String arr[] = values;
System.out.println("display method invoked ");
System.out.println("Value length " + arr.length);
}
}
출력:
display method invoked
Value length 0
display method invoked
Value length 6
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn