본문 바로가기
프레임워크/flutter

생성자(Constructor)

by seongjko 2023. 10. 8.
728x90

클래스에서 클래스로 인자값을 전달해야 할 필요가 생겼는데 

생성자를 공부하지 않고는 도저히 할 수가 없을 것 같다.

 

1. 생성자란?

클래스는 자동차 설계도로 비유될 수 있고, 인스턴스(객체)는 실제 자동차로 비유될 수 있는데,

생성자는 자동차 공장의 생산 라인으로 비유될 수 있다.

고객들이 자동차를 주문할 때는 서로 제각기 다른 옵션을 넣어 주문한다.

그러면, 그때그때 주문에 따라 새로운 설계도를 제작해서 자동차를 제작하는 건 너무 비효율적이다.

기본적인 자동차 설계도는 하나로 유지하되 생산 라인에서 필요에 따라 이 기능은 넣었다가, 저 기능은 추가했다가

하는 것이 훨씬 효율적이라고 볼 수 있을 텐데 생성자가 그러한 역할을 한다.

 

2. 생성자의 종류 

기본 생성자(Default Constructor)와 명명된 생성자(Named Constructor)로 크게 나뉜다. 

 

기본 생성자(Default Constructor)

기본 생성자는 인수를 취하지 않는 가장 간단한 생성자 유형이며

클래스에 생성자를 정의하지 않으면, Flutter는 자동으로 기본 생성자를 제공한다.

이름은 아래에서 보시다시피 클래스 이름과 동일하다. 

class Person {
  String name;
  int age;

  Person() {
    name = '';
    age = 0;
  }
}

 

명명된 생성자(Named Constructor)

클래스 이름이 아닌 다른 이름을 가진 생성자를 뜻한다.

클래스의 객체를 여러 개 생성해야 하지만 제각기 특성이 다를 필요가 있을 때 유용하다. 

똑같은 자동차 모델이라도 라디오 옵션이 있는 자동차, 선루프 옵션이 있는 자동차 등으로 만들 필요가 있듯이 말이다. 

class Person {
  String name;
  int age;

  Person.fromName(String name) {
    this.name = name;
    age = 0;
  }

  Person.fromAge(int age) {
    name = '';
    this.age = age;
  }
}

위의 코드에는 fromName, fromAge 이렇게 2개의 생성자가 있다. 

fromName은 라디오 옵션을 추가하는 생산 라인, fromAge는 선루프 옵션을 추가하는 생산 라인

이렇게 이해하면 조금 더 와닿을 것 같다.

 

this?

위의 코드에는 this라는 키워드가 사용되었다.

this는 현재 인스턴스를 가리킨다.

따라서 this.name은 현재 인스턴스 안에 있는 name 변수를 가리킨다.

this.age도 마찬가지로 현재 인스턴스 안에 있는 age 변수를 가리킨다.

 

 

 

 

 

 

 

반응형