C# 프로그래밍

    [C#] foreach가 가능한 객체 만들기

    [C#] foreach가 가능한 객체 만들기

    foreach문은 컬렉션(배열, 리스트 등)의 요소들을 하나씩 꺼내서 처리하는 반복문입니다. 하지만, foreach 문은 객체를 반복 순회할 수 없습니다. foreach 문이 객체 내의 요소를 순회하기 위해서는 foreach 문과의 약속을 지켜야 합니다. 그 약속이란 IEnumerable과 IEnumerator 인터페이스를 상속하는 형식만 지원하기 때문입니다. 1. IEnumerable 인터페이 IEnumerable은 하나의 메소드만 가지고 있어서 이것만 구현하면 됩니다. 메소드 설명 IEnumerator GetEnumerator() IEnumerator 형식의 객체를 반환 왜 IEnumerator 형식을 반환하냐면 IEnumerable 인터페이스가 다음과 같이 정의되어 있기 때문입니다. public i..

    [C#] 인덱서

    [C#] 인덱서

    C# 인덱서(Indexer)는 객체의 인스턴스 변수에 대한 배열 형태의 접근 방법을 제공합니다. 인덱서를 사용하면 객체의 내부 변수에 대해 배열과 같은 방식으로 접근할 수 있습니다. 인덱서는 다음과 같은 형식으로 정의됩니다. public returnType this[parameters] { get { /* 인덱서를 읽을 때 수행되는 코드 */ } set { /* 인덱서에 쓸 때 수행되는 코드 */ } } 위 코드에서 returnType은 인덱서가 반환하는 값의 자료형이며, parameters는 인덱서의 매개변수입니다. get 블록은 인덱서를 읽을 때 호출되며, set 블록은 인덱서에 값을 할당할 때 호출됩니다. 예를 들어, 다음은 인덱서를 사용한 클래스의 예입니다. class MyArray { priva..

    [C#] 컬렉션 초기화

    [C#] 컬렉션 초기화

    2023.02.23 - [C# 프로그래밍] - [C#] 컬렉션 [C#] 컬렉션 컬렉션(collection)이란, 같은 성격을 띄는 데이터의 모음을 담는 자료 구조를 말합니다. 위의 설명에서 컬렉션만 배열로 한번 바꿔 보면 배열 설명과 정의가 같습니다. 그렇습니다! 배열도 .NET 프 onesside-world.tistory.com 컬렉션을 초기화하는 방법 1. 배열로 초기화 ArrayList, Queue, Stack은 배열의 도움을 받아 간단하게 초기화를 할 수 있습니다. 이들 컬렉션의 생성자를 호출할 때 매개 변수로 배열 객체를 넘기면 컬렉션 객체는 해당 배열을 바탕으로 내부 데이터를 채웁니다. 다음은 예제 코드입니다. int[] arr = { 123, 456, 789 } ArrayList list =..

    [C#] 일반화 컬렉션

    [C#] 일반화 컬렉션

    2023.02.23 - [C# 프로그래밍] - [C#] 컬렉션 [C#] 컬렉션 컬렉션(collection)이란, 같은 성격을 띄는 데이터의 모음을 담는 자료 구조를 말합니다. 위의 설명에서 컬렉션만 배열로 한번 바꿔 보면 배열 설명과 정의가 같습니다. 그렇습니다! 배열도 .NET 프 onesside-world.tistory.com 바로 전 게시물에서는 컬렉션에 대해 적어봤습니다. 이때 소개한 컬렉션 클래스들은 모두 object 형식을 기반으로 했습니다. 어떤 형식이든 간에 object 형식으로 상속받고 있으므로 object 형식으로 형식 변환이 가능합니다. 컬렉션들은 바로 이 점을 이용해서 만들어진 자료 구조입니다. 이들 컬렉션은 object 형식에 기반하고 있기 때문에 태생적으로 성능 문제를 안고 있습..

    [C#] 컬렉션

    [C#] 컬렉션

    컬렉션(collection)이란, 같은 성격을 띠는 데이터의 모음을 담는 자료 구조를 말합니다. 위의 설명에서 컬렉션만 배열로 한번 바꿔 보면 배열 설명과 정의가 같습니다. 그렇습니다! 배열도 .NET 프레임워크가 제공하는 다양한 컬렉션 자료 구조의 일부입니다. .NET 프레임워크는 배열 말고도 멋진 컬렉션 클래스들을 여러 개 제공합니다. 그중 네 개를 살펴보며 컬렉션에 대해 설명을 붙이겠습니다.(。・∀・) ノ゙ ArrayList Queue Stack Hashtable 코드 쓰기 전에 using System.Collections; 하는 거 잊지 말기!! ᕦ(ò_óˇ)ᕤ 1. ArrayList ArrayList는 가장 배열과 닮은 컬렉션이라 할 수 있습니다. 컬렉션의 요소에 접근할 때는 [ ] 연산자를 이..

    [C++][C#] 클래스 객체 인스턴스 생성

    [C++][C#] 클래스 객체 인스턴스 생성

    C++에서 객체 인스턴스를 생성하는 방법1. 스택에 정적으로 객체 인스턴스를 생성하는 방법class MyClass { public: int value; }; int main() { // 객체 인스턴스 정적 생성 MyClass myObject; // 정적으로 생성된 객체 인스턴스 사용 myObject.value = 10; return 0; }위의 코드에서 MyClass의 객체 인스턴스를 정적으로 생성하려면, MyClass의 객체 이름인 myObject를 선언하면 됩니다. 이렇게 하면 myObject가 객체 인스턴스를 직접 생성하고, 객체의 메모리를 스택(stack)에 할당합니다. 정적으로 생성된 객체 인스턴스는 프로그램의 실행 중에 계속해서 메모리에 상주하며, 함수 내부에서도 사용할 수 있습니다. 이러한 ..

    C++, C# 에서 "call by reference" , "pass by reference"

    C++, C# 에서 "call by reference" , "pass by reference"

    C++에서는 "call by reference"와 "pass by reference"를 구분하여 사용하지 않고, 둘 다 "참조에 의한 호출(call by reference)"이라는 용어를 사용합니다. C#에서는 "pass by reference"를 "참조에 의한 전달"이라는 용어로 사용하고, "call by reference"를 "참조에 의한 호출"이라는 용어로 사용합니다. 즉, C#에서는 "pass by reference"와 "call by reference"를 구분하여 사용합니다. 하지만 C++에서는 둘 다 "참조에 의한 호출"로 통용되며, 구분하여 사용하지 않습니다. 언어마다 쓰는 매개 변수 키워드가 다르다 C++에서는 "call by reference"를 사용할 때 매개 변수 앞에 & 기호를 사용..

    프로퍼티

    프로퍼티

    객체지향 언어라면 은닉성을 지키면서 개발해야 합니다. private, protect 접근 한정자로 내부 데이터를 외부에서 오면 되지 않게 하고, 이 필드에 접근하는 다른 객체에 public get(), public set() 메서드를 따로 제공합니다. C#도 이 방법을 그대로 사용할 수 있지만, 더 좋은 방법인 프로퍼티를 제공합니다. 솔직히 유니티로 게임을 만들 때 서로 다른 게임 오브젝트 간에 데이터를 읽어오는 작업을 많이 하게 됩니다. 그럴 때마다 은닉성은 개한테 주고 그냥 public으로 선언하고 싶습니다. 물론 게임이 아닌 그냥 클래스를 작성하다 보면 필드를 public으로 선언해버리고 싶은 충동이 들 때가 한두 번이 아닙니다. 데이터가 오염될 수 도 있지만 귀찮습니다. 하지만 프로퍼티를 사용하면..