• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

maketree static

20.12.02 05:25 작성 조회수 243

1

main함수가 static이니까 maketree도 static으로 맞춰준다고 하셨는데 구체적인 이유를 알 수 있을까요?

답변 2

·

답변을 작성해보세요.

7

당장 크게 중요하진 않지만 처음 배울 땐 개념이 헷갈리는 부분인데,

static 함수에서 static이 아닌 함수를 호출하려면
해당 객체를 만들어서 사용해야 하기 때문입니다.
(일단 static을 제거해보면 바로 에러가 나는 것을 확인할 수 있을거에요)

static이라 함은 그 클래스에 유일한 '공용' 함수라는 얘기고,
어떤 특정 객체에 종속적이지 않다는 의미이기도 합니다.
반대로 static이 아닌 일반 함수는 특정 '객체'에 종속적이기 때문에
내부 멤버 변수에 접근할 수 있다는 특징이 있습니다.

예를들어 스타크래프트 마린을 설계할 때
각 마린마다 체력이 다를테니
int hp는 내부 멤버 변수로 만들고, SetHp도 static이 아닌 함수로 만들겠죠.
그러면 Marine m = new Marine();
을 해준 다음에 m.SetHP() 등으로 사용할 수가 있습니다.

반면 모든 마린들이 공통적으로 갖는 특징은
특정 객체에 종속적이지 않게 만드는 것을 고려할 수 있는데,
가령 마린이 노래 부르는 함수 Sing()은 모든 마린이 공통적으로 사용할테니
static으로 만든다고 가정해봅시다.
이렇게 되면 Sing()는 static 함수로 만들어야 하고,
Marine.Sing()으로 바로 사용하게 됩니다. (Marine m = new Marine 필요 없음)

특정 객체 Instance에 종속적이냐 아니냐에 따라 static 사용 여부가 갈리는데,
어찌됐건 main함수는 static이라서 어떠한 객체에도 종속적이지 않고
위치만 class Program 내부에 있을뿐입니다.
이 상태에서 MakeTree를 static이 아닌 함수로 만들어주면,
main 내부에서 호출이 불가능하고
정말 억지로 호출하려면 new Program() 형식으로 객체를 만들어서 사용할 수밖에 없게 됩니다.

0

Hyobin Kim님의 프로필

Hyobin Kim

질문자

2020.12.03

답변 정말 감사해요 여태 Static의 의미는 아는데 언제 써야 할 지 몰랐는데 갈피를 잡은거 같습니다

말씀해주신걸 요약하면

Static은 해당 클래스의 Instance 없이 바로바로 사용할 수 있다(Instance에 독립적이다)

Non Static은 해당 클래스의 Instance가 있어야 접근이 가능하다(Instance에 종속적이다)

그리고 저 경우에서는 Static 함수인 main에서 non static 함수인 MakeTree를 부르려면, Program 클래스의 instance를 생성하는건..... 아무리봐도 이상하네요 ^^

항상 답변 빨리 해주셔서 감사합니다