static은 class와는 조금 다른 사용자 정의 데이터형이다.
class는 필드나 메서드 데이터를 힙에 저장하고, stack에서 참조하는 방식으로 생성자를 통해 하나씩 생성하고,
사용할때는 그 heap을 참조하는 방식이다.
반면, static을 붙인 채로 필드나 메서드 데이터를 생성하면 static을 위해 할당되는 고정된 메모리 영역이 있고
어디서 접근을 하든 그 메모리 공간을 참조하는 방식이다. 일반적인 객체처럼 생성되고 삭제되는 것이 아니라, 애플리케이션 전반에 걸쳐서 한 번만 메모리에 올라가고 계속 유지된다는 뜻이다.
즉, 몬스터 인스턴스를 해도 static으로 생성된 클래스나 메서드는 새로 생성되지 않는다.
원래 있던 static으로 할당되어 있는 메모리를 참조할 뿐이다.
어떤 사용처가 있나 ?
예를 들어 몬스터라는 독립적인 객체들 (몬스터 클래스로 여러개를 찍어낸 객체들) 은 독립적이고
다른 heap 메모리에 저장되지만, Score라는 변수를 static 으로 선언해주면 어디서나 동일한 값을 유지한다.
만일 static으로 선언하지 않았다면, 몬스터를 잡을 때마다 다른 곳의 스코어가 올랐겠지만
static으로 선언해주었기에 서로 다른 몬스터를 잡아도 하나의 스코어 변수가 올라간다.
Static의 장점
- 공유 데이터 관리 : 방금 본 Score와 같이 여러 인스턴스가 같은 데이터를 공유해야 할 때에 쓰임
- 전역 접근 : static으로 선언된 변수나 메서드는 어디서나 접근 가능해서 전역 상태 관리가 편함
- 메모리 효율성 : 한 번만 로드되고, 모든 객체가 이를 공유해서 메모리 사용량을 줄임
- 싱글톤 패턴 구현 : 특정 클래스의 인스턴스가 단 하나만 존재하도록 하는 방법 // 곧 배움
Static의 단점
- 유연성 부족 : 동적으로 생성되고 삭제되지 않아서 유연성이 떨어진다
- 테스트가 어려움 : 전역적으로 접근 가능, 테스트할 때 특정 상태 가정이 어렵다
- 메모리 누수 위험 : static 필드가 계속 남아 있어서, 잘못 관리하면 메모리 누수가 생길 가능성
- 의존성 증가 : 많이 사용하면 코드가 서로 강하게 연결되고 의존성이 높음
Static의 사용 In Unity
- 전역 변수 관리 : 게임 설정 값, 공통 데이터(이름) 등
- 싱글톤 패턴 : 특정 클래스의 인스턴스가 하나만 존재해야 할 때
- 유틸리티 클래스 (공통 동작을 위한 static 메서드)
참조 :
https://m.blog.naver.com/i_am_gamer/223243597112
12. 유니티 static(정적) 이란?
static 의 사전적 의미는 "정적(靜的)". 움직이지 않는다는 뜻 입니다. C#에서 static은 필드나...
blog.naver.com
'개념공부' 카테고리의 다른 글
Gizmos 관련 메서드 (0) | 2024.12.23 |
---|---|
Unity Animation with method (1) | 2024.12.22 |
캡슐화(Encapsulation) (0) | 2024.12.15 |
ScriptableObject (1) | 2024.12.15 |
트리의 회전과 AVL 트리 (0) | 2024.12.11 |