C#

    [C#] 매개변수 한정자(ref, out, in)

    📕매개변수 한정자(ref, out, in) 📖매개변수 한정자란? 매개변수 한정자는 메서드에 전달하는 매개변수의 전달 방식을 지정하기 위해 사용한다. 매개변수 한정자로는 ref, out, in가 있다. 각 한정자는 다음과 같은 상황에서 쓰인다. ref : 전달된 매개변수를 메서드에서 수정하고 싶을 때 in : 전달된 매개변수가 메서드에서 수정되지 않아야 할 때 out : 전달된 매개변수가 반드시 메서드에서 수정되어야 할 때 ref와 in는 메서드에 전달하기 전 초기화 되어야 하지만 out는 메서드에서 초기화 된다. 💡매개변수 한정자를 쓰지 않고 매개변수를 전달하면 값 형식으로 전달된다. 📌ref 한정자 메서드 내에서 수정된 매개변수의 값이 메서드 외부에 반영되게 하려면 매개변수를 참조 형식으로 전달해야 한..

    [C#] 딕셔너리(Dictionary)

    [C#] 딕셔너리(Dictionary)

    📕딕셔너리(Dictionary) 📖딕셔너리란? 딕셔너리는 데이터를 '키와 값'이라는 묶음으로 저장하는 데이터 집합이다. 딕셔너리 클래스는 System.Collections에 정의돼 있으며, 제네릭 형식이므로 모든 유형의 데이터를 저장할 수 있다. 데이터를 '키와 값'의 묶음으로 저장하기 때문에 저장 순서와 관계 없이 '키'를 통해 원하는 데이터를 곧바로 찾을 수 있다. 📌딕셔너리의 특징은 다음과 같다. IDctionary 인터페이스를 구현한다. 같은 이름의 키는 반드시 하나여야 하며 'null'이어서는 안 된다. 값은 'null'이어도 되며 복제되어도 된다. 값은 해당 값과 연결된 키를 통해 접근할 수 있다. 각 묶음은 KeyValuePair 오브젝트로 저장된다. 📌딕셔너리 생성 방법 사용자는 딕셔너리 ..

    [C#]리플렉션(Reflection)과 어트리뷰트(Attribute)

    📕리플렉션(Reflection) 📖리플렉션이란? 리플렉션이란 C#에서 런타임 중에 객체의 메타 정보를 확인하고 조작하는 매커니즘이다. 리플렉션을 사용하면 동적으로 인스턴스를 생성하거나 기존 객체에 형식을 바인딩할 수 있으며 기존 객체의 정보를 가져와 해당 객체의 멤버를 조작할 수 있다. C#은 리플렉션을 사용하기 위한 여러 클래스를 .NET 프레임워크에 정의해 놓았다. 아래는 그 리스트이다. Type MemberInfo ConstructorInfo MethodInfo FieldInfo PropertyInfo TypeInfo EventInfo Module Assembly AssemblyName Pointer etc. 📖Type 클래스 Type은 모든 형식(class, interface, array, val..

    제네릭(Generics)이란?

    제네릭(Generics)이란?

    📕제네릭(Generics)이란? 📖제네릭이란? 제네릭이란 구체적인 데이터 형식이 정해지지 않은 형식으로, 클래스와 인터페이스, 추상 클래스, 필드, 메서드, 정적 메서드, 프로퍼티, 이벤트, 델리게이트에서 사용될 수 있다. 데이터 형식이 정해지지 않았기 때문에 제네릭 형식을 사용할 땐 데이터 형식이 들어갈 자리를 표시해 줘야 하는데, 이를 형식 매개 변수라고 한다. 형식 매개 변수의 이름은 정해진 바가 없으나 일반적으로 타입의 첫 글자인 T를 사용한다. 제네릭 형식을 선언하는 방법은 다음과 같다. class DataStore { public T Data { get; set; } } 위 코드에서 DataSotre는 제네릭 클래스이며 T는 형식 매개 변수다. Data는 구체적인 데이터 형식 대신 T를 사용해..

    구조체(Struct)와 클래스(Class)

    📕구조체(Struct) 📖구조체란? C#에서 구조체란 데이터와 관련된 기능을 캡슐화한 값 형식으로, 생성자, 상수, 필드, 메서드, 프로퍼티, 인덱서, 연산자, 이벤트를 포함할 수 있다. 일반적으로 동작을 구현하기보다는 필드나 상수 같은 데이터를 관리하는 용도로 쓰인다. 📌구조체의 선언 구조체를 선언할 때는 struct 키워드를 사용한다. 구조체의 모든 필드는 대입 연산자 혹은 생성자를 통해 값을 초기화해 주어야 한다. 초기화되지 않은 필드가 있을 시 컴파일 에러가 발생한다. 아래 코드에서는 기본 생성자를 통해 필드를 초기화했다. struct Coordinate { public int x; public int y; } class Program { static void Main(string[] args) ..

    생성자

    📕생성자(Constructors) 📖생성자란? 생성자란 이름이 해당 형식의 이름과 동일한 메서드로, 클래스 또는 구조체 인스턴스를 생성할 때마다 호출된다. 생성자는 접근 제한자, 생성자의 이름, 매개 변수 목록을 포함하며 반환 형식은 포함하지 않는다. 프로그래머는 생성자를 통해 기본값을 설정하고 인스턴스 생성을 제한할 수 있다. 생성자의 형식은 크게 세 가지로 구분할 수 있다. 매개 변수가 없는 생성자 매개 변수가 있는 생성자 기본 생성자 하나씩 살펴 보자. 📌매개 변수가 없는 생성자 public class Taxi { public bool IsInitialized; public Taxi() { IsInitialized = true; } } class TestTaxi { static void Main()..

    프로퍼티(Property, 속성)

    📕프로퍼티(Property, 속성) 프로퍼티는 클래스에 속한 멤버로, 필드를 상황에 따라 유연하게 읽고 쓰고 싶을 때 사용하는 메서드이다. 프로퍼티를 사용하면 읽기 전용 필드와 쓰기 전용 필드를 만들 수 있다. 또한 읽기와 쓰기 둘 다 가능한 필드를 만드는 것도 가능하다. 즉, private으로 선언한 필드에 대한 접근 권한을 읽기와 쓰기로 나누어 허용하거나 제한할 수 있다는 얘기다. 이를 잘 활용하면 데이터의 접근성과 안전성을 동시에 높일 수 있다. 프로퍼티의 기본 형태는 다음과 같다. class Person { private string name; // field public string Name // property { get { return name; } // get method set { nam..

    람다 식(Lambda Expression)

    람다 식(Lambda Expression)

    📕람다 식(Lambda Expression) 함수를 하나의 식(Expression)으로 표현한 것으로, 익명 함수(Anonymous Function)를 간결하게 표현하는 데에 쓰인다. 람다식을 사용하면 코드가 간결해지고 개발자의 의도를 명확히 드러낼 수 있다는 장점이 있다. 다만 람다식으로 만든 함수는 일회용이기 때문에 재사용이 불가능하다. 📖람다 식의 형태 람다식은 무명 메서드가 발전한 형태이다. 람다 식의 형태를 잘 보면 무명 메서드의 delegate 키워드와 매개 변수 형식을 삭제한 뒤 람다 연산자 '=>'를 더한 것을 볼 수 있다. 위의 형태로 사용해도 정상적으로 작동하지만 구문(statement)이 하나라면 중괄호와 return, 세미콜론까지도 삭제할 수 있다. 또한 매개 변수가 하나라면 소괄호..

    델리게이트(Delegate, 대리자)와 이벤트(Event)

    델리게이트(Delegate, 대리자)와 이벤트(Event)

    📕델리게이트(Delegate, 대리자) MS 기술 문서에서는 델리게이트를 이렇게 정의하고 있다. A delegate is a type that represents references to methods with a particular parameter list and return type 직역하자면 메서드(특정 매개 변수 목록과 반환 타입을 가진)에 대한 참조를 나타내는 형식이다. 즉, 델리게이트를 통해서 메서드를 참조할 수 있다는 뜻이다. 그렇다면 델리게이트의 핵심 기능은 무엇일까? 마찬가지로 MS 기술 문서의 설명을 가져왔다. Delegates are used to pass methods as arguments to other methods. 델리게이트는 메서드를 인자로 전달하는 데에 쓰인다. 델리게..