내일배움캠프 52일차 TIL : 스테이지 전환 작업, HashSet 복습

woollim·2024년 12월 5일
0

내일배움캠프TIL

목록 보기
45/65
post-thumbnail

■ 개요

○ 오늘 계획

  • 에셋찾기
  • 스테이지 전환 수정
  • 에너미 스폰셋 함수 만들기


■ HashSet

○ 개념

  • HashSet은 집합(Set) 자료 구조
  • Unity에서 HashSet은 일반적으로 C#의 System.Collections.Generic 네임스페이스에 포함되어 있어 사용 가능
    • using System.Collections.Generic;
  • Unity 프로젝트에서 HashSet은 중복을 방지하거나 빠른 조회 속도가 필요한 상황에서 사용
    • 중복 허용 안 함: 동일한 값을 두 번 추가할 수 없음
    • 빠른 검색: 데이터의 해시 값을 기반으로 하기 때문에 삽입, 삭제, 검색 연산이 평균적으로 O(1)의 시간 복잡도를 가짐
    • 순서 없음: 데이터가 추가된 순서를 보장하지 않음
  • HashSet은 데이터를 빠르게 추가하거나 검색해야 하는 경우에 특히 유용하며, 리스트(List)나 배열(Array)보다 유리한 점이 많음

○ 사용법

  1. 네임스페이스 가져오기
using System.Collections.Generic;
  1. HashSet 생성
HashSet<string> myHashSet = new HashSet<string>();
  1. 데이터 추가
myHashSet.Add("Apple");
myHashSet.Add("Banana");
  1. 데이터 존재 여부 확인
if (myHashSet.Contains("Apple")) 
{
    Debug.Log("Apple이 존재합니다.");
}
  1. 데이터 제거
myHashSet.Remove("Banana");
  1. 모든 데이터 삭제
myHashSet.Clear();
  1. 집합연산
  • 교집합: 두 집합에 모두 포함된 요소.
  • 합집합: 두 집합의 모든 요소.
  • 차집합: 첫 번째 집합에만 포함된 요소.
HashSet<int> setA = new HashSet<int>() { 1, 2, 3, 4 };
HashSet<int> setB = new HashSet<int>() { 3, 4, 5, 6 };

// 교집합
setA.IntersectWith(setB);
Debug.Log(string.Join(", ", setA)); // 출력: 3, 4

// 합집합
setA.UnionWith(setB);
Debug.Log(string.Join(", ", setA)); // 출력: 1, 2, 3, 4, 5, 6

// 차집합
setA.ExceptWith(setB);
Debug.Log(string.Join(", ", setA)); // setA에만 포함된 값 출력

○ Unity에서 활용 예

  • 충돌 판정: 게임 오브젝트가 충돌했을 때 고유한 충돌 객체를 저장
    • 게임에서 여러 충돌체를 관리할 때 중복 충돌 객체를 제거하기 위해 HashSet을 사용
HashSet<GameObject> collidedObjects = new HashSet<GameObject>();

void OnCollisionEnter(Collision collision)
{
    collidedObjects.Add(collision.gameObject);
}

void Update()
{
    foreach (var obj in collidedObjects)
    {
        Debug.Log(obj.name + "와 충돌 중");
    }
}
  • 태그 관리: 중복이 없는 고유 태그를 관리
    • 태그를 중복 없이 저장하고 관리할 수 있음
HashSet<string> uniqueTags = new HashSet<string>();

void AddTag(string tag)
{
    if (uniqueTags.Add(tag))
    {
        Debug.Log(tag + "이 추가되었습니다.");
    }
    else
    {
        Debug.Log(tag + "은 이미 존재합니다.");
    }
}
  • 성능 최적화: 탐색 속도가 중요한 데이터 처리
    • 리스트(List)나 배열(Array)는 요소를 검색할 때 O(n)의 시간 복잡도를 가지지만, HashSet은 O(1)로 훨씬 빠름

○ 장단점

  • 장점
    • 중복 방지
    • 빠른 검색 및 삽입 성능
    • 집합 연산 지원
  • 단점
    • 메모리 사용량이 상대적으로 많음 (해시 테이블 사용)
    • 데이터가 순서 없이 저장되므로 특정 순서로 처리해야 할 경우 부적합

0개의 댓글