이 시리즈는 유니티에서 제공하는 튜토리얼을 정리해서 올린 것입니다.
-----------------------------------------------------------------------------------
Static(정적) 멤버
Static(정적) 멤버란 클래스의 인스턴스가 모두 공유하는 멤버를 말한다.
더 나아가 Static 멤버는 클래스 그 자체에 속하기 때문에 인스턴스 통하지 않고서 직접적으로 접근하거나 사용될 수 있다.
-----------------------------------------------------------------------------------
일반적으로 멤버 변수(필드)는 각각의 인스턴스마다 고유하다. 한 클래스를 기반으로 하는 인스턴스 ㄱ,ㄴ이 있다고 가정하자.
위 클래스는 비정적멤버변수, 정적멤버변수, 생성자로 구성되어있다.
ㄱ,ㄴ 인스턴스를 하나씩 생성하고 ㄱ인스턴스의 비정적멤버변수값을 1증가시킨다. 그리고 ㄴ인스턴스의 비정적멤버변수값을 출력한다.
값이 증가했을리가 없다. 앞서 말했듯이 비정적멤버변수는 인스턴스마다 독립적으로 존재한다.
-----------------------------------------------------------------------------------
하지만 멤버 변수를 Static으로 선언하면 이야기가 달라진다.
Static으로 선언된 멤버 변수는 인스턴스가 만들어질때 생성되는게 아니다.
클래스내에 원래부터 생성되어있다. 그리고 이 값은 모든 인스턴스가 공유한다.
생성자에 주목하자. 기본 생성자를 사용하면 정적멤버변수 StaticNum을 1씩 증가시킨다.
기본생성자를 사용한 인스턴스 생성을 3회 시행한다. 그리고 정적멤버변수 StaticNum을 출력한다.
3이 출력된다.
앞서 말했듯 정적멤버변수는 모든 인스턴스가 공유한다.
그리고 클래스 그 자체에 속해있는 멤버변수이기 때문에 인스턴스를 통해 접할 필요도 없다.
위에서 보다시피 StaticSampleClass를 직접 참조해 StaticNum에 접근할 수 있다.
-----------------------------------------------------------------------------------
정적 메서드는 메서드 앞에 static을 붙인 것이다.
정적 멤버 변수와 비슷한 점이 많다.
한 가지 주의할 점은 정적 메서드 안에 비정적 멤버 변수를 사용할 수 없다는 것이다.
(오류가 발생한다)
왜냐하면 정적 멤버 변수와 같이 정적 메서드는 클래스 그 자체에 속해있는데
비정적 멤버 변수는 인스턴스를 필요로하기때문에
인스턴스의 생성없이 비정적 멤버 변수가 포함된 정적 메서드를 사용하려고 하면 생성되지 않은 변수를 메서드에 사용하는 꼴이기 때문에
오류가 나는 것이다.
인스턴스에서 자유로운 정적 멤버 변수는 정적 메소드에서 사용가능하다.
우리는 이미 정적 메서드를 사용해본 경험이 있다.
자주사용하는 Input클래스가 바로 그것이다.
별다른 참조없이 Input.Getaxis같은 함수를 호출한 우리는
어느새 정적메서드 사용자였던 것이다...
-----------------------------------------------------------------------------------
정적 클래스란 클래스 앞에 static을 붙인 것이다.
정적 메서드에서 설명한 것과 비슷한 이유로
정적 클래스 안에는 정적 멤버만 존재할 수 있다.
-----------------------------------------------------------------------------------
틀린 내용이나 부적절한 예시가 있다면 댓글로 알려주세요.
정적메소드에서는 정적변수 사용가능하다고 직접적으로 언급해주면 좋을듯
추가 완료!