일단 MVC에 대해 먼저 간단히 설명을 하자면
디자인 패턴 중 하나인데, 웹개발 쪽에서는 거의 종교 경전 처럼 숭배 받는 패턴임.
크게 Model - View - Controller 로 나뉘는데... 각 단어에서도 알 수 있듯이
유저의 요청을 받으면 컨트롤러가 쿼리에 적합한 데이터(모델)을 View에 넘겨서 띄우는 거임
MVC에 대한 도식을 그려보라고 하면 윗짤이 가장 정확한 짤임.
유저(브라우저)는 컨트롤러를 통해 요청을 하고, 컨트롤러를 통해 응답을 받음.
간혹 도식 중에 View와 User(Browser)를 연결하거나, Model과 View를 연결하는 경우도 있는데
의미적으로는 맞을지 몰라도, 개념적으로는 틀렸다고 보면 됨.
MVC 패턴의 가장 중요한 포인트는
View가 Model에 직접적으로 접근 하면 안된다는 거야.
농담이 아니라 jsp나 php 레벨까지 내려가면
ㄹㅇ 저 도식처럼 view 파일에서 쿼리 날리고
"이거슨 MVC 패턴입니다 으어어어" 하는 능지 처참한 새끼들도 수두룩함
괜히 Spring에서 jsp 사용 못하게 빼버린게 아니다.
다음은 ECS
개념만 설명할께
Entity는 우리가 흔히 알고 있는 GameObject야
그리고 Component들은 DOD 즉, 데이터 지향 방식이야.
그리고 System은 우리가 Manager라고 이름 붙이는 애들..작업을 처리하는 애들이고...
가령 각각의 GameObject 사이의 거리를 구하는 작업을 한다고 하면
FindComponents 해가지고 Array 받아서 쭈르르 처리하겠지?
그게 ECS야
MVC는 그 목적이 기능에 따른 로직의 분리이지만
ECS는 속도개선에 그 목적이 있어.
기존의 Component는 묵직한 MonoBehaviour class여서 이를 주고 받는다면 당연히 그 만큼의 비용이 발생하게 돼
특히 이건 멀티플레이에서 네트워크 비용 문제로 다가올 수 있어.
반면에 구조체 형태의 component들은 필드 값만 가지고 있으니까 상대적으로 가볍지
즉, 멀티플레이 구현 시 보다 적은 데이터를 전송함으로써 네트워크 지연을 줄이는 셈이야
괜히 ECS에서 Burst 이니 Chunk니 하는게 아님.
게다가 아직 개발 중인 상태라 지금 모습을 가지고 갑론을박 하는 것도 아니라고 봄.
https://blogs.unity3d.com/kr/2019/03/08/on-dots-entity-component-system/
https://forum.unity.com/threads/dots-multiplayer-discussion.694669/
결론
ECS는 MVC가 아니다.
- MVC는 능지처참한 소스 코드의 방지가 주 목적이지만
- ECS는 엔진의 속도 개선이 그 목적이다.
- ECS는 작업 처리에 대한 패턴으로 View에 해당되는 개념이 없고, Component는 Entity에 속해 있다. (종속적)
정보추 - dc App
설명추
https://www.youtube.com/watch?v=_jW_D2vF9J8
좀 부가설명을 하자면 ECS는 데이터 지향 프로그래밍에 맞춘 유니티의 구조라고 봐야함. ECS vs MVC 를 비교대상으로 하는건 좀 헷갈릴 수 있다.
객체 지향 프로그래밍 (현재 유니티 GameObject 방식) vs 데이터 지향 프로그래밍 (앞으로 바뀔 유니티 ECS 구조) 이렇게 비교하는게 개념적으로 더 옳다
음..나는 ecs로 하고있었군..
ECS의 DOD 캐시히트율 증가가 진짜 기가막힌 성능향상을 보여줌... ㄹㅇ - dc App
ECS 쓸 거 아닌데도 물고빨지만 않으면 됨. 난 림월드 비스무레한 겜을 ECS로 만들다가 던졌음. cpu에게는 좋지만 코드 가독성 똥망되더라. 전부 다 컴포넌트로 쪼ㅓ개버리면 결국 의미론이 붕괴되버림.
객체 수천개 이상 실시간 연산 돌릴때 분산처리를 위해 ecs를 만지작 거려보는거고, 인디레벨에서는 괜히 건드렸다가 완성되지 않은 패러다임에 인생만 낭비할 가능성 ++
ECS가 객체지향보다 절대 더 모든면에서 더 나은 구조라고 생각하고 들이대면 큰일난다는거. 유니티 놈들 당연히 '와 우리 엔진 짱 조음 이런거도 됨 크으 물고기 1만마리 동시 헤엄치고 짱이지 않음?' 이러는데 지들 엔징 쓰라고 광고하는 거고, 그런 기술 써서 출시한 겜 대보라 하면 손에 꼽는데다 그나마 완성된 기술도 아님. 난 객체지향이 좋은점이 그래도 '사람이 이해하기 좋다' 는 데 있다고 생각함. CalorieConsumableComponent 보다도 Animal 이 더 와닿는거지. 전자는 ECS에서는 극단적으로 횃불도 CalorieConsumableComponent 를 가질 수 있거든.