본문 바로가기

개인공부/C#

(29)
[C#] 인덱서(Indexer), IEnumerable, IEnumerator ■ 인덱서(Indexer) : 인덱서(Indexer)는 인덱스(Index)를 사용하여 배열과 유사한 방식으로 개체에 접근할 수 있습니다. ■ Example class IndexerSample { private T[] arr = new T[3]; public T this[int idx] { get { return arr[idx]; } set { arr[idx] = value; } } public int Length { get { return arr.Length; } } } class Program { static void Main(string[] args) { var idxString = new IndexerSample(); idxString[0] = "AA"; idxString[1] = "BB"; idx..
[C#] 컬렉션(Collection) ■ 컬렉션(Collection) : - 개체를 그룹화하는 방법 중 하나 - 컬렉션(System.Collections)에는 ArrayList, Queue, Stack, Hashtable 등을 지원 * 컬렉션은 Object 형식 데이터를 저장, 컬렉션(System.Collections)은 박싱(Boxing), 언박싱(UnBoxing)이 발생하여 많이 사용하게 되면 성능 저하가 올 수 있음 * 가능하면 컬렉션(System.Collections) 대신에 제네릭 컬렉션(System.Collections.Generic 또는 System.Collections.Concurrent) 사용 ■ ArrayList : - 필요에 따라 크기가 동적으로 증가하는 개체 배열 - 제네릭 컬렉션 List 로 대체 사용 ■ Exampl..
[C#] 배열(Array) ■ 배열(Array) : - 형식이 동일한 변수를 여러 개 저장할 수 있는 데이터 집합 - 배열 요소는 Index로 접근 가능, 첫 번째 요소는 Index 0이다. - 배열은 단일 차원, 2차원 이상의 다차원 또는 가변적일 수 있다. - 추상 형식(System.Array)에서 파생된 참조 형식이다. - 배열은 반복문(for/foreach)과 함께 사용하면 효율적이다. ■ Example // 기본 초기화 int[] int_array = new int[5] { 1, 2, 3, 4, 5 }; // 요소 개수 생략 string[] string_array = new string[] { "Memoo", "ABC", "가나다" }; // new, 요소 개수 생략 double[] double_array = { 0.1,..
[C#] 프로퍼티(Property) ■ 프로퍼티(Property) : 은닉성을 신경 쓰면 번거롭기 때문에 public을 남용하게 될 수 있음, public 필드는 외부의 접근을 허용하기 때문에 오염에 노출될 가능성이 있음, 프로퍼티(Property)는 public 필드처럼 내부 필드에 접근하게 해주는 멤버 - get / set 메서드를 통해 내부 필드에 접근 - 데이터를 출력할 때는 get 접근자 - 데이터를 입력할 때는 set 접근자 * get 접근자만 사용하면 읽기 전용 프로퍼티 * value키워드에는 프로퍼티에 선언된 데이터 형식(Data Type)과 동일한 매개변수가 입력 ■ 자동 구현 프로퍼티 : get / set 메서드 보다 간략한 구조 - 필드 이름 생략 - get접근자의 반환 문(return 필드;) 생략 - set접근자의 ..
[C#] 인터페이스(Interface), 추상클래스(Abstract class) ■ 인터페이스(Interface) : 클래스가 해야 하는 행동(메서드)을 결정, 인터페이스(Interface)를 상속받은 클래스(Class)는 인터페이스(Interface)에 선언된 메서드(Method)를 모두 구현해야 함 - 일반적으로 인터페이스(Interface)는 I 로 시작하는 이름으로 명명 ex) IControl, IConnect - 선언 가능 멤버 : 메서드(Method), 이벤트(Event), 인덱서(Indexer), 프로퍼티(Property) - 선언 불가능 멤버 : 필드(Field) - 메서드(Method)는 구현을 갖지 않음 - Instance 생성 불가(참조 가능) - 상속받은 클래스의 Instance 생성 가능 - 비유적 설명 : · 붕어빵 틀 설계도(인터페이스) - 붕어빵 틀(클래..
[C#] 구조체(Struct), 튜플(Tuple) ■ 구조체(Struct) : - 구조체(Struct)는 값 형식이다. - int, double, bool 등과 같은 값 형식의 기본 Data Type은 Struct로 정의되어 있다. ■ 클래스, 구조체 비교 특징 클래스(class) 구조체(struct) 형식 참조 값 복사 얕은 복사(Shallow Copy) 깊은 복사(Deep Copy) 인스턴스 생성 new 연산자와 생성자 필요 선언만으로도 생성 생성자 매개변수 없는 생성자 선언 가능 매개변수 없는 생성자 선언 불가능 상속 가능 불가능 * 구조체는 값 형식이기 때문에 구조체의 인스턴스는 스택에 할당되고 인스턴스가 선언된 블럭이 끝나는 지점의 메모리에서 즉시 제거, 가비지 컬렉터를 호출하지 않아서 클래스에 비해 시간적 낭비가 적어 속도가 빠르다 ■ Exa..
[C#] IS, AS ■ is, as 연산자 : 객체의 형식을 확인하는 연산자, 다운 캐스팅(Down Casting) 전 확인이 필요할 때 사용 - is : 객체가 해당 형식에 해당하는지 검사하여 그 결과를 bool 값으로 반환 - as : 형식 변환 연산자와 같은 역할, 형 변환에 실패하면 객체 참조를 null로 만듦 ※ 다운 캐스팅(DownCasting)? 부모 클래스의 객체를 자식 클래스의 객체로 변환, "[C#] 상속(Inheritance)" 참고 [C#] 상속(Inheritance) ■ 상속(Inheritance) : - 상속은 부모가 자식에게 재산 혹은 권리 등을 물려주는 것으로 부모 클래스의 기능을 자식 클래스가 상속받아 사용하는 것 - 특정 기능을 제공하는 부모클래스를 정의하 memoo-list.tistory...
[C#] 중첩 클래스(Nested Class), 분할 클래스(Partial Class) ■ 중첩 클래스(Nesteed Class) : 클래스 내부에 정의하는 클래스로 정의 방법에 따라서 클래스의 그룹화가 가능하고 접근 한정자(Access Modifier)를 사용하여 클래스 사용 범위를 내부로만 제한하여 관리할 수 있습니다. - 클래스의 논리적인 그룹화 가능 - 클래스 내부로 사용범위를 제한하여 코드 관리 편의 제공 - 클래스 외부로 불피요한 내용 제한 - 클래스의 일부처럼 표현 가능 ■ Example class OuterClass { public int _num; private int _private_num; public void SetPrivateNum(int num) { this._private_num = num; } public class NestedClass { OuterClass ..