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

mkp0131님의 프로필 이미지
mkp0131

작성한 질문수

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

함수내에서 인스턴스 생성전 사용하기위해선 static 메소드를 부여해야된다고 이해하면 될까요?

작성

·

299

0

parseItemCode() 메소드에 static 을 부여해야 사용시 에러가 발생하지 않는데,

제가 알기론 static 메소드는 Class에서 instance를 생성하지 않고 사용가능한 메소드를 생성하기 위해 사용하는 것으로 압니다.

 

함수내에서 인스턴스 생성전 사용하기위해선 static 메소드를 부여해야된다고 이해하면 될까요?

답변 1

0

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

안녕하세요.

인스턴스 생성전에 사용한다는 표현은 좀 많이 어색한 것 같습니다.

인스턴스에 귀속되는 함수가 아니라 클래스에 귀속되는 함수를 생성할때 static 키워드를 사용합니다.

이부분은 제 Dart OOP 강의를 추가 참고해주세요!

mkp0131님의 프로필 이미지
mkp0131
질문자

class DataUtils {
  static getTimeFromDateTime({required DateTime dateTime}) {
    return '${dateTime.year}-${dateTime.month}-${dateTime.day} ${getTimeFormatter(dateTime.hour)}:${getTimeFormatter(dateTime.minute)}';
  }

  static getTimeFormatter(int number) {
    return number.toString().padLeft(2, '0');
  }
}

위의 코드에서 getTimeFromDateTime 함수가 내부에서 getTimeFormatter 함수를 호출하기 위해선 getTimeFormatter 함수에 static 을 부여해야하는데,

클래스 내부에서 클래스 내에 선언되어 있는 함수를 사용하기 위해선 static 메소드가 필요한 것 같은데, 왜 그렇게 되는 것인지 원리가 궁금합니다.

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

안녕하세요.

이 역시 올바르게 이해하는 어프로치는 아닙니다.

static 함수가 아닌 함수에서 static 함수를 실행할수도 있고 static이 아닌 함수도 실행할 수 있습니다.

static이 아닌 함수에서는 (인스턴스에 귀속된 함수) static 함수를 실행하는 것 처럼 인스턴스에 귀속되는 함수는 실행이 불가능합니다.

이 부분은 문법적으로 봐도 당연한 상황입니다. 예를들어서 getTimeFromDateTime() 함수가 static일 경우 DataUtils.getTimeFromDateTime()으로 실행 가능하나 static이 아닐경우 DataUtils().getTimeFromDateTime() 이런식으로 실행해야합니다. 이 부분은 OOP 강의에서도 설명 드렸듯이 문법적으로 규정 돼있는 부분입니다.

getTimeFromDateTime 함수에서 getTimeFormatter를 호출할때도 마찬가지입니다. getTimeFromDateTime이 static이고 getTimeFormatter가 마찬가지로 static일경우 DataUtils.getTimeFormatter()로 실행이 가능합니다.

하지만 static이 아닐경우 DataUtils().getTimeFormatter() 이렇게 실행해야겠죠. 인스턴스 귀속이니까요.

그러니 "클래스 내부에서 클래스 내에 선언되어 있는 함수를 사용하기 위해선 static 메소드가 필요한 것 같은데, 왜 그렇게 되는 것인지 원리가 궁금합니다." 이렇게 말씀하신건 사실이 아닙니다. static과 관계없이 함수를 실행하려면 static이든 아니든 어디서든 실행은 가능합니다. 인스턴스에 귀속되는지, 클래스에 귀속되는지의 차이입니다.

mkp0131님의 프로필 이미지
mkp0131

작성한 질문수

질문하기