inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

174만명의 커뮤니티!! 함께 토론해봐요.

Business Layer 인자 처리

해결됨

제미니의 개발실무 - 지속 성장 가능한 소프트웨어를 만들어가는 방법

강의 정말 잘 들었습니다! 비즈니스 로직에 대한 관점이 보다 명확해진 것 같아요. 한 가지 궁금한 점이 있습니다. "리팩터링 후의 메서드를 보면 입력받는 인자 targetStore 도 달라진 걸 볼 수 있죠" 와 같은 말씀을 해주셨는데 여기서 새롭게 나오게된 개념인 targetStore, usePoint 인자들에 대한 처리 가 리팩토링 전과 후 layer들 사이에서 어떻게 바뀌게 되는지 조금 더 자세한 내용이 궁금합니다! 리팩토링 전 리팩토링 후 businessPay()메서드에서 pay 라는 비즈니스 로직을 처리하기 위해 요청에 대한 정보 를 리팩터링 하기 전의 코드에서는 payRequest 로 presentation layer 에서 전달받고 있는 것 같아요. (저도 이렇게 하고 있었습니다) 리팩터링 후의 코드에서는 targetStore, usePoint를 인자로 입력받고 있는걸 볼 수 있었어요. 여기서, 새롭게 나오게된 targetStore, usePoint 객체들을 클라이언트로부터 전달되는 presentation layer 에서 바로 전달받는 것을 기대하셨는지 아니면 리팩토링 전과 같이 payRequest 로 controller에서 전달 받은 뒤 다른 layer (business 혹은 presentation) 에서 dto 로 변경한 뒤 businessPay() 메서드를 호출하여 인자를 입력해주는 것을 기대하셨는지 아니면 다른 방법으로 진행이 되는지 가 궁금합니다!

  • 소프트웨어-설계
  • business-logic
  • layers
  • modules
dlwhdgns 댓글 2 좋아요 1 조회수 528

instantiate에 대해서 질문입니다.

미해결

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

제가 알기로는 유니티에서 제공하는 instantiate() 함수는 필드 값도 함께 복사되는 걸로 알고 있었습니다. 그런데 Effect의 Clone() 함수도 Instantiate()를 사용하지만 이 경우에는 필드 값이 같이 복사가 되지 않아서 이유가 궁금해서 질문 드립니다.

  • unity
  • modules
최성호 댓글 1 좋아요 0 조회수 244

SkillSystemWindow 스크립트 drawDatabase함수에서 null참조발생

미해결

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

강의자료에 있는 스크립트를 그대로 올려도 오류가 발생합니다. GUI Error: Invalid GUILayout state in SkillSystemWindow view. Verify that all layout Begin/End calls match UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) -> DrawDatabase(databaseTypes[toolbarIndex]);부분 NullReferenceException: Object reference not set to an instance of an object ->drawdatabase함수의 dataType.BaseType.GetField ~~~ 부분)

  • unity
  • modules
강남영 댓글 3 좋아요 0 조회수 487

2강 Database에 리플렉션에 대해 질문입니다.

미해결

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

2강에서 SetID 메소드에서 id필드의 값을 설정하는 부분을 리플렉션을 통해서 구현한 것은 private의 필드의 은닉성을 지키기 위해서의 이유 하나 뿐인가요?

  • unity
  • modules
최성호 댓글 1 좋아요 0 조회수 271

모듈에 대한 단방향 의존

해결됨

제미니의 개발실무 - 지속 성장 가능한 소프트웨어를 만들어가는 방법

안녕하세요. 제미니님 이번에도 좋은 강의를 제공해주셔서 감사합니다. 모듈 분리에서 궁금한 내용이 있는데요. 제미니님이 제공해주신 PaymentAPI 와 DB 모듈을 별도로 했다고 했을 때 API 규격에 맞게 DB 모듈이 구현이 되어야 한다고 생각하고 있습니다. 즉, 해당 PaymentAPI 에서 제공하는 DB 접근에 대한 인터페이스를 DB 모듈이 구현하는 의존성 역전 원칙을 적용 한 상황입니다. 하지만, 이 상황에서 단방향 모듈 참조를 하게 된다면 DB 모듈은 PaymentAPI 가 제공하는 인터페이스의 유무를 알 수가 없게 되는데요. 저는 위 문제에 대한 해결방법으로 두 가지가 떠오릅니다. 모듈 분리 시 API 모듈에 인터페이스를 만들고 DB 모듈 교체에 따른 새로운 구현체를 구현 한다.(모듈 교체에 따라 이전 모듈에 대한 클래스 참조가 사라져 컴파일에러가 발생하게 되고 주석처리가 필요하다) 모듈 교체 시 이전 모듈에서 사용했던 인터페이스를 하위 모듈에서 똑같이 생성해주고 동일한 인터페이스를 참조 하도록 하여 상위 모듈에는 변화를 주지 않는다. (변화가 최소화되지만 인터페이스가 많을 수록 구현도가 올라간다. 인터페이스를 동일하게 만들거라는 보장이 되어야 한다.) 1번 코드 paymentAPI { // implementation 'project:paymentDB' // implementation 'project:paymentDB2' interface CommandPort { fun save(command: PaymentCommand) } class PaymentDBImplV1 : CommandPort { override fun save(command: PaymentCommand) { paymentDB.saveV1(command); // paymentDB2 모듈 사용 시 주석 처리 } } class PaymentDBImplV2 : CommandPort { override fun save(command: PaymentCommand) { paymentDB2.saveV2(command); // paymentDB1 모듈 사용 시 주석 처리 } } } paymentDB { implementation 'A.DB' } paymentDB2 { implementation 'B.DB' } 2번 코드 paymentAPI { // implementation 'project:paymentDB' // implementation 'project:paymentDB2' class PaymentAPILogic(val paymentDB: CommandPort){ fun save(command: PaymentCommand) { paymentDB.save(command); // paymentDB2 모듈 사용 시 주석 처리 } } } paymentDB { implementation 'A.DB' interface CommandPort { fun save(command: PaymentCommand) } class PaymentCommandImpl : CommandPort { override fun save(command: PaymentCommand) { DB.save(command); } } } paymentDB2 { implementation 'B.DB' interface CommandPort { fun save(command: PaymentCommand) } class PaymentCommandImpl : CommandPort { override fun save(command: PaymentCommand) { DB.save(command); } } } 간단하게 코드를 작성하면 위와 같은 형태가 될 것 같습니다. 제미니님은 어떠한 방향으로 설계를 하시는지 혹은 제 질문에서 제가 잘 못 이해한 부분이 있어 이러한 방법으로 사고가 흘러가는지 말씀을 들어보고 싶습니다. 마지막으로 유튜브 및 인프런에서 귀한 지식과 귀한 시간을 제공해주셔서 항상 감사합니다!

  • 소프트웨어-설계
  • business-logic
  • layers
  • modules
종운 댓글 2 좋아요 1 조회수 705

스탯 관련 질문입니다.

해결됨

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

강의를 보면 스킬 시스템 에디터에서 추가할 스탯을 직접 하나씩 추가해서 해당 스탯을 원하는 엔티티에 부여하는 방식인 것 같은데요. 강의에서는 모두 같은 스탯을 사용해 Hp를 하나로 공유했지만, 보통 게임들에서는 적들마다 스탯이 다 다르잖아요?? 어떤 적은 MaxHp가 높고 이동속도가 느린 대신, 어떤 적은 MaxHp가 낮고 이동속도가 빠르다던가 하는 식으로요. 그러면 이 스킬시스템의 스탯을 사용하려면 Hp, 이동속도 등등 여러 스탯들을 적들마다 다 만들어야 하는건데 그러면 데이터끼리 비교하려면 스탯을 하나하나 클릭해보며 확인해야하니까 비교하기가 힘들어 레벨 디자인하기가 쉽지 않겠다는 생각이 들어서요. 그러면 굳이 스탯까지 스크립터블오브젝트로 만들어서 모듈식으로 만들 필요성이 있는지 잘 모르겠어서 질문드려요.

  • unity
  • modules
MOOOON 댓글 1 좋아요 2 조회수 374

1번 강의 IdentifiedObjectEditor 스크립트에서 에러가 납니다.

미해결

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

NullReferenceException: SerializedObject of SerializedProperty has been Disposed. UnityEditor.SerializedProperty.get_propertyType () (at <04e0fdd0fac34142a67859e48fe87770>:0) UnityEditor.EditorGUILayout.IsChildrenIncluded (UnityEditor.SerializedProperty prop) (at <04e0fdd0fac34142a67859e48fe87770>:0) UnityEditor.EditorGUILayout.PropertyField (UnityEditor.SerializedProperty property, UnityEngine.GUILayoutOption[] options) (at <04e0fdd0fac34142a67859e48fe87770>:0) IdentifiedObjectEditor.OnInspectorGUI () (at Assets/Scripts/Editor/IdentifiedObjectEditor.cs:99) UnityEditor.UIElements.InspectorElement+<>c__DisplayClass74_0.<CreateInspectorElementUsingIMGUI>b__0 () (at <04e0fdd0fac34142a67859e48fe87770>:0) 이런 에러인데 에러가 나는 시점이 인스펙터에서 코드네임을 변경한 후 엔터키를 눌렀을 때 발생합니다. EditorGUILayout.PropertyField(displayNameProperty); 이름 변경 후 displayName을 그려줄 때 에러가 나는데 아무래도 OnEable 함수에서 FindProperty함수로 값을 제대로 가져오지 못하고 있는 것 같은데 어떻게 해야할까요? [SerializeField] private Category[] categories; [SerializeField] private Sprite icon; [SerializeField] private int id = -1; [SerializeField] private string codeName; [SerializeField] private string displayName; [SerializeField] private string description; categoriesProperty = serializedObject.FindProperty("categories"); iconProperty = serializedObject.FindProperty("icon"); idProperty = serializedObject.FindProperty("id"); codeNameProperty = serializedObject.FindProperty("codeName"); displayNameProperty = serializedObject.FindProperty("displayName"); descriptionProperty = serializedObject.FindProperty("description"); 혹시 제가 직접 타이핑한게 문제일까 싶어서 코드를 다운로드 받고 복붙해봤는데도 에러가 발생합니다. 이 현상을 그대로 두고 진행해도 될까요? 이름 변경은 제대로 됩니다.

  • unity
  • modules
미니개발자 댓글 1 좋아요 0 조회수 652

section1 7-stat 강좌에서 delegate를 사용하신 이유가 궁금합니다.

해결됨

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

public delegate void ValueChangedHandler(Stat stat, float currentValue, float prevValue); public event ValueChangedHandler onValueChanged; public event Action<Stat, float, float> onValueChanged; 위와 같이 delegate를 사용하셨는데, 아래 action 대신 사용하면 어떤 차이가 있는지, 또는 특별한 이유가 있는지 궁금합니다.

  • unity
  • modules
댓글 1 좋아요 0 조회수 356

인기 태그

인프런 TOP Writers

주간 인기글