본문 바로가기

IT.모바일/배움

생성자 스타일 Named / Positional parameter 선택적 매개변수

by FrankUniq 2023. 12. 1.
SMALL

두 생성자 스타일은 서로 다른 사용 시나리오와 선호도에 따라 선택될 수 있습니다. 각각의 장단점을 비교해보겠습니다:

  1. Named Parameter 생성자 (Cleric({required this.name, int? a, int? b})):
    • 장점:
      • 매개변수의 순서가 중요하지 않아 호출 시 유연합니다.
      • 매개변수의 이름을 명시해야 하므로, 코드의 가독성이 좋아집니다.
      • 매개변수를 선택적으로 제공할 수 있어, 다양한 사용 사례에 적합합니다.
    • 단점:
      • 매개변수 이름을 항상 명시해야 하므로, 호출 시 조금 더 많은 타이핑이 필요합니다.
    • 적합한 사용 사례:
      • 매개변수가 많고, 각각의 목적이 명확할 때.
      • 함수 호출 시, 매개변수의 순서를 자유롭게 하고 싶을 때.
  2. Positional Parameter 생성자 (Cleric(this.name, {int? a, int? b})):
    • 장점:
      • 가장 중요한 매개변수(name)를 먼저 위치시켜, 사용 시 직관적입니다.
      • 선택적 매개변수(a, b)는 명시적으로 제공할 수도 있고, 생략할 수도 있어 유연합니다.
    • 단점:
      • name 매개변수는 항상 첫 번째 위치에 와야 하므로, 호출 시 순서를 고려해야 합니다.
    • 적합한 사용 사례:
      • 몇몇 매개변수가 항상 필요하고, 나머지는 선택적일 때.
      • 함수 호출 시, 가장 중요한 매개변수를 먼저 제시하고 싶을 때.

결론적으로, 어떤 생성자가 '낫다'고 말하기보다는, 각각의 사용 사례와 개발자의 선호에 따라 적절한 방식을 선택하는 것이 중요합니다. 이름(name)이 항상 필요하고, 나머지 매개변수는 선택적인 경우, 두 번째 방식이 더 직관적일 수 있습니다. 반면, 모든 매개변수를 동등하게 취급하고 싶거나, 함수 호출 시 매개변수의 순서를 자유롭게 하고 싶다면, 첫 번째 방식이 더 적합할 수 있습니다.

// 생성자[constructor]: 클래스의 인스턴스를 초기화하는 특별한 메서드, 클래스를 생성할 때 가장 먼저 호출되는 자.
class Person {
  // 기본 생성자[default constructor]: 클래스에서 별도의 생성자를 정의하지 않는다면 기본 생성자가 사용됨. 생략가능.
  Person();
}

class Person2 {
  String name;
  int age;

  // 매개변수가 존재하는 생성자
  Person2(this.name, this.age);
}

class Person3 {
  String name;
  int age;

  Person3({this.name = 'bien', this.age = 10});
}

class Person4 {
  String name;
  int age;

  Person4({required this.name, required this.age}); // 필수인자
}

void main() {
  var person = Person(); // 클래스 인스턴스 생성. 메모리에 올림.
  var person2 = Person2('bueno', 20);
  var perosn3 = Person3(name: 'abc'); // named parameter. 특정 변수에만 매개변수를 넘길 수 있다.
  var person4 = Person4(name: 'def', age: 30); 
}

댓글