분류 전체보기 613

Replace Nested Conditional With Guard Clauses

여러 겹의 조건문을 감시 절로 전환 (Replace Nested Conditional with Guard Clauses) 메서드에 조건문이 있어서 정상적인 실행 경로를 파악하기 힘들 땐 모든 특수한 경우에 감시 절을 사용하자. 조건식은 주로 두 가지 형태를 띤다. 첫째는 어느 한 경로가 정상적인 동작의 일부인지 검사하는 형태이고, 둘째는 조건식 판별의 한 결과만 정상적인 동작을 나타내고 나머지는 비정상적인 동작을 나타내는 형태다. 만약 둘다 정상 동작의 일부분이라면 if 절과 else 절로 구성된 조건문을 사용하고, 조건문이 특이한 조건이라면 그 조건을 검사해서 조건이 true 일 경우 반환하자. 이런 식의 검사를 감시절이라고 한다. 여러 겹의 조건문을 감시 절로 전환기법의 핵심은 강조 부분이다. if-..

Decompose Conditional

조건문 분해하기 if조건문이 주절주절이면 의미를 확인하기 어려우므로, 매소드로 빼내는 것. 이건 원래 하던거네.. before import java.time.LocalDate; public class DecomposeConditional_before { static class Stadium { //... public double summerRate; public double winterRate; public double winterServiceCharge; public Stadium(double summerRate, double winterRate, double winterServiceCharge) { super(); this.summerRate = summerRate; this.winterRate = ..

Replace type Code with Class

Replace Type Code with Class – 어떤 field type(예를 들어, String 또는 int 등)이 부적합한 값의대입이나 유효하지 않은 동일성 검사(비교)를 방지하지 못한다면,field type 을 클래스로 바꿔 값의 대입과 동일성 검사에 제약조건을 부여한다 – 동기 • Type code를 리팩토링하는 주된 이유는 코드의 타입 안정성을 보장하려는 것이다. – 장점 • 부적절한 값의 대입이나 유효하지 않은 동일성 검사로부터 코드를보호한다. – 단점 • 타입 안정성이 결여된 경우보다 더 많은 코드가 필요하다. 기능에 영향을 주지않는 숫자형 type code가 있는 클래스가 있을 때 새 클래스로 바꾼다. • type code를 사용하는 method들은 상징적인 이름이 아닌 숫자만을 인..

Encapsulate Collection

메소드가 collection을 반환할 때 • 그 메소드가 읽기전용 view를 반환하게 수정하고 add() 와 delete() 메소드를 작성한다. Before import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class EncapsulateCollection_before { static class Course { String name; boolean isAdvanced; public Course(String name, boolean isAdvanced) { this.name = name; this.isAdvanced = isAdvanced; }; public boolean isAdvanced() { return..

Replace Data Value with Object

데이터의 기능이 복잡해지면 객체로 만든다. Before public class ReplaceDataValueWithObject_before { static public class Order { private String customer; public Order(String customer) { this.customer = customer; } public String getCustomer() { return this.customer; } public void setCustomer(String arg) { this.customer = arg; } } public static void main(String[] args) { Order order = new Order("david"); System.out.pr..

Quality Model

구분품질 속성 시스템품질 속성 가용성(Availability) 변경용이성(Modifiability) 성능(Performance) 보안성(Security) 사용편의성(Usability) 시험용이성(Testability) 비즈니스품질 속성 시장 적시성(Time to Market) 비용과 이익(Cost and Benefit) 시스템 프로젝트 생명주기(Projected Lifetime of the System) 목표 시장(Targeted Market) 신규 발매 일정(Rollout Schedule) 노후 시스템과 통합(Integration with Legacy System) 아키텍처품질 속성 개념적 무결성(Conceptual Integrity) 정확성과 안정성(Correctness and Completeness..

[RTS Engine] Object Pooling 이 제대로 안될 때

Effect의 Pooling을 담당하는 부분 EffectObjPool.cs private Dictionary effectObjs = new Dictionary(); //this holds all inactive effect objects of different types. // ... public void AddFreeEffectObj (EffectObj instance) { Queue currentQueue = new Queue(); if (effectObjs.TryGetValue(instance.GetCode(), out currentQueue) == false) //if the queue for this effect object type is not found { effectObjs.Add(inst..

싱글톤 GameObject가 계속 늘어날 때

Problem 싱글톤 오브젝트가 씬 생성시마다 계속 늘어난다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Singleton : MonoBehaviour where T : MonoBehaviour { private static T instance; public static T Instance { get { if(instance == null) { GameObject obj; obj = GameObject.Find(typeof(T).Name); if (obj == null) { obj = new GameObject(typeof(T).Name); instance = obj.AddCompon..

Unity/Unity 이슈 2022.03.27

Unity 웹뷰(WebView) - 흰 화면만 뜨는 경우

https://github.com/gree/unity-webview GitHub - gree/unity-webview Contribute to gree/unity-webview development by creating an account on GitHub. github.com 다운로드 받은 다음 Package를 Import한다. (nofragment는 뭔지 모르겠음) private WebViewObject webViewObject; public void OnClick_Webview() { StartWebView(); } public void StartWebView() { string strUrl = "https://www.naver.com/"; try { webViewObject = (new GameO..

[Addressable] JSON parse error: Invalid value.

Problem ArgumentException: JSON parse error: Invalid value. Bundle사이즈를 체크하는 과정에서 위 에러가 발생. (이 경우는 BOM관련 문제는 아님.) public IEnumerator CheckBundle() { AsyncOperationHandle downloadSize = Addressables.GetDownloadSizeAsync(assetLabel.labelString); yield return downloadSize; if (downloadSize.Result > 0) { DownloadBundle(); } else { LoadLoginScene(); } } Solution TextDataProvider.cs private void Reques..

Unity/Unity 이슈 2022.02.27

[Addressable] Build Mode Script

Fast Mode - 번들로 만들어지지 않은 상태로 바로바로 플레이가 가능한 모드이다. 작업 중인 컴퓨터의 에셋 데이터베이스에서 바로바로 정보를 가져오기 때문에, 실제로 어드레서블에셋들이 그룹화되어있지 않다. ​ Virtual Mode - 플레이를 누르면 사전 빌드 단계를 거쳐서 그룹화된 번들 파일들을 생성한 후 플레이 된다. 따라서 실제 그룹화가 되어있고, 그 정보에서 데이터를 불러온다. 그래서 프로파일링 할 때 유용하다. 하지만 데이터가 계속해서 활성화되어 있기 때문에 실제 빌드 시 작동은 하지만 메모리에 이점이 전혀 없다. ​ Packed Play Mode - 실제 빌드를 통해 그룹화된 파일을 생성해야만 이 모드로 플레이(재생)가 된다. https://m.blog.naver.com/PostView...

[구글로그인] DEBUG: Authentication canceled

[Play Games Plugin 0.10.12] 02/27/22 1:00:07 +09:00 DEBUG: Authentication canceled 게임안에서 구글로그인 요청 시, 위 에러가 나며 구글 로그인이 안된다. 테스트용으로 새로운 구글 아이디를 만들었고, 폰에 apk를 설치해서 실행한 상태. 이 경우는 여기에 테스터로 등록이 안되어 있어서 그랬음. 참고 블로그 https://blog.naver.com/PostView.nhn?blogId=mms0801&logNo=222277972187&categoryNo=0&parentCategoryNo=57&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView [Unity][GooglePlay][GPGS..

Unity/Unity 이슈 2022.02.27

[Addressable] Update 과정

* Addressable 버전: 1.19.18 업데이트 전 상태 프로젝트 폴더/ServerData/Android uiassets Bundle은 3개나 있음. 변경사항이 있을 경우 새로 생긴다. 빨간색이 최신 Bundle이며, 파란색은 이전 Budle이다. 빨간색만 있으면 얘들은 필요없다. (수정날짜 참고) catalog_1.json을 보면 최신 번들인 빨간색 번들만 등록되어 있다. 변경 전의 catalog_1.hash의 값은 88f2b076515f861eb457dae76a5fe585 이다. 업데이트 및 빌드 테스트를 위해 uiaseets그룹의 prefab하나를 변경. (빨갛게 만들어버림) 저장하고 Build. 빌드 후의 상태 기존 파란색 대신 빨간색 번들이 하나 생겼다. 여기에 변경사항이 적용되어 있을것..

[Addressable] Update를 위한 Method

1.19.18 버전 공식문서 https://docs.unity3d.com/Packages/com.unity.addressables@1.19/manual/index.html DownloadDependenciesAsync 다운받을게 얼마나 있는지 확인 설명 https://docs.unity3d.com/Packages/com.unity.addressables@1.19/manual/DownloadDependenciesAsync.html 명세 https://docs.unity3d.com/Packages/com.unity.addressables@1.19/api/UnityEngine.AddressableAssets.Addressables.DownloadDependenciesAsync.html​ Sample Code ..

Exception: Reentering the Update method is not allowed. This can happen when calling WaitForCompletion on an operation while inside of a callback.

Problem GameObject loading = Addressables.InstantiateAsync("Assets/Addressable/UI/Loading/LoadingPrefab.prefab", parent).WaitForCompletion(); Exception: Reentering the Update method is not allowed. This can happen when calling WaitForCompletion on an operation while inside of a callback. Solution 검색해서 나오는 글들을 보면, Addressable자체 버그인듯 함. 그래서 어찌 해결할 방안이 없음. Coroutine(IEnumerator)안에서 WaitforComplete를..

Unity/Unity 이슈 2022.02.19

PlayStore 업로드 시 android:export 문제

Problem 인텐트 필터를 포함하되 'android:exported' 속성을 설정하지 않고 활동, 활동 별칭, 서비스 또는 broadcast receiver가 있는 APK 또는 Android App Bundle을 업로드했습니다. Android 12 이상에는 이 파일을 설치할 수 없습니다. 참조: developer.android.com/about/versions/12/behavior-changes-12#exported 회사에서 하는 Unity개발은 지엽적인 희안한 것들만 해서 개인 개발할때는 거의 도움안되는데 간만에 지식이 겹친다 ㅎㅎ Solution android빌드 manifest에서 android:exported 속성을 추가하면 되는 것. https://devkoboso.com/391 Unity 인..