fkdl0048 / Mentoring-Project

development mentoring
3 stars 0 forks source link

온라인 멘토링, 2024-04-01 [23:00] 38회차 #120

Closed fkdl0048 closed 6 months ago

fkdl0048 commented 7 months ago

온라인 멘토링, 2024-04-01 [23:00] 38회차

논의주제

결국에 root 에서 발생하는 의존성

Movie starWors = new Movie("스타워즈", Duration.ofMinutes(180), Money.wons(11000), new PercentDiscountPolicy(...));

이 코드에서는 실제 MovieDiscountPolicy에 대한 의존성은 생기지 않지만 가장 상위 root에서는 결국 의존성이 생기는 것이 아닌가?

그렇다면 객체 사이의 의존성을 줄이고 유연성을 위해 DI를 통해 인터페이스끼리의 상호작용을 만들어서 하나의 로직이 담당하게 하는게 유리한 것라고 생각이 되는데, 더 유연함을 위해 DI프레임 워크(젠젝트, VContainer)나 실제 데이터베이스에 해당 정보를 읽어와 리플렉션으로 매번 동적 생성하여 동작하게 하는 구조가 생각이 납니다.

이런 간단한 모듈 하나도 있을 수 있겠지만 이런 모듈을 또 묶는 더 커다란 모듈이 있을 것 같고 재귀적인 그림이 그려지는 것 같습니다.

코드의 형태

실제 개개인이 자율성을 가지고 하는 작업이 효율성이 제일 잘 나오는 것처럼 코드도 관리자 주도형과 같이 하나의 컨트롤러, 매니저가 모든 일을 담당하여 처리하면 효율성과 작업의 퀄리티가 떨어질 수 있다. 이런 부분에서는 객체지향이 일상세계와 많이 닮아있다는 생각이 든다.

델리게이트의 등장

책에선 대리자에 대한 이야기가 등장하지 않는 것 같은데, 그에 대한 논의를 해보고 싶습니다. 대리자도 일종의 느슨한 결합에 중요한 포인트라고 생각되는데, 인터페이스 vs 대리자의 관계에서 어떨 때 뭐가 더 유리하게 작용하는지에 대한 논의

이미 개발된 툴에서의 객체지향적 관점

최근 언리얼을 공부하면서 느끼는 생각은 상속 구조를 많이 사용한다는 점입니다. 하지만 이 부분은 툴에서 같은 객체를 공유하기 위해서 강제한 부분(같은 게임 프레임워크안에 넣기 위함)이고 실제 개발에선 다형성이 필요한 부분에선 인터페이스로 대체하여 합성 구조를 가져가는 것이 좋다고 생각하나, 언리얼 C++에선 이를 어쩡쩡하게? 사용한다는 느낌을 받았습니다.

하지만, 툴이나 언어는 단순 도구일 뿐 객체지향으로 바라본다는 근본은 변하지 않을 것 같아서 지금 과정이 되게 도움이 되는 것 같습니다. 솔직히 유니티에서 왜 언리얼로 갔냐고 물어보면 뭐라고 해야할까 라는 고민이 있었는데, 유니티만 쓸 당시에는 게임을 유니티라는 툴에 가둬서 바라봤다면 엔진을 두개를 사용하니 엔진을 제외하고 게임이라는 아키텍처만 바라볼 수 있게 된 점이 매우 만족합니다.

상속의 형태

위의 말에 이어서 상속구조를 엔진에서 많이 사용하는 이유를 조금 생각해보면 같은 프레임워크에 종속적으로 만들기 위함도 있지만 어느정도 구조를 강제하려고 하는 것 같기도 합니다..

문제가 되는 부분들은 상속 구조이기 때문에 엔진이 업데이트 됨에 따라 과거에 지원한 구조에 대해서 변경이 되면 이를 애트리뷰트로 경고하거나 최신 버전이 있음을 알려주기 밖에 못한다는 점인 것 같습니다.

ex) 언리얼의 TObjectPtr이라는 던가,, 유니티는 뭐가 있을까요?

생각들..

어떻게 보면 유니티의 컴포넌트 패턴으로 제작된 컴포넌트 단위도 이에 충족한다고 볼 수 있다. 한 오브젝트에 대해서 조합 형식으로 확장에 대해서 열려 있고 수정에 대해서 닫혀 있는다는 코드가 아닌 툴 관점에서는 그러하다. 즉, 객체지향 사고 방식은 꼭 코드뿐만 아니라 유연한 설계 자체에 대한 이점이 있다.

ETC

fkdl0048 commented 7 months ago

KakaoTalk_20240323_174254606

너무 사고 싶어서 구매했는데, 생각보다 엄청 짧고 단순하네요,,!

fkdl0048 commented 6 months ago

멘토링 내용