개발일지 (static 함수)

Gamediver·2023년 1월 27일
0

개발일지

목록 보기
1/6

프로그래밍을 하면서 나를 괴롭힌 녀석이 있었다

바로 static 함수다

솔직히 이게 뭐하는 놈인지 모르겠다

나의 속 편한 코딩을 위해 이놈을 알아야겠다

오늘의 양식은 static 이다!

static(정적) 함수

"일반함수와 달리 인스턴스화 시켜서 사용하는 것이 아닌, 메모리에 올라가 있는 상태의 함수를 가져가 쓰는 형태"

솔직히 뭔말인지 와닿지는 않는다.

그림을 그려보면 조금 더 와닿을 것이다

위와 같이 RANDOM 이라는 클라스를 따로 만들고
Yummy()라는 일반함수와 Yummy2() 라는 정적함수를 만들었다 가정하자

그리고 random1과 random2 라는 RANDOM 클라스의 객체를 2개 만들어냈다

인스턴스화 된 객체들은 Yummy()라는 함수를 사용할 수 있지만, Yummy2()라는 함수는 사용할 수 없다

왜냐?!

정적함수 (e.g. Yummy2) 는 인스턴스화 시켜서 사용하는 것이 아닌 메모리에 올라가있는 상태의 함수를 사용하는 형태이기 때문이다

결론은 RANDOM 클라스를 사용해 인스턴스화 할때, Yummy2() 정적함수는 따라가지 않는다고 생각하면 편하겠다

실제 코드로 옮겨 사용해보자

위와 같이 RANDOM 클라스를 만들어주었다 그리고 아래와 같이 인스턴스화를 시켜보았다!

위를 통해 알 수 있듯이

일반함수의 경우 꼭 인스턴스화를 해야 사용할 수 있고

정적함수의경우 인스턴스화를 하지않고 클라스자체에서 사용이 가능하다

Math.Min(), Math.Max(), Math.Clamp() 또한 정적함수인 것이다

이 static의 개념은 함수에만 쓰이는것이 아니고, 위와 같이 변수에도 적용이 가능하다

그렇다면 위와 같이 RANDOM 클라스내에서 변수와 함수를 만들고, 함수내에 만들어진 변수를 이용한다고 가정해보자

어라..? 컴파일에러가 난다

여기서 알 수 있는 포인트는

static 함수에는 정적변수만 접근이 가능하며

일반함수에는 모든 변수가 접근할 수 있다는 것이다.

그럼 여기서 의문점이 하나 생길것이다

그래서 뭐 static으로 뭐 하라고.. ㅡㅡ

결론부터 말하자면

static을 이용하면 객체를 굳이 생성할 필요가 없어진다

아래의 예시를 보면 알 수 있다

Human Class에 DesotryEarth() 라는 함수를 사용하기 위해, Human Class를 인스턴스화하여 함수를 사용한 모습이다

하지만 static을 사용한다면? 아래와 같이 인스턴스화를 거치지 않고 사용할 수 있다

굳이 객체를 만들어 메모리를 사용할 필요가 없다는 의미이다

static 공부 끝!

profile
a random gameboy just walking past

0개의 댓글