2025/01 53

디자인 패턴 : 전략 패턴

전략 패턴객체의 전략(행동)을 정의하는 알고리즘을 외부에서 선택하고 주입하여 유연성과 확장성을 높이는 설계 방식'전략'을 캡슐화하여 런타임에 동적으로 교체할수 있도록 설계하는 방법DI와 상당히 유사하나 '동적으로 교체'에 초점을 맞췄다고 보면 됨     Context(문맥) 전략을 호출하는 역할 , 전략 객체를 내부 필드로 유지, 실행하는 메서드(DoSomething()) 제공Strategy(전략 인터페이스) : 공통 인터페이스 혹은 추상 클래스ConcreteStrategy(구체적인 전략) : 인터페이스를 구현하여 실제 알고리즘을 정의  필요성중복 제거 : if 문 혹은 Switch문의 반복으로 코드가 난잡해 지는 것을 방지Open-Closed Principle : 새로운 알고리즘을 추가할 때 기존 코드..

개념공부 2025.01.08

의존성 주입(Dependency Injection)

의존성 객체가 자신의 기능을 수행하기 위해 필요한 다른 객체나 구성혹은 한 클래스가 다른 클래스나 인터페이스에 대해 가지는 관계의존성이 높으면 코드가 변경에 취약해지고 유지보수가 어려의존성 주입객체가 자신의 기능을 수행하기 위해 필요한 다른 객체나 구성을 외부에서 주입(제공)하는 것넓은 의미에서, Unity 인스펙터 창의 드래그 드롭도 의존성을 주입해 주는 것이다. 객체간의 결합도를 낮추고, 확장과 테스트를 용이하게 하는 것이 목표 예를 들어, 다음과 같은 코드가 있다.  using System;public class Solution{ public void Attack() { BaseAttack(); } public void BaseAttack() { ..

개념공부 2025.01.08

[멋쟁이사자처럼 부트캠프 TIL회고] 48일차 : 오류 오류 오류

코딩테스트 : 가까운 수정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요. 가장 먼저 생각나는 방법은, 1씩 더해주어서 +로 더해준 쪽과 -로 더해준 쪽을 비교하는 것이다.번갈아가면서 비교하는 것도 같은 방식이지만 조금 더 한눈에 보이는 방식인 것 같다. using System;using System.Linq;public class Solution{ public int solution(int[] array, int n) { int answer = 0; if (array.Contains(n)) { return n; ..

TIL 2025.01.08

[멋쟁이사자처럼 부트캠프 TIL회고] 47일차 : 몬스터 상태

코딩테스트 : 소인수분해소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.처음에는 아무 생각 없이 다음과 같이 코드를 짰다.using System;using System.Collections.Generic;public class Solution { public int[] solution(int n) { List answer = new List(); for (int i=2; i  세 가지 문제가 있다.  answer[j]..

TIL 2025.01.07

델리게이트, 람다, Action,Func

Delegate함수에 대한 참조함수를 대신 호출함"타입"이다.(참조형 타입) // 즉 반환 타입과 매개변수로 넣을 수 있다.타입이므로 변수도 선언 가능하다그 자체로 콜백  기능을 해 준다. ( 함수를 먼저 참조하고 나중에 호출한다.)객체 -> 인스턴스 -> 함수 순으로 발생함.using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class DelegatePractice : MonoBehaviour{ public delegate int MyDelegate(int a, int b); void Start() { MyDelegate myDelegate; my..

개념공부 2025.01.07

[멋쟁이사자처럼 부트캠프 TIL회고] 46일차 : 휴식

일요일은 운동과 공부에서 살짝 떨어져서 쉬는 날 !코딩테스트 : 공 던지기머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.using System;using System.Linq;public class Solution { public int solution(int[] numbers, int k) { int answer = 0; int[] evenLength; int[] double..

TIL 2025.01.05

[멋쟁이사자처럼 부트캠프 TIL회고] 45일차 : 옵저버 패턴 + 리팩토링

옵저버 패턴 마무리  오늘 새벽까지 진행한 코드는 데이터를 전달해주는 StateMachine이 있는 코드였다. 그러나, StateMachine은 상태를 저장하고 관리하는 역할만을 하게 하는 방향으로 코드를 짤 수 있다.(그리고 이 방향이 조금 더 기능을 작게 분해하는 과정이다.)각 State들이 관찰자로 참여해 직접 CapsuleController에 들어오는 데이터를 관찰하고, 그 데이터를 기반으로 행동하게 할 것이다.  그렇게 하기 위해서는 다음과 같은 과정을 거쳐야 한다. 옵저버들을 관리할 새 Dictionary 만들기CapsuleController (subject)에 state들을 옵저버로 등록할 수 있는 함수 생성.Ontrigger와 OnReadValue에서 예외처리 변경하기각각의 State들에서..

TIL 2025.01.05

[멋쟁이사자처럼 부트캠프TIL회고] 43일차 : FSM 패턴

FSM 패턴Fineite State machine : 유한 상태 기계 객체의 상태에 따라 모션, 애니메이션 등을 달리 할 때에 사용enum /interface/ai behavior tree / hfsm / playmaker fsm(only unity asset) 등 다양한 방식이 있음 enum 방식으로 switch case로 상태를 검사하고 애니메이션을 추가함.using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.InputSystem;public enum CharacterFSMState{ Idle, Walk, Jump}public class CharacterFSM : Mono..

TIL 2025.01.03

[멋쟁이사자처럼 부트캠프TIL회고] 42일차 : 테트리스 기능 추가

이 중, 1, 2,3,6은 도전하다보면 되겠는데.. ? 라는 생각이 들어 구현을 시작했다.그러나 도중 4줄 삭제 아이템은 굳이.. ? 3번을 고쳐쓰면 되겠는데라는 생각이 들어 일단 1,2,3 번만 구현해 보기로 했다.  2번 3번은 금방 끝났다. 중간 라인이 끝나도 삭제되게 하기지금은 minY가 -1이 되었을 때, 즉 마지막 칸에 닿았을 때만 부모를 분리하고 gridBlock 배열에 넣어준다.그리고 삭제하는 로직도 minY가 -1이 되었을 때만 작동한다. 이를 바꿔주면 된다. else{ SetGridState(1); var (minX, minY, maxX, maxY) = GetGridState(); if (minY == -1) { SetGridState(0); ..

TIL 2025.01.01