티스토리 뷰

C#

5. 구조체

루체도 2020. 1. 29. 22:14

C#의 복합 데이터 형식에는 클래스 말고도 구조체라는 것이 있다.

구조체는 클래스의 사촌지간쯤 된다고 생각하면 편하다. 

구조체도 필드와 메소드를 가질 수 있고 상당 부분이 비슷하다.

다음과 같이 struct 키워드를 이용해 선언한다.

struct 구조체명
{

}
////
struct ExampleStruct
{
  public int Field1;
  public int Field2;
}

구조체는 데이터를 담기 위한 자료 구조로 사용된다.

따라서 은닉성은 고려하지 않고 편의를 위해 필드를 public으로 선언해서 사용하는 경우가 많다.

다음 표는 구조체와 클래스의 차이점이다.

특징 클래스 구조체
키워드 class struct
형식 참조 형식 값 형식
복사 얕은 복사 깊은 복사
인스턴스 생성 new 연산자와 생성자 필요 선언만으로도 생성
생성자 매개 변수 없어도 생성자 선언 가능 매개변수 없으면 생성자 선언 불가
상속 가능 모든 구조체는 System.ValueType을 직접 상속받고 있다.

가장 큰 차이점은 클래스는 참조 형식이고 구조체는 값 형식인 것이다.

구조체의 인스턴스느 스택에 할당되고 블록이 끝나는 지점에서 메모리에서 사라진다.

따라서 가비지 컬렉터를 귀찮게 하지도 않고 즉시 메모리에서 제거가 되서 성능의 이점을 가진다.

예를 들면 사용이 끝났을 때 해제되어야 할 인스턴스가 클래스 형태면 해당 블록이 끝난 이후에도 메모리에

계속 남아있다가 가비지 컬렉터가 처리해야 되서 성능에 저하가 발생한다. 그러나 이것을 구조체로 구현할 경우에는

알아서 메모리에서 제거가 된다.

 

구조체의 깊은 복사의 예

ExampleStruct st;
st.Field1 = 1;
st.Field2 = 3;

ExampleStruct st2;
st2 = st1;
st.Field1 = 4;
//st의 Field1은 1이고 st2의 Field1은 4가 된다.

'C#' 카테고리의 다른 글

7. 프로퍼티  (0) 2020.02.03
6. 인터페이스와 추상클래스  (0) 2020.01.29
4. 클래스(4) - 오버라이딩  (0) 2020.01.29
4. 클래스(3) - 상속, is와 as  (0) 2020.01.28
4. 클래스(2) - 정적필드, this 키워드, 접근 한정자  (0) 2020.01.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함