인프런 커뮤니티 질문&답변

code11님의 프로필 이미지
code11

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

constructoer 개념에 대해 질문드립니다.

해결된 질문

작성

·

163

0

class Person {
  constructor(name) {
    this.name = name;
  }
  introduce() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

const otto = new Person('Otto');
otto.introduce();

해당코드는 제가 생성자에 대해서 잘 이해할수 없어서 MDN문서의 constructor 부분의 예제를 긁어왔습니다.

Person클래스를 만들고 그 안에는 constructor가 반드시 있어야하는데 

저기서 생성된 생성자 constructor는  constructor라는 이름을 가지고 있고 이건 쓰는사람이 마음대로 바꿔쓸수 있는건가요

그리고 const로 선언된 otto는 Person이라는 인스턴스를 만들고 매개변수로 'Otto'를 넣으면

생성된 인스턴스 Person의 생성자 constructor의 매개변수로 상속되는것 같은데

otto.Introduce();로 호출하는거보면 생성자인지 함수인지 헷갈립니다.

여기서 super라는 개념까지 들어가면 이해가 너무 어렵습니다..

return 이라는 것도 함수안에서 선언된 파라미터가 함수 바깥으로 나올수 없으니까 쓰는것이다 이렇게 알고 있는데 제가 정확히 알고 있는게 맞나요?

지금 2강째인 객체지향 프로그래밍을 듣고있습니다. 

 

 

답변 1

1

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

잘못된 예제를 보고계시는 것 같습니다.

해당 코드는 Javascript 코드로 보이네요.

Dart에서는 constructor를 선언할때 constructor라는 키워드를 사용하지않고 클래스와 똑같은 이름을 사용해서 선언합니다! 

그러니 이름을 마음대로 지으시는건 안되고 클래스랑 같은 이름을 사용하셔야합니다.

 

두번째로 인스턴스와 constructor를 구분하는 방법은 매우 쉽습니다.

constructor는 인스턴스가 생성될때 단 한번만 실행됩니다. 그러니 인스턴스에 '.'을 통해서 실행되는 함수들은 절대로 constructor일수가 없습니다.

그러니 otto.introduce()는 인스턴스에 introduce()가 붙었으니 생성자가 아니라 함수입니다!

 

예제로 보여주신 코드를 제가 Dart로 바꿔본다면 아래와같이 되겠습니다.

class Person {
  final String name;
  
  Person(this.name);
  
  introduce() {
    print('Hello, my name is $name');
  }
}

void main() {
  var otto = new Person('Otto');
  otto.introduce();
}

출력

Hello, my name is Otto

 

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

OOP를 만약 처음 접하신다면 매우 어렵게 느껴지는게 정상입니다.

조금이라도 더 빠르게 이해하고싶다면 코드를 직접 작성해보는게 중요합니다.

읽기만해서는 이해하기 매우 어려운 영역입니다!

추가 질문 있으시면 언제든 문의주세요~

code11님의 프로필 이미지
code11

작성한 질문수

질문하기