-
Notifications
You must be signed in to change notification settings - Fork 0
lowtek7/ProjectA
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
프로젝트A는 ECS 프로그래밍을 이용해서 개발한 온라인 오픈월드 프로젝트 입니다.
이 프로젝트에서 중요한 점은 의존성에 대한 문제를 해결하기 위해서 의존성 주입(dependency injection)을 사용한 것입니다.
우선 서비스 계층에서 게임에서 사용할 서비스들을 인터페이스로 설계 할 수 있습니다.
이 설계로 얻는 장점은 외부로 노출되는 기능을 인터페이스로 미리 설계하게 됨으로써 설계 시작부터 제약을 걺으로써 좀 더 좋은 형태의 코드를 생산 할 수 있습니다.
또한 서비스는 다양한 구현체로 GameLoader영역에서 의존성을 주입할 수 있습니다.
특정 시점에 다른 동작으로 동작해야하는 서비스가 생길 경우 의존성 주입을 통해 간편하게 전환 할 수 있습니다.
이로 인해서 플랫폼의 차이나 여러가지 상황에서 깔끔한 구현을 통해 대응 할 수 있는 큰 장점이 있습니다.
프레임워크의 설계원칙은 간단합니다.
의존성의 최소화. 기능의 명확한 스펙화 및 분리. 최대한의 제약.
의존성의 최소화로 인해 얻는 이점은 위에서 설명했습니다.
기능의 명확한 스펙화 및 분리는 서비스를 인터페이스로 설계하면서 그 목적을 달성할 수 있었습니다.
그리고 최대한의 제약은 게임의 데이터는 컴포넌트로 디자인 하되 동작하는 로직은 시스템 영역을 이용하게 됩니다.
서비스의 경우 로직을 제작하는 것이 아니라 필요한 데이터를 서비스에 제공하면 서비스에서 그것에 대한 답을 도출해 내서 제공하는것입니다.
이 설계 원칙들로 얻는 장점은 싱글톤 사용을 자제할 수 있다는 것입니다.
왜 싱글톤을 사용하지 않냐고한다면 싱글톤은 커플링이 될 수 있는 가능성이 열려있습니다.
또한 싱글톤은 생성과 소멸의 시점이 명확하지 않는 이슈가 자주 발생합니다.
개발 도중에 해당 매니저가 생성과 소멸을 제대로 제어하지 못하면 점점 프로젝트에 구멍이 발생 할 것입니다.
ECS를 선택한 이유
ECS는 상호 작용이나 행동들을 데이터를 통해 실행 할 수 있습니다.
따라서 데이터화 된 정보들은 렌더링과 상관없이 시뮬레이션을 가능하게 만들어줍니다.
또한 이렇게 제약한 룰은 프로그래머로 하여금 데이터 중심적인 코드를 작성하게 만들어줍니다.
다만 ECS 방식을 토대로 개발을 하게 된다면 좀 더 많은 시간과 어려움을 가지고 있다고 전 생각합니다.
마지막으로 이 프로젝트는 ServerA 저장소의 코드를 이용해서 네트워크 플레이가 가능합니다.
서버 모드로 돌아가게 된다면 클라이언트의 로직의 일부는 서버에서 담당하게 됩니다.
ServerA 저장소 주소 : https://github.com/lowtek7/ServerA
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published