본문 바로가기

기타

(44)
패캠 Ribs 정리 12. 리펙토링 지금 앱은 모노리틱 구조이므로 사실상 모든 객체에 접근이 가능하다. 모듈 구조로 바꿔보자 topup 리블렛이나 addPaymentMethod는 재사용하기위해서 만들었지만 CardOnFile, EnterAmount 리블렛 처럼 한군대서만 쓰이는 객체도 다른 개발자들이 무분별하게 접근이 가능하다. 이를 방치하면 점점 스파게티코드가 된다. 그리고 서로 강결합이 발생해서 원하는 코드만 빌드하고 돌려보는것이 불가능하다. 모듈화와 느슨한결합을 이용해 이를 해결할것이다. 먼저 모듈화 작업을 한다. 코드를 라이브러리로 분리하고 public과 internal로 무분별한 접근을 구분해서 차단한다. 그 후 모듈을 느슨하게 결합시켜 소스코드 의존성을 역전시키고 컴파일하고싶지 않은 코드를 분리하고 내가 빌드해보고 싶은 코드만 ..
패캠 Ribs 정리 11. 의존성 주입 패턴 의존성 역전을 통해 프로토콜에 의존하게 바꿧다면 코드 어디선가는 실제 구현체를 주입해줘야 한다. 의존성 주입은 의존성 역전을 완성하기위한 작업이다. 의존성 역전된 코드는 객체를 생성해서 주입해주는 지점이 필수로 존재하고 이 지점을 Composition Root라고 부른다. 의존성을 주입하는 방법은 크게 3가지가 있다. 생성자 주입 메서드 주입 프로퍼티 주입 앞서 실습에서 우리는 컴포지션 루트에 3가지 방법을 모두 사용해서 의존성을 주입 해 보았다. Ribs의 Builder가 각 리블렛의 컴포지션 루트에 해당한다. Builder의 Build 메서드를 보면 RepositoryImp, ViewController, Stream, Router, Interactor등을 생성하는데 ViewController Rout..
패캠 Ribs 정리 10. 느슨한 결합 코드를 물리적으로만 나누는 모듈화는 반쪽짜리 모듈화이다. 모듈끼리 느슨하게 결합시켜야 진정한 모듈화가 완성된다. 앱이 점점 커져도 생산성 저하를 최대한 막는 앱 아키텍처와 개발자환경을 구축하는방법을 알아보자 계층 구조 그림을 보면 상위 모듈에서 하위모듈로 화살표가 가리키고있다. 상위 모듈에서 하위모듈을 참조(사용)한다는 표현으로 의존성이 있다라고 표현하기도 한다. 이 의존성은 사실 두가지로 다시 나뉜다. - 런타임 의존성, 코드 호출 의존성 ( 프로퍼티나 함수를 호출할때 발생) - 컴파일타임 의존성, 소스코드 의존성 (코드상으로 언급되거나 import 시 발생) 객체지향언어가 나오기 전에는 두 의존성은 무조건 같은 방향이었다. 소스코드 의존성은 누가 언제 컴파일되는지 빌드의 순서를 결정짓는것으로 확장과 ..
패캠 Ribs 정리 09. 모듈화 모듈레벨에서 개념을 정리 모놀리틱 구조에서 모듈화로 바꿧을때 장점은? 모노리틱 구조 특징 단일 타겟(모듈) 객체 간 무분별한 참조 더보기 - 서로 참조하는 순환 참조가 자주 발생하게됨 -> 단독으로 사용 불가능 하면 결국 여러 객체가 거대한 하나의 객체처럼 동작 - public과 internal 접근 제어를 구분할 수 없는게 가장 크다 > 복잡한 기능은 여러 객체로 이루어진 경우가 많지만 사용자에게는 하나의 객체만 노출하고 싶음 > 모든 연관 객체를 한 파일에 넣고 숨길 객체만 private class로 하지 않는이상 객체를 숨길 수 없음 코드 변경의 영향 범위 파악이 힘듦 더보기 - 작은 코드의 수정이 어디까지 영향을 미칠지 알 수 없음 - 작은 리펙토링, 기능 추가, 수정 등에서 컴파일 애러가 끝없이..
패캠 Ribs 정리 08. 복잡한 플로우 만들기 - 3 커밋하던 주소가 바뀌었다 https://github.com/csh8130/-ribs-practice 충전 버튼을 눌렀을때 동작이 필요하다, 백엔드는 실제로 없으며 있다고 가정하고 개발한다. 카드 목록, 추가를 담당하는 리포지토리처가 있는것처럼, 잔액과 충전을 담당하는 리포지토리를 따로 만들고 여기서 처리한다. (3d7a7ed378e523820dd86bca71c770d30ec15890) 지난시간에 만들었던 카드가 하나도 없으면 바로 카드 추가 화면에서 카드 추가가 완료되면 바로 충전 화면이 나오도록한다. push처럼 이동은 하고 대신 뒤로 돌아갈수는 없도록 할것이다(카드를 생성했는데 다시 돌아간다는게 이상하므로). navigation stack을 조절해서 뒤로 못 돌아가도록 한다. (6436e3bf69d2..
패캠 Ribs 정리 07. 복잡한 플로우 만들기 - 2 카드 충전화면이 준비되어서 충전 자체의 flow를 만들 차례이다. 카드 갯수에 따라서 충전 화면을 보여줄지 카드 추가화면을 부여줄지 파이낸스 홈 화면에서 리포지토리를 가지고 이 분기를 한다면 나중에 이 플로우를 재사용하는게 거의 불가능해진다. ribs의 최대 장점중 하나는 뷰컨트롤러가 로직을 담당하는게 아닌 인터렉터가 로직을 담당한다는것으로 화면에 얽매이지않고 로직을 만들 수 있으며 이를 뷰 리스 리블렛이라고 한다. 충전 플로우를 담당할 뷰 리스 리블렛을 하나 만든다. (Topup 리블렛) TopupDependency는 이 리블렛이 필요한것을 모아둔건데 부모 리블렛이 뷰 컨트롤러를 하나 지정해 줘야 한다. 라우터에서도 이 뷰컨트롤러를 사용한다. 뭔가 새 화면을 띄우거나 할때 부모의 뷰컨트롤러를 사용하기..
유니티 입문 패스트캠퍼스 챌린지 최종 후기 패스트캠퍼스에서 다른 강의를 듣다가 우연히 환급 챌린지를 한다고해서 신청했었다. 참가 조건을 자세히 안읽어보고 신청했었는데 30일동안 쉬는날 없이 매일 강의를 들어야하는 조건이었다. 혹시 다음에 환급 챌린지에 참여해 보고 싶은 사람이 있다면 매일 들을 각오가 꼭 필요하다. 비슷한 유니티 입문 강의는 사실 요즘 유튜브에도 많이 제공된다, 유튜브에서 유니티 무료 강의가 꽤 올라와있었고 본적도 있었는데 경험삼아 게임을 만들어보고 싶다 정도의 깊이로 접근한다면 우선 이런 강의를 따라해보는것을 추천한다. 이 강의는 실습하면서 생각한것 이상으로 깊이있는 부분까지 터치하기 때문이다. 그리고 강의자체가 '중급자'용으로 설정되어있다. 처음에는 C# 입문 강의가 배치되어있는데 조금 보고나서 흥미가 생기지않는다면 스킵하는것..
패캠 Ribs 정리 06. 복잡한 플로우 만들기 - 1 이번 장은 여러 화면으로 구성된 잔액 충전 플로우를 구현하게된다. ribs의 큰 장점은 뷰없이 로직을 만들수 있다는것이다. 이를 viewless 리블렛이라고 할것인데 어떻게 이를 활용할지 알아본다. 카드가 하나도 없으면 충전하기를 눌렀을때 카드 추가 화면이 뜨고 하나라도 있으면 잔액 충전 화면이 뜬다거나 어느 플로우에서는 모달로 뜨고 어느 플로우에서는 푸시로 뜨는 등의 화면을 구성할 것이다. 이런 분기를 누가 어디서 처리할것인가? 추후 이 부분을 고민하며 화면을 만들어보자. 우선 카드 추가 화면을 먼저 만든다. (AddPaymentMethod 리블렛) 카드 목록의 + 버튼을 눌렀을때 새로 만든 뷰를 띄워야 한다. 뷰에서 유저 액션이 발생하면 직접 처리하는것이 아닌 Presentable Listener로 ..
유니티 입문 패스트캠퍼스 챌린지 30일차 비교적 간단할것 같던 데미지 수치의 표시를 하는 과정이 꽤 복잡한편이었다. 데미지 숫자를 계속 보여줄게 아니기때문에 State를 관리해서 시간이지나면 사라지게 만들어야하고 사라질때 서서히 흐려지며 사라지도록 애니메이션 효과가 필요했다. 총알 데미지를 화면에 표시하기 데미지 UI 클래스 - UIDamage 스크립트 생성 - using UnityEngine.UI 추가 - SerializeField로 Text damageText 변수 추가 - 상태 열거형 정의 None/SizeUp/Display/FadeOut - ShowDamage 메소드 - Reset 메소드 - UpdateDamage 메소드 - string FilePath 프로퍼티 데미지 오브젝트 만들기 - Text UI를 추가해서 DamageText 라고..
유니티 입문 패스트캠퍼스 챌린지 29일차 이번시간에는 플레이어 상태 창을 만들고 점수 창을 나타내고 hp 게이지를 보여주는 역할까지 구현해야한다. 미사일을 발사해서 적을 격파할 때 마다 점수가 올라가야 한다. 그리고 적 미사일로부터 타격을 받을때 마다 hp 게이지가 줄어들어야 한다. 플레이어의 점수 정보 보여주기 플레이어 상태 패널 클래스 - PlayerStatePanel 스크립트를 생성 - BasePanel을 상속하도록 변경 하고 Start와 Update 제거 - using UnityEngine.UI 추가 - SerializeField로 Text scoreValue 추가 - SetScore 메소드를 추가해서 scoreValue.Text에 값을 입력 플레이어 상태 패널 UI 만들기 (1) - Scene에서 Canvas 하위에 패널 생성 - 적절..