C# 21

의존성 주입(DI)

의존성이란?의존성(Dependency)은 한 객체가 다른 객체의 기능이나 데이터에 직접적으로 의존하는 관계를 말합니다.public class Car { private readonly Engine _engine = new Engine(); public void Start() { _engine.Ignite(); }}위 예제에서 Car 클래스는 Engine 클래스에 의존합니다. 즉, Car는 Engine 없이는 동작할 수 없습니다. 강한 의존이 나타나면 안좋은 이유유지보수 어려움한 클래스가 변경되면, 이를 사용하는 다른 클래스도 영향을 받습니다.확장성 저하기능 추가나 교체가 어렵습니다.테스트 어려움테스트 시 의존 객체도 함께 초기화해야 합니다.public class Repo..

C# 2025.05.19

Linq 쿼리 많이쓰는것

from a in b : b중 a (foreach var a in b)와 같은 것이다. Where : 조건자 함수를 기반으로 하는 값을 '선택'합니다.select 변환 함수를 기반으로 하는 값을 프로젝션 합니다. Distinct : 컬렉션에서 중복 값 제거Except : 두번째 컬렉션에 표시되지 않는 한 컬렉션의 요소를 의미하는 차집합 반환Intersect : 교집합 반환Union : 합집합 반 OrderBy 오름차순 정렬ThenBy 2차 정렬을 오름차순으로 수행 GroupBy : 공통 특성을 공유하는 요소를 그룹화합니다. 출처 : https://learn.microsoft.com/ko-kr/dotnet/csharp/linq/standard-query-operators/ Standard Query Ope..

C# 2025.01.23

코딩 테스트에서 시간부족이 뜬다면?

PCCP 기출2번, 퍼즐 게임 챌린지라는 문제를 풀어보았다.간단히 해당 문제들을 제한시간내에 풀수있는 숙련도의 최소값을 구하라는 문제인데 링크는 아래와 같다.https://school.programmers.co.kr/learn/courses/30/lessons/340212 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 내 아이디어는 다음과 같았다.1. 해당 숙련도로 문제를 푸는데 필요한 시간을 구한다.2. 숙련도가 부족하면 숙련도를 높여간다. 3/4는 맞추었지만 나머지에서 시간부족으로 문제를 풀 수 없었다. 너무 큰 숫자가 나오면 for문을 너무 많이 돌게 되는것이 문제가 되는것 같았다. 여기에 하나의..

C# 2025.01.20

객체지향 4가지 특징

1. 추상화객체들의 공통적인, 핵심적인 개념 또는 기능을 간추려 내는것.유니티에서는 인터페이스와 추상클래스를 통해 구현구체적인 구현에 의존하지 말고 추상화에 의존하는 것이 SOLID원칙중 의존성 역전 원칙에 해당2. 캡슐화관련성 깊은 변수와 함수를 하나의 클래스로 묶어 응집도를 높이는 것이다.유니티의 경우 private, protected등의 접근 제한자로 필드를 보호할 수 있다.프로퍼티를 통해 Getter는 public으로, Setter는 private으로 지정할 수 있다. 3. 상속상속을 이용함으로써 다른 클래스에 정의된 동작을 재사용, 확장, 수정하는 새로운 클래스를 만들 수 있다.다만 유니티는 다중상속은 다이아몬드 문제로 허용하지 않는다. 대신 인터페이스는 다중상속을 허용한다. 4. 다형성유니티에..

C# 2025.01.17

오랜만에 푸는 알고리즘문제 - 조건에 맞게 수열 변환하기 2

어느덧 유니티를 공부한지 4개월이 되었다. 알고리즘 문제를 꾸준히 풀어보고자 했으나 프로젝트를 진행하면서 해야할 작업과 공부가 많아 소홀하였고 오늘 오랜만에 알고리즘 문제를 풀게되었다. 코딩 스타일도 많이 달라진게 느껴진다. 문제는 다음과 같다.정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각..

C# 2025.01.16

.Equals(null)

var rb = GetComponent();if(!rb.Equals(null)){ rb.velocity = new Vector3(1, 0, 0);}  가끔씩 라이더를 쓰다보면 == null일때~ 의 null체크에 " 이 연산은 비용이 큰 연산입니다"라고 뜬다. 나는 이 메세지를 보고 다른 null을 체크할 수 있는 Equals를 사용해보았다. 문제없이 잘 이용해왔는데 빌드를 하고나니 문제가 생겼다. rb가 null일 때, 위의 조건문에서 NullReference 오류가 생긴것이다.  null여부를 체크하기위해 .을 찍고 들어가는순간 null이기 때문에 오류가 생기는것인지, 아니면 .Net의 차이인지는 모르겠다만 위처럼 사용하지 말고var rb = GetComponent();if(rb != null) rb..

C# 2025.01.06

Behaviour Tree의 기본 개념

행동 트리는 게임AI나 로봇 제어, 시뮬레이션 등에서 사용되는 논리적/계층적 구조로, NPC나 에이전트가 특정 목표를 달성하기 위해 어떤 행동을 취해야 하는지를 트리형태로 정의한 것이다. BT의 기본개념1. 노드행동 트리는 노드들의 연결로 이루어지며, 각 노드는 보통 아래와 같은 역할로 구분된다제어노드 : 자식 노드들의 실행 순서나 조건을 제어실행 노드 : 실제 행동이나 조건등을 수행2. 트리 구조루트 노드에서 시작하여, 위에서 아래로 순회를 진행한다.특정 노드를 실행할 때, 그 노드가 "자식 노드에게 제어권을 넘길지, 결과를 리턴할지"등을 결정한다.3. 실행 결과행동 트리 노드는 실행 후 Success, Failure, Running등의 상태를 반환이 반환값에 따라 상위 노드가 다음에 어떤 노드를 실행..

C# 2025.01.02

LinkedList

LinkedList는 노드로 구성된 선형 데이터 구조이다. 유니티에서 제공하는 공식문서에 따르면 다음과 같다.  LinkedList는 범용 연결된 목록입니다. 다른 컬렉션 클래스와 일치하는 열거자를 지원하고 ICollection 인터페이스를 구현합니다. LinkedList형식의 별도 노드를 제공하므로 삽입 및 제거는 O(1)입니다. 각 노드는 이중으로 연결되므로 Next는 앞노드를, Previous는 뒷 노드를 가리킵니다. 만일 비어있으면 null입니다.  LinkedList장점- 삽입 및 삭제가 빠름 : 특정 위치의 삽입/삭제가 O(1)의 시간복잡도를 가지므로, 빈번한 삽입과 삭제가 필요한 경우 유리합니다.- 동적 메모리 사용 : 배열처럼 크기를 미리 정하지 않아도 되며, 필요에 따라 메모리를 동적으로..

C# 2024.12.27

MVVM

Model - View - ViewModel 1. Model애플리케이션의 데이터와 비즈니스 로직을 담당데이터베이스, 웹 API, 또는 데이터 소스와의 상호작용View나 ViewModel에 대해 아무런 의존성 없이 순수한 데이터 구조 또는 로직 2. View사용자와 상호작용하는 UI 부분버튼, 텍스트박스, 목록등과 같은 UI 구성요소ViewModel과의  데이터 바인딩을 통해 이벤트를 전달하거나 데이터를 표시로직은 거의 포함되지 않으며, 시각적 표현에만 집중 3. ViewModelModel과 View사이를 중재하며 데이터 변환과 상태 관리를 담당View에서 필요한 데이터를 제공하고 View의 명령 또는 이벤트를 받아  Model을 조작View에 의존하지 않음 장점 유지보수성: 각 계층이 독립적으로 동작하므..

C# 2024.12.25

다이아몬드 문제

다중상속이 가능할 때 최상위 클래스인 A가 있고 이를 상속받는 B클래스와 C클래스가 있다고 가정하자. 이를 D클래스가 B, C 둘다 상속받는다고 했을 때 발생하는 일이다. public class A{ public virtual void Init();}public class B : A{ public override void Init();}public class C : A{ public override void Init();}public class D : B, C{ public override void Init() { base.Init(); }} 이런상황에서 base.Init을 실행하면 B와 C중에 모호한 참조가 발생하게 되어 오류가 발생한다. C#에서는 다중상속을 금지하여 이러한 일이 발..

C# 2024.12.10