HOWTO · Java

Java 선택적 매개 변수

이 기사에서는 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오브젝트의 경우ageemail인수를 전달하지 않습니다. 따라서 선택적 매개 변수에 대한 기본값을 사용합니다. 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