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

도전적인 꾀꼬리님의 프로필 이미지

작성한 질문수

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

자바스크립트의 클래스 소개

클래스 문법 관련 질문 드립니다.

해결된 질문

작성

·

246

·

수정됨

0

안녕하세요.

6-0 자바스크립트의 클래스 관련 강의를 듣고 강의노트에 링크해주신 MDN 웹 문서를 읽어보다가 궁금한 게 생겨서 질문 드립니다.

강의에서는 아래 코드와 같이 클래스를 정의할 때 필드를 먼저 작성한 뒤에 생성자를 작성하는 방식을 소개 해주셨습니다.

class Student {
  // 필드
  name;
  age;
  grade;

  // 생성자
  constructor(name, grade, age) {
    this.name = name;
    this.grade = grade;
    this.age = age;
  }
}

그리고 링크해주신 MDN 문서의 예시에는 클래스를 정의할 때 필드 정의를 생략하고 바로 생성자를 작성하는 코드를 보여주고 있는데요.

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

필드를 명시적으로 작성하는 것과 작성하지 않는 것에는 어떤 차이가 있을까요? 강의에서 작성한 코드 중 필드 부분을 주석처리해도 동일한 실행 결과가 나와서 생략이 가능한 부분인지 궁금합니다. 혹은 생략하지 않고 반드시 적어주어야 하는 경우가 있을까요?

개인적으로 검색을 통해 찾아보고자 했는데 검색 방법이 잘못되었는지 적절한 자료를 찾지 못하여 질문을 남기게 되었습니다.

차근차근 이해하기 쉬운 좋은 강의 제공해주셔서 감사합니다.

 

++ 추가질문

후속 강의를 이어서 듣고 타입스크립트에서 필드를 생략 가능한 상황에 대해 공부했습니다.

자바스크립트에서는 타입스크립트와 달리 좀 더 유연하게 사용할 수 있기 때문에 필드를 작성하지 않아도 코드실행이 되는 것으로 보면 될까요?

답변 1

1

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

먼저 질문주신 것 처럼 자바스크립트의 클래스에서는 필드 선언을 생략할 수 있습니다.
필드를 명시적으로 선언한 것과 선언하지 않은것의 차이는 없습니다.
결과적으로 동일하게 동작합니다.

강의 중 필드를 선언하는 예시를 보여드린 이유는
클래스를 처음 입문하실 때 부터 축약된 버전부터 바로 살펴보시기 보다는
더 정석적인 버전의 클래스 선언을 보여드리기 위해 그렇게 진행했습니다.
실제로 프로젝트를 진행하실 때에는 자바스크립트를 사용하신다면 필드 선언을 기호에 따라 또는 컨벤션에 따라 자유롭게 생략하셔도 무방합니다😃

 

추가 질문에 대해서도 답변드리자면
우선 타입스크립트에서는 자바스크립트와는 달리 클래스의 필드 타입을 명시적으로 선언해줘야 합니다.
그렇지 않으면 필드의 타입을 추론할 수 없기 때문에 타입 오류가 발생하게 됩니다.
그러나 이때 생성자에 접근 제어자와 함께 매개변수로써 필드로 사용될 값을 명시하면 이때에는 타입을 추론할 수 있게 되기 때문에 필드 선언을 생략할 수 있습니다.

결과적으로 코드를 보고 타입을 추론할수 있는지, 없는지 여부에 따라 필드 선언의 생략 여부가 결정된다고 보시면 될 것 같습니다.