프로젝트 진행 중 대부분의 데이터를 스크립터블 오브젝트를 사용하고 있는데
마침 유니티 코리아 공식채널에서 스크립터블 오브젝트를 다루는 것을 보아 시청하였다.
스크립터블 오브젝트란
스크립터블 오브젝트는 데이터 컨테이너이다.
특징
-데이터만 저장할 수 있다.
-MonoBehaviour 처럼 스크립트로 부착시키는 형태가 아니다.
(따라서 사용할 때는 MonoBehaviour 에서 참조하는 식으로 데이터를 꺼내 써야함)
(함수를 선언할 수는 있으나 static 처럼 사용이 가능)
-여러씬에서 동일한 데이터에 액세스 가능하도록 설계되었다.
-Asset 으로 저장되기에 외부에서도 유지가 된다.
스크립터블 오브젝트를 왜 쓰는가?
디자인 패턴 중엔 플라이웨이트 패턴(Flyweight Pattern) 이라는 것이 있다.
스크립터블 오브젝트를 활용하면 플라이웨이트 패턴을 사용하는 것과 같다.
플라이웨이트 패턴?
재사용 가능 객체 인스턴스를 공유시켜 메모리 사용량을 최소화하는 구조 패턴이다.
인스턴스를 생성하는 것은 그 인스턴스만큼 메모리를 사용하는 것이고
인스턴스에 변수나 속성을 넣어주면 그만큼 사용하는 메모리도 늘어나는 것이다.
그럼 인스턴스들에 공통적인 속성들을 넣어주면 그만큼 메모리 사용도 늘어나는 것이니
이 공통적인 속성들을 따로 담아두는 것을 만들어두고 거기서 가져다 쓰면?
그만큼 메모리 사용하는 것도 줄어들겠지? 라는 개념으로 보고있디.
메모리는 방이라고 생각하고 인스턴스를 사람이라고 생각하며 속성을 가구라고 보면
한정된 방 속에서 침대와 같이 따로 써야하는 가구들은 어쩔 수 없이 따로 배치를 하지만
세면대처럼 공용으로 사용하여도 되는 가구들은 따로 분류해서 같이 사용하면
그만큼 방의 공간이 확보되는 개념이라고 보면된다.
즉 최적화와 관련되어 있다.
또한 사용해보면 알겠지만 단순히 데이터의 수치만을 조절할 수 있기에
그만큼 오류 위험도 적어진다.
그런 이유로 사용하는 것이 스크립터블 오브젝트다.
확장된 Enum 처럼
처음 알게 된 것은 함수를 구현할 수 있다는 것이다.
이 스크립터블 오브젝트도 함수가 선언이 가능하기에 (물론 static 처럼 사용하여야함)
가위바위보, 속성(불,물,풀 처럼) 도 표현이 가능하다는 것이다.
public GameItem weakness; //이 오브젝트가 상성에 불리한 오브젝트
public bool IsWinner(GameItem other)
{
return other.weakness == this; //호출한 쪽의 weakness가 이 오브젝트와 같은지 여부를 bool로 판별
}
단순히 이름으로 나누어놓은 Enum 형태에서 나아가서 상성 표현등 어느정도 기능 구현도 할 수 있다는 점이다.
'TIL' 카테고리의 다른 글
2024 12 17 TIL (0) | 2024.12.17 |
---|---|
2024 12 16 TIL (0) | 2024.12.16 |
2024 12 13 TIL (0) | 2024.12.13 |
2024 12 12 TIL (1) | 2024.12.12 |
2024 12 11 TIL (0) | 2024.12.11 |