밀집 사고 예측 시뮬레이션 프로젝트/C# Study

프로퍼티, 컬렉션, 일반화 프로그래밍

gayeon_ 2024. 3. 14. 14:07

프로퍼티

클래스에서 멤버 변수를 public으로 선언할 경우

  • 편리함
  • 은닉성 고려 x

 

프로퍼티 선언

  • 멤버 변수의 은닉성 보장
  • 변수에 접근하는 것과 같이 대입 연산자(=) 사용 가능

get { .. } 접근자는 멤버 변수로부터 값을 읽어온다

set { .. } 접근자는 멤버 변수에 값을 할당한다

set { .. } 접근자 안에 있는 value 키워드는 set 접근자의 암묵적 매개 변수

 

 

자동 구현 프로퍼티

  • 멤버 변수 개수가 많을 경우 작성해야 할 내용을 줄이기 위한 프로퍼티
  • 멤버 변수를 선언할 필요가 없다
  • get, set의 기본형이 자동으로 작성된다

 

읽기 전용

  • 프로퍼티 내부에 get만 지정

쓰기 전용

  • 프로퍼티 내부에 set만 지정

 

 

컬렉션

: object 타입의 데이터를 담는 자료 구조

  • 배열과 함께 .NET 프레임워크가 제공하는 다양한 컬렉션 자료 구조
  • Array
  • ArrayList
  • Queue
  • Stack
  • Hashtable

 

ArrayList

  • 배열과 가장 흡사한 구조를 가지고 있는 컬렉션
  • 요소에 접근할 때는 첨자 연산자 []를 사용
  • 원하는 위치에 데이터를 추가, 삭제가 자유롭다
  • 배열과는 다르게 용량을 미리 지정할 필요가 없다
  • 데이터를 추가, 삭제 시 자도으로 용량이 늘어나고 줄어든다

 

Queue

  • 요소 추가와 삭제의 위치가 양 끝으로 나누어진 자료구조
  • FIFO: 먼저 들어온 데이터가 먼저 빠져나간다

 

Stack

  • 요소 추가와 삭제의 위치가 한쪽 끝에서만 이루어지는 자료구조
  • FILO: 먼저 들어온 데이터가 나중에 빠져나간다

 

Hashtable

  • 키와 값의 쌍으로 이루어진 데이터를 다룰 때 사용하는 자료구조
  • 요소에 접근하기 위해 object 타입의 데이터 사용
  • 해시테이블과 같은 데이터는 모든 요소를 탐색할 때 foreach 사용

 

Foreach

: Hashtable, Dictionary 등과 같이 기존의 for문을 활용해 순차적으로 데이터 탐색이 불가능할 때 사용하는 반복

 

 

일반화

: 특수한 개념으로부터 공통된 개념을 찾아 묶어 일반화 시키는 것

  • 일반화 하는 대상 = 데이터 형식(Type)

 

일반화의 장점

  • 일반화 대상 정의 시 < 와 > 사이에 일반화할 대상에 대해 작성 후 사용하기 때문에 데이터 파악이 용이
  • 박싱, 언박싱 과정에 소모되는 불필요한 연산을 하지 않아 연산 속도 빠름

 

데이터 형식이 일반화 된 메소드

  • 데이터 형식에 T(형식, Type) 기호 사용
  • 메소드 이름 뒤의 < 와 > 사이에 T를 넣고 메소드 호출 시 T 대신 사용할 데이터 형식을 입력하면 메소드 내부의 모든 T가 해당 데이터 형식으로 변경

 

데이터 형식이 일반화 된 클래스

  • 클래스 선언 시 클래스 이름 뒤의 < 와 > 사이에 T 정의
  • 클래스 내부에 T 형식으로 사용할 변수, 반환 값 등을 설정
  • 클래스 객체 생성 시 T 대신 사용할 데이터 형식을 입력하면 클래스 내부의 모든 T가 해당 데이터 형식으로 변경

 

List<T>

  • ArrayList 컬렉션의 일반화 버전
  • ArrayList와 다르게 하나의 컬렉션 변수에 하나의 데이터 형식만 담을 수 있다

 

Queue<T>

  • Queue컬렉션의 일반화 버전
  • Queue와 다르게 하나의 컬렉션 변수에 하나의 데이터 형식만 담을 수 있다

 

Stack<T>

  • Stack컬렉션의 일반화 버전
  • Stack와 다르게 하나의 컬렉션 변수에 하나의 데이터 형식만 담을 수 있다

 

Dictionary<TKey, TValue>

  • Hashtable컬렉션의 일반화 버전
  • Hashtable와 다르게 하나의 컬렉션 변수에 하나의 데이터 형식만 담을 수 있다
  • Key와 Value의 쌍으로 이루어진 데이터를 다룰 때 사용