c# 16

확장 메서드(Extension Method)

프로그램을 개발하다 보면 외부 라이브러리나 프레임워크에서 제공하는 다양한 클래스와 구조체를 자주 활용하게 된다. 이때, 기존의 클래스나 구조체에 기능을 추가하고 싶지만, 직접 상속하거나 원본 코드를 수정할 수 없는 경우가 많다. 이럴 때 유용하게 사용할 수 있는 기능이 바로 확장메서드다. 확장 메서드는 static 클래스 내부에 정의되며, static 메서드로 작성된다. 첫 번째 매개변수 앞에 this 키워드를 붙여 확장할 대상 타입을 지정함으로써, 마치 해당 타입의 인스턴스 메서드처럼 호출할 수 있게 해준다. 1. 확장 메서드의 특징기존 타입의 소스를 변경하지 않아도 메서드를 추가할 수 있다.컴파일 시에는 일반 static 메서드로 처리된다.Unity나 외부 라이브러리의 클래스를 커스터마이징할 때..

Unity에서 유닛을 판별하는 방법

Unity로 게임을 개발하다 보면 다양한 오브젝트 간 상호작용이 필연적으로 발생하게 되고, 특히 충돌처리나 이벤트 발생 시 어떤 유닛인지 판별하는 작업이 매우 중요해진다. 이때 흔히 사용되는 방식은 문자열을 통한 비교인데, 대표적으로 3가지가 있다.이름으로 비교tag로 비교레이어로 비교유닛을 판별하는 3가지 방식 각각의 사용법과 장단점에 대해 정리해보았다. 1. 이름으로 비교void OnCollisionEnter (Collision collision){ if (collision.name == "Enemy") { return; }} ● 충돌체의 이름이 "Enemy"면 코드 실행 (1) 장점직관성이 높다 : 판별하고자 하는 유닛의 이름이 명확할 경우, 직관적으로 구분이 가능하다.유일한 유닛을 명확히..

델리게이트(delegate)

C#을 배우다 보면 처음에는 함수 호출 방식이 직관적이고 명확해 보이지만, 어느 순간에는 코드를 더 유연하고 모듈화된 방식으로 설계할 필요를 느끼게 된다.이때 사용하기 좋은 도구가 델리게이트(delegate)이다. 1. 기본 사용 방법 // 1. 델리게이트 선언public delegate string PrintDelegate(int number); // 의미 => PrintDelegate는 int를 받아 string을 반환하는 메서드를 참조할 수 있다. //2. 델리게이트 대상 메서드private string AddOne(int number) { return (number + 1).ToString(); } // AddOne 함수는 number를 받아 1을 더한 후, string으로 반환한다. void ..

[내일배움캠프] 배치고사 자가 피드백

문제출제 의도 분석제출한 정답문제에 대한 피드백더보기정수형 배열을 입력받아 배열의 모든 요소의 합을 출력하는 함수를 완성해주세요.class Program{ static int Sum(int[] arr) { // TODO : 배열의 모든 요소의 합을 계산하는 코드 작성 ////////////////////////////////////////// } static void Main(string[] args) { int[] ints = { 3, 6, 7, 9 }; Console.WriteLine(Sum(ints)); }} ● 출제 의도 분석배열과 반복문을 이해하고 있는가메서드의 구조와 반환값 처리에 대해 이해하고 있는가● 제출한 ..

Unity 개발 일지 2025.04.24

new 키워드

c#에서 new는 단순히 객체를 생성하는 데만 쓰이지 않는다.new 키워드는 상황에 따라 크게 세 가지 용도로 사용된다.인스턴스를 생성하는 new 연산자클래스에서 멤버를 숨기는 new 한정자제네릭의 new 제약조건 1. new 연산자new의 가장 일반적인 사용 방법은 객체(인스턴스)를 생성할 때 사용해서 생성자를 호출하는 것이다.Player player = new Player(); // player 객체 생성int[] arr = new int[10]; // arr 객체 생성클래스, 배열, 구조체, 컬렉션, 등 다양한 객체를 생성하고, 초기화 할 수 있다.new를 통해 힙 영역에 메모리를 할당하거나 초기화를 수행구조체는 new 없이도 생성할 수 있지만, new를 사용해 필드값을 초기화 할 수..

열거형 (Enum)

열거형(Enumeration)은 프로그램에서 의미 있는 상수 집합을 만들기 위한 타입 정의 도구이다.열거형은가독성유지보수타입 안정성3가지를 높여기 위해 사용하는 구조이다. 1. 열거형enum Direction{ North, // 0 East, // 1 South, // 2 West // 3} Direction은 사용자가 정의하는 타입 이름이다.내부 값(North, East, Sout, West)는 자동으로 (0, 1, 2, 3)으로 매핑된다.매핑되는 값은 enum 내부에서 수동으로 지정할 수도 있다.enum Direction{ North = 2, // 직접 2로 지정 East, // 자동으로 3으로 지정 됨 South ..

프로퍼티와 getter/setter 메서드

필드의 데이터 무결성을 유지하는 것은 매우 중요하다.무결성의 중요성 자체는 여기서 다루지 않겠지만, 이를 지키기 위한 대표적인 방법이 바로 캡슐화이다. 그리고, C#에서 이를 구현하기 위해 프로퍼티를 주로 사용한다. 프로퍼티에는 크게 3가지 장점이 있다.값 검증 및 제한프로퍼티의 set 블록에 조건 로직을 삽입함으로써, 외부에서 잘못된 값을 주더라도 내부에서 자동으로 교정하거나 거부할 수 있다.캡슐화와 기능 삽입내부 필드에 대한 접근을 통제하면서, 접근 시 부가 기능도 함께 실행할 수 있다.읽기와 쓰기 제어로 인한 무결성 유지get, set 각각에 접근제어자를 독립적으로 지정할 수 있어서, 읽기 전용, 쓰기 전용, 둘 다 가능, 등 다양한 제한을 둘 수 있다. 프로퍼티는 간결성, 유연성, 커스텀 로직..

유니티에서 데이터를 저장하는 방법

유니티에서 데이터를 저장하는 방법은 목적과 사용 범위에 따라 여러 가지가 있다.PlayerPrefs로컬 파일 저장 (JSON, XML, Binary)ScriptableObjectSQLite/Database 저장클라우드 저장각 데이터 저장 방법의 추천 용도, 저장 위치, 지원 데이터 타입, 장단점을 알아보고 비교하자 1. PlayerPrefs추천 용도 : 설정값, 사용자 이름, 점수 등 소량의 데이터게임 설정값 (볼륨, 해상도, 언어 등)마지막으로 저장된 레벨이나 체크포인트간단한 튜토리얼 완료 여부로그인 여부, 간단한 유저 상태점수, 최고기록 등 간단한 통계 데이터저장 위치 : 해당 기기 내부에 저장되며 자세한 위치는 플랫폼에 따라 다르고, unity에서 변경 가능지원 데이터 타입int, float, s..

부동 소수점 (Floating Point)의 오류(Error)와 흔들림(Jitter)

부동 소수점은 소수점이 있는 수를 컴퓨터에서 근사하여 표현하는 방식이다. 유리수와 달리 실수는 불가산집합,즉 무한하기 때문에 컴퓨터로 구현할 수 없어서 유사한 값을 정해진 비트 안에서 최대한 가까이 표현하는 방법이다. 부동 소수점은 크게 float와 double로 나눌 수 있으며, 속도와 GPU 호환성을 이유로 unity에서는 주로 float를 사용한다.하지만 소수점 약 15자리까지 안전한 double과 달리 float는 소수점 7자리까지의 정밀도를 보장하기 때문에, 매우 미세한 오차가 반복 계산 또는 시간 누적에 따라 큰 오차가 될 가능성이 있다.    부동 소수점 오류(Error)float a = 0.1f;float b = 0.2f;float c = a + b;float d = (c == 0.3f ?..

public vs SerializeField

public 과 [SerializeField] 는 Unity에서 필드를 인스펙터에 노출할 때 사용하는 방식이다. 둘 다 필드를 직렬화하는데 사용되지만 접근성과 캡슐화 면에서 근본적인 차이가 있고, 이를 잘못 사용하면 안전성과 유지보수 측면에 문제가 생길 수 있다. 공통점필드가 인스펙터에 노출된다.public외부 클래스에서도 접근이 가능하다.외부 클래스가 이 값을 마음대로 바꿀 수 있어 캡슐화 원칙에 위반된다.실수나 외부 의존성 때문에 디버깅이 어려워질 수 있다.[SerializeField]외부 클래스에서는 접근 불가 ( private 또는 proteced ).에디터에서는 값이 보이지만, 코드 상에서는 이 필드에 직접 접근할 수 없다.캡슐화를 유지하면서 인스펙터에서 데이터 조작이 가능하다.외부에서 필드 ..