Java 선택적 매개 변수

Rupam Yadav 2023년10월12일
  1. 메서드 오버로딩을 사용하여 Java에서 선택적 매개 변수 포함
  2. Optional컨테이너 객체를 사용하여 Java에서 선택적 매개 변수를 갖습니다
  3. Build Pattern을 사용하여 Java에서 선택적 매개 변수 포함
  4. Varargs를 사용하여 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
작가: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

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

관련 문장 - Java Function