개발 조각글 26

Unity - Component / Controller / Data로 분리된 UI System.

들어가며 이전 프로젝트의 UI 구조에서 느낀 문제점을 개선해보기 위해 시험삼아 만들어본 사이드 프로젝트입니다. 문제점 class Page { object pageData; // It can be any other types Text titleLabel; public void Init(object condition) { pageData = SetPageData(condition); Refresh(); } public void Refresh() { titleLabel.text = GetTitle(pageData); } } 이전 프로젝트에는 다음과 같은 형태로 페이지개체가 설계되어 있습니다 (페이지 개체가 하위 컴포넌트들을 관리하는 방식입니다, 모사 코드이므로 object와 같은 부분들은 적당한 형태를 넣어서..

개발 조각글 2024.01.02

Unity Refactoring - Reflection을 이용한 유닛 테스트

달팽이 키우기 리팩토링 목차 리팩토링 준비 구조 재설계 UI Manager 설계 클래스간 관계 Action 분리하기 핵심루프 설계 유닛 테스트 달팽이 키우기 유닛 테스트 요약 Reflection을 이용하면, 클래스의 private로 선언된 값과 함수들도 가져올 수 있다. 이것을 이용해, 클래스 내부에 테스트용 함수를 따로 만들지 않아도 테스트를 진행할 수 있다. 설계와 함께 테스트를 작성해볼까? 생각해봤었지만. 달팽이키우기 리팩토링은 1주 이내, 실 작업시간 24시간 이내로 잡고 진행한 프로젝트였기 때문에. 학습비용까지 계산했을 때 견적이 나오질 않을 것 같아서 일단 설계를 끝내고, 이후에 테스터를 붙이는 쪽으로 가닥을 잡았다. 테스터를 붙일 때 한가지 난관에 봉착했는데, 캡슐화때문에 아래와 같이 변수들..

개발 조각글 2022.08.18

Unity Refactoring - 게임의 핵심루프 설계

달팽이 키우기 리팩토링 목차 리팩토링 준비 구조 재설계 UI Manager 설계 클래스간 관계 Action 분리하기 핵심루프 설계 유닛 테스트 Unity Refactoring - 게임의 핵심루프 설계 요약 각 스크립트의 Awake나 Start에 의존하지 않고, 게임 루프가 시작하기 전 확실하게 초기화 할 수 있도록 했고. ActionManager의 update함수에서 루프를 관리하되, 각 기능이 호출되는 프레임을 다르게 설정해서, 항상 의도한 순서대로 함수가 실행될 수 있도록 (민감한 함수들의 실행 순서가 뒤바뀌지 않도록) 조정했다. 달팽이키우기는 관리 대상이 달팽이 딱 하나이기 때문에, 업데이트문을 한 클래스에서 집중적으로 관리하는게 좋을 것 같다고 생각했다. 그래서 ActionManager를 선언한 ..

개발 조각글 2022.08.13

Unity Refactoring - 달팽이키우기 Action 분리하기

달팽이 키우기 리팩토링 목차 리팩토링 준비 구조 재설계 UI Manager 설계 클래스간 관계 Action 분리하기 핵심루프 설계 유닛 테스트 달팽이키우기 Action 분리하기 요약 : Action Manager클래스를 통해, 버튼에 할당할 기능(Action)) 목록과 할당된 기능의 실제 구현을 분리해서 관리하기로 했다. 이로써 버튼은 ActionManager내의 action을 적절히 골라, 조합하여 사용할 수 있고, 구현부에서는 미리 정의된 인자와 출력헝태를 준수한다면. 내부 실 구현을 언제든지 자유롭게 바꿀 수 있게 된다. (구) 달팽이키우기의 버튼&액션 달팽이키우기를 만들었던 당시에는 프로그래밍 패턴이라는게 있다는 걸 알기 이전이었기 때문에, 상당수의 분기들이 스크립트 내에 하드코딩 되어 있었고 조..

개발 조각글 2022.08.13

NOX - ./adb.exe logcat

NOX - ./adb.exe logcat 요약 ./adb.exe devices > portNumber ./adb.exe connect 127.0.0.1:[###portNumber###] ./adb.exe shell ps | grep com.패키지이름,패키지이름 > pidNumber ./adb.exe logcat --pid=[###pidnumber###] 순서대로 실행하는 것으로 Nox에서 실행되는 패키지의 log를 볼 수 있다. adb란? 에디터상에서는 Debug.log(" ");로 손쉽게 로그를 확인할 수 있지만. 빌드로 넘어가게 되면 안드로이드에서는 확인하기 어렵다. 이럴때를 위해 필요한 것이 adb (Android Debug Bridge)이다. https://developer.android.com/..

개발 조각글 2022.08.11

Unity - 유닛테스트를 염두한 함수 설계

유닛테스트를 염두한 함수설계 유닛테스트를 여기저기 붙이다보니, 붙이기 쉬운 구조가 있고 어려운 구조가 있다는 것을 느끼고 있다. 당연한 이야기일 수 있지만 정리도 할 겸 기록해 둔다. 클래스 내에서 데이터를 가공하는 함수를 만들어야 할 때. 다음과 같은 함수를 생각해볼 수 있다. float stamina; float RecoverStamina(float recoverValue){ stamina += recoverValue; return stamina; } 이 경우 RecoverStamina는 호출 시 클래스 내의 Stamina에 접근해 RecoverValue를더한 뒤 Stamina를 반환한다. 기능적으로는 문제가 없는 함수라고 생각하지만, 이 경우에 테스트를 붙이기 정말 어려웠다.. 특히, 이 Stami..

개발 조각글 2022.08.08

Unity Refactoring - 달팽이키우기 클래스간 관계

달팽이 키우기 리팩토링 목차 리팩토링 준비 구조 재설계 UI Manager 설계 클래스간 관계 Action 분리하기 핵심루프 설계 유닛 테스트 Unity Refactoring - 달팽이키우기 클래스간 관계 지난번의 설계에서 UI의 전역상태를 없앴다! 이제 ui들은 uiManager가 붙어있는 오브젝트에서 직접 관리된다. static은 확실히 편리한 부분이 있지만.. 함수형처럼 확실하게 인풋/아웃풋이 정헤진게 아닌 요소들을 전역에 넣어서 아무때나 접근 가능하게 하는 것은 아직도 역시 조심스럽다. 기능들을 호출할 때, 상황에 따른 Action들을 ActionManager 클래스내부 리스트에 전부 집어넣고, 키워드에 따라 일괄 호출하는 방식으로 사용하고 있는데. 이렇게 분리를 시켜놓으니, 어떤 클래스의 구조를..

개발 조각글 2022.08.04

Unity Refactoring - 달팽이키우기 UIManager 설계

달팽이 키우기 리팩토링 목차 리팩토링 준비 구조 재설계 UI Manager 설계 클래스간 관계 Action 분리하기 핵심루프 설계 유닛 테스트 Unity Refactoring - 달팽이키우기 UIManager 설계요약 UI요소의 On/Off를 UIManager에서 일괄적으로 관리할 수 있도록 했으며, 활성화된 패널번호를 스택에 넣어서 Stack.Pieek()을 이용해 맨 위부터 순차적으로 꺼질 수 있도록 했다. 지난번에 정리하면서 번뜩였던 부분을 토대로 UI부분을 정리해봤다. 가장 먼저 정리한 부분은 Btn과 Popup 부분인데, ViewStack을 만들어서, 버튼을 눌러 팝업을 열면 열려있는 팝업을 ViewStack에서 관리할 수 있도록 하고 싶었다 (그래서, 백스페이스 등을 눌렀을 때. 순서대로 하나..

개발 조각글 2022.08.02

Python - xlsx to csv

xlxs형식을 csv로 바꿀 일이 있어서 찾아보니까, pandas를 쓰면 쉽게 변환할 수 있다고 한다. Pandas는 주로 데이터 분석에 사용됩니다. Pandas를 사용하면 쉼표로 구분된 값 , JSON , SQL 및 Microsoft Excel과 같은 다양한 파일 형식에서 데이터를 가져올 수 있습니다. 병합 등의 각종 데이터 처리 동작을 허용 재편, 선택뿐만 아니라 청소 데이터 및 데이터 승강이 가능합니다. - 출처 예전 플젝에서 nlp 때문에 pandas 쓸 때는 그냥 dataTable 만드는 라이브러리라고 생각했었는데, 생각해보니 xlsx > table > csv형식으로 변환이 되겠구나. 당연한 일인데 된다는 걸 알기 전에는 딱 떠올리기가 어렵다 ㅎㅎ; import pandas as pd impor..

개발 조각글 2022.07.29

Unity Refactoring - 달팽이키우기 구조 재설계

달팽이 키우기 리팩토링 목차 리팩토링 준비 구조 재설계 UI Manager 설계 클래스간 관계 Action 분리하기 핵심루프 설계 유닛 테스트 Unity Refactoring - 달팽이키우기 구조 재설계 당장 코드를 짜서 클래스를 나누는 것 보다. 이 게임의 구조가 어떻게 되어있는지. 그리고 어떤 형태가 되어야 하는게 좋을지 먼저 설계를 하고 들어가는게 낫겠다고 생각했다. 이전 설계 먼저 기존의 달팽이 키우기 구조는 다음과 같이 되어있었는데, 왜냐하면 당시 게임을 제작할 때 위에서 아래로 정의된 기능들을 추가하듯이 작성했기 때문이다. 한 기능을 구현한 다음에는 바로 다음 기획을 구현하고 그 다음엔 그 다암 기획을 구현하는 식으로 만들었기 때문에 Data, GameAction, UI가 모두 한 클래스에서 ..

개발 조각글 2022.07.29