6장 - 3 (컬렉션)

2014. 12. 20. 23:20IT Books/시작하세요 C# 프로그래밍

Collections


BCL에서는 System.Collections 하위에 관련 타입을 묶어서 제공

가변 배열과 같은 기능을 편리하게 구현한 것들을 제공.



System.Collections.ArrayList


ArrayList는 object부터 이로 형변환 할 수 있는 모든 타입을 인자로 받아 다룰 수 있는 자료구조.



 

object를 인자로 갖기 때문에 닷넷의 모든 타입을 담을 수 있다.
다만 박싱이 발생하므로 성능은 떨어진다.

ArrayList는 기본적으로 Sort가 제공되는데 담고 있는 모든 값이 동일 타입이어야만 한다!
사용자 정의 타입의 정렬은 IComparer 인터페이스를 구현한 객체를 2번째 인자로 전달하면 된다.

또한 IComparable 인터페이스를 이용할 수 있다.

System.Collections.Hashtable

값과 함께 키를 추가하여 빠른 검색을 할 수 있다.

키가 중복되면 예외가 발생하며, 키 + 값 모두 object로 다루므로 박싱문제가 발생.

System.Collection.SortedList

키, 값 사용방식은 같으나 내부적으로 키가 단순히 정렬 용도로 사용되어 순서에 영향을 주게 된다.


System.Collection.Stack

전통적인 stack이며, 박싱문제가 똑같이 발생한다.

System.Collection.Queue

Enqueue로 넣고, Dequeue로 뺀다. 박싱 문제 동일. 끝.


파일

System.IO.FileStream

BCL의 가장 기본 타입이며 Stream을 상속.


 

* FileMode.Append
FileAccess는 Write만 허용되며 FileShare는 지정할 필요없다.

* FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None
재사용되는 전용 데이터를 입 / 출력하는 목적으로 사용

* FileMode.Create, FileAccess.ReadWrite, FileShare.None
임시로 사용되는 데이터의 입 / 출력.

**공유
FileShare.None을 주면 배타적으로 파일을 열게 된다.

** 경로
대개 기본 경로는 EXE 폴더와 같다.
Environment.CurrentDirectory의 값을 따른다.

System.IO.File / System.IO.FileInfo

File 타입은 자주 사용되는 파일조작기능을 담고 있음.
Copy : 파일복사
Exists : 파일의 존재여부 확인
Move : 파일 이동
ReadAllBytes, ReadAllLines : 파일을 모두 읽어 byte배열로 반환, 텍스트 파일을 모두 읽어 string배열로 반환 (한 줄당 문자열 하나)
ReadAllText : 텍스트 파일의모든 내용을 string객체로 반환

File.Move는 이동 뿐만 아니라 파일명 변경용으로도 사용한다.

File은 모든 멤버가 static이며 
FileInfo는 인스턴스용이며 사용법은 거의 같다.


System.IO.Directory / System.IO.DirectoryInfo

CreateDirectory : 생성, 이미 있다면 아무것도 안함
Delete : 삭제, 이미 없다면 예외
Exits : 존재여부
GetDirectories : 하위 디렉토리 목록을 문자열 배열로 반환
GetFiles : 지정된 경로 파일들을 문자열 배열로 반환


 

보다시피 와일드 카드 사용가능

* 는 0개 이상을 의미
? 는 어떤 하나의 문자를 의미

net?.*   확장자 상관없이 "net"으로 시작하는 총 4글자로 된 파일
???.dll   확장자가 DLL이고  파일명이 3글자인 모든 파일


System.IO.Path

파일경로에 관한 유용한 정적 메서드들을 제공!!

ChangeExtension : 확장자 변경
Combine : 문자열 인자를 합침
GetDirectoryName : 인자에 파일이름이 있으면 그 부모 디렉토리를, 인자에 디렉토리만 있으면 그 부모 디렉토리 이름을 반환
GetExtension
GetFileName
GetFileNameWithoutExtension
GetFullPath : 전달한 인자에서 파일명을 제외한 경로를 반환

GetInvalidFileNameChars : 파일 이름으로 부적절한 문자의 배열 반환
GetInvalidPathChars
GetPathRoot : 인자의 루트 드라이브 반환
GetRandomFileName : 임의의 파일명 반환
GetTempFileName : 윈도우 임시 폴더 경로에 임의의 파일 생성 후 경로 반환
GetTempPath : 윈도우의 임시 폴더 경로 반환


경로는 경로 구분 문자인 '\' 때문에 생각보다 검사하거나 신경쓸게 많은데
Combine을 쓰면 편함



폴더명이나 파일명을 입력받고 싶을 때 오류 처리는 다음과 같이.


Threading




'IT Books > 시작하세요 C# 프로그래밍' 카테고리의 다른 글

6장 - 리플렉션1  (1) 2014.12.21
6장 - 쓰레드, 네트워크, 데이터베이스  (0) 2014.12.21
6장 - BCL - 2  (0) 2014.12.08
6장 - BCL - 1  (0) 2014.12.07
5장 - 5  (0) 2014.12.02