갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 2020년 게임 매출
  • 글로벌게임매출
  • 유니티 그래프 그리기
  • 모바일 게임 순위
  • C++ 소멸자
  • 강남 방탈출
  • c# delegate
  • pc 게임 순위
  • c# Thread
  • 전세계 게임 매출
  • C# boxing
  • c# coroutine
  • 유니티 그래프
  • 롤 골드그래프
  • c# unboxing
  • c# collection
  • 자바
  • 게임매출순위
  • 게임 매출 순위
  • 유니티 골드그래프
  • Unity Graph
  • 전세계게임매출순위
  • C++ 상속
  • pc게임 순위
  • c# 코루틴
  • 알고리즘
  • C++ virtual
  • 게임 디자인 패턴
  • C++
  • C# 예외 처리

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥

나는야 프로그래머

[C#] 컬렉션 (Collection)
프로그래밍/C#

[C#] 컬렉션 (Collection)

2020. 4. 23. 17:18
728x90
반응형

1. 핵심 정리

using System;

class Program {
    static void Main() {
        int[]    arr1 = {1, 2, 3, 4, 5};
        string[] arr2 = {"aa", "bb", "cc"};
    }
}

 ① 컬렉션 (Collection) 이란?

    => 동일 타입의 객체를 여러 개 보관 할 수 있는 클래스

    => 배열, Linked List, Tree, Hash Table 등의 자료구조를 구현한 클래스

    => 언어에 따라 Collection(C#, Java) 또는 Container(C++) 라는 용어를 사용

 

 ② int, double, string, 사용자 정의 타입등 다양한 타입에 대한 컬렉션이 필요

 

 ③ 어떤 타입을 보관할 것인가?

 


2. 데이터 저장 타입에 따른 분류

using System;
using System.Collections;

class Program {
    static void Main() {
        ArrayList c1 = new ArrayList();
        
        c1.Add(1);
        c1.Add(2);
        c1.Add("str");
        
        // int n = c1[0]; - error
        int n = (int)c1[0];
    }
}

먼저 ArrayList이다. Generic이 나오기전에 사용하던 것으로 요소추가는 Add메소드를 통해 한다.
Add메소드의 정의로 이동해보면 obejct를 인자로 받기 때문에 모든 타입을 인자로 받을 수 있다.
따라서 int형 타입만 받다가 string이 들어갈 수도 있는데 이러한 부분을
타입 안정성이 좋지 않다고 한다.
또한 값을 꺼낼 때도 object이므로 int로 캐스팅을 해서 꺼내야 한다.
namespace는 System.Collections을 열어놓으면 사용할 수 있다.

 

using System;
using System.Collections.Specialized;

class Program {
    static void Main() {
        StringCollection c2 = new StringCollection();
        
        c2.Add("aa");
        c2.Add("bb");
        // c2.Add(1); - error 타입 안정성이 좋다.
        
        string s = c2[0];
    }
}

다음은 StringCollection이다. 이것도 Generic이 나오기전에 만들어진 컬렉션이다.
위와 같이 Add메소드를 통해 요소를 추가한다.
Add메소드의 정의로 이동해보면 string만 넣을 수 있는 것을 볼 수 있다.
이런걸 타입 안정성이 좋다고 한다.
또한 string만 넣었으므로 꺼낼때도 캐스팅 필요 없이 꺼낼 수 있다.
하지만 문제는 이건 string전용 컬렉션이고 나중에 int, double형이 필요하다면
다 만들어야 하는 문제가 있다. C#에서는 자주 사용하는것만 만들어 주었는데 문자열이 그 경우이다.
namespace는 System.Collections.Specialized를 열어주면 사용할 수 있다.

 

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        List<int> c3 = new List<int>();
        
        c3.Add(1);
        c3.Add(2);
        // c3.Add("aa"); - error 타입 안정성이 뛰어나다.
        
        int n = c3[0];
    }
}

다음으로 볼게 Generic 컬렉션인 List이다.
Add메소드의 정의로 이동해보면 제너릭으로 되어 있는것을 볼 수 있다.
위의 경우 int로 놓았으므로 int만 보관가능하고 꺼낼 때도 int로 바로 받을 수 있다.
제너릭이므로 int, double, string 필요한 타입에 대해 만들어 사용하면 된다.
namespace는 System.Collections.Generic을 열어주면 된다.

 

using System;
using System.Collections.Concurrent;

class Program {
    static void Main() {
        ConcurrentStack<int> c4 = new ConcurrentStack<int>();
        
        c4.Push(10);
    }
}

 

다음은 위의 3개와는 좀 다른 관점인데 멀티 쓰레드에 안전한 컬렉션이다.
대표적으로 위의 ConcurrentStack이 있다.
제너릭으로 만들어져 있고, 무언가 요소를 추가할 때 멀티 쓰레드에 안전하다.
namespace는 System.Collections.Concurrent를 열어주면 된다.
그리고 쓰레드에 안전한 컬렉션을 더 알고싶다면
마이크로소프트 msdn으로 가서 찾아보면 확인할 수 있다.
728x90
반응형

'프로그래밍 > C#' 카테고리의 다른 글

[C#] 열거자 (Enumerator)  (0) 2020.04.26
[C#] Collection과 Interface  (0) 2020.04.26
[C#] try ~ finally  (0) 2020.04.21
[C#] 예외 필터 (exception filter)  (0) 2020.04.20
[C#] 예외를 처리하는 방법 (catch, Exception, rethrow)  (0) 2020.04.20
    '프로그래밍/C#' 카테고리의 다른 글
    • [C#] 열거자 (Enumerator)
    • [C#] Collection과 Interface
    • [C#] try ~ finally
    • [C#] 예외 필터 (exception filter)
    갓똥
    갓똥
    공부하며 알아가는 내용을 정리해 봅니다.

    티스토리툴바