본문 바로가기
Unity 끄적임

캡슐화, 객체 모델링, 추상화를 높여보자

by Dev_Cat 2025. 6. 22.
728x90
반응형
클라-서버 작업을 하면서, Neast List에 대해 고찰해본 이야기를 담았습니다.
이번 내용에 대해 본인이 생각하는 내용을 댓글로 마구마구 달아주셔도 됩니다!

 

서브컬처 게임 (혹은 다른 게임)을 보면 우리는 임무에 캐릭터를 파견하는 기능이 있다.

우리는 이를 위한 기능을 개발하면서 다음과 같이 Case 1, Case 2를 나눠 고민 할 수 있다.

// Case 1
class MissionDeployDataV1
{
    public List<int> MissionIndexList = new List<int>();
    public List<List<int>> CharacterKeyListGroup = new List<List<int>>();
}


// Case 2
class MissionDeployBaseData
{
    public int MissionIndex;
    public List<int> CharacterKeyList = new List<int>();
}

class MissionDeployDataV2
{
    public List<MissionDeployBaseData> MissionDataList =  new List<MissionDeployBaseData>();
}

 

 

나는 Case2가 더 좋은 코드라 생각한다. 아래는 내가 생각한 Case 1과 Case 2 장단점이다

 

Case1

장점)

  • 메모리 측면에서 약간 더 가볍게 느껴진다.

단점)

  • MissionIndexList와 CharacterKeyListGroup에 넣는 값이 무조건 순서대로 넣어야 한다는 암묵적인 룰이 필요하다
  • 특정 미션 데이터를 가져와 사용하기 불편하다
  • 확장성에 제한이 크다 (속성을 추가하거나 기능을 확장하는 측면에서)

 

Case2

장점)

  • 캡슐화: MissionIndex - CharacterKeyList 를 하나의 객체로 묶어 하나의 "미션 파견 데이터"라는 책임 부여
  • 객체 모델링: 미션 1개에 파견되는 캐릭터 라는 개념으로 1 : 1 매칭이 가능
  • 추상화: 복잡한 내부 구조 (이중 List) 대신 단순하게 리스트로 이 객체가 뭘 의미하는지 파악 가능

단점)

  • 2중 리스트에 비해 객체를 하나더 사용하다 보니 메모리가 조금 더 비싸보임

글을 다 적고 봤는데, 마치 Case2처럼 해! 라고 보일 수 있다. 그치만 도저히 Case 1의 장점을 파악하기 너무 어려웠다.

심지어 이중 List에 대한 네이밍도 ListGroup 이 괜찮은지 코드가 바로 읽히는지 고민이 많았다.

이에 더 많은 코드와 책을 보면서 더 파악해보고자 하며 열린 결말로 남긴다.

 

728x90
반응형

'Unity 끄적임' 카테고리의 다른 글

Array와 List 그리고 IList  (0) 2024.07.20
fake null 관련한 이야기  (0) 2024.06.14
Unity IL2CPP, JIT, AOT  (0) 2024.05.05
코루틴(Coroutine)  (0) 2023.11.20
[게임수학] 내적, 외적 이야기  (0) 2023.11.17