본문 바로가기
C#, MONO

c#의 구조체

by gigasound 2021. 10. 8.


C#의 구조체(structure)와 클래스(class)

c언어에서 많이 활용되는 구조체는 c#에서도 사용이 가능합니다. 형태상으로 보면 구조체와 클래스는 다르지 않습니다. 다만 구조체는 객체 지향성 특성이 없기 때문에 상속 권한이 없습니다. 그래도 아주 단순한 형태로 데이터 묶음을 만들어서 함수의 파라미터로 사용할 수 있어 편리합니다.


구조체의 구조

c#에서 구조체는 멤버를 초기화하는 함수, 멤버를 내보내거나 할당하는 함수 등을 함께 포함할 수 있습니다. 물론 연산도 가능합니다. 아래의 예는 실제 신호처리의 다이내믹 처리를 위해 사용되는 파라미터를 구초체 묶으로 만들어 사용하는 내용입니다.

이 중에서 Data_Set()는 구조체의 모는 멤버를 할당해 줍니다. 기타 함수들은 멤버 값을 반환해 줍니다. 

public struct Comp_Struct {
        private float thd;
        private int ratio;
        private float rms;
        private float hold;
        private float decay;
        private float postgain;
        private BYPASS_STATE bypass;
        
        public void Data_Set(float Thd,int Ratio,float RMS,float Hold,float Decay,float Postgain,BYPASS_STATE bypass) {
            this.thd = Thd; this.ratio = Ratio; this.rms = RMS;
            this.hold = Hold; this.decay = Decay; this.postgain = Postgain;
            this.bypass = BYPASS_STATE.off;
        }
        
        public float Threshold_Get() { return this.thd; }
        public int Ratio_Get() { return this.ratio; }
        public float RMS_Get() { return this.rms; }
        public float Hold_Get() { return this.hold; }
        public float Decay_Get() { return this.decay; }
        public float Postgain_Get() { return this.postgain; }
        public BYPASS_STATE Bypass_Get() { return this.bypass; }
        public void Threshold_Set(float Thd) {this.thd=Thd; }
        public void Ratio_Set(int Ratio) { this.ratio=Ratio; }
        public void RMS_Set(float RMS) {this.rms=RMS; }
        public void Hold_Set(float Hold) { this.hold=Hold; }
        public void Decay_Set(float Decay) { this.decay=Decay; }
        public void Postgain_Set(float Postgain) {this.postgain=Postgain; }
        public void Bypass_Set(BYPASS_STATE state) { this.bypass = state; }
    };

내용상으로 보면 클래스와 다르지 않습니다. 그러나 구조체는 스택 메모리를 사용하기 때문에 힙 메모리를 사용하는 크래스보다 동작 속도를 빠르게 만들 수 있습니다. 


광고좀 꾹 눌러주시면 고맙겠습니다. 


위의 내용을 참조용으로만 사용해주세요. 무단 도용이나 무단 복제는 불허합니다.

기타 문의 사항은 gigasound@naver.com에 남겨 주시면 고맙겠습니다.

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

c# 프로세스 동작시간 측정  (0) 2021.11.12
c# 다항식 연산  (0) 2021.10.08
c#의 배열과 리스트  (0) 2021.10.06
c#의 Enum 멤버의 정보 추출  (0) 2021.10.06
테이블 컬럼 조작  (0) 2021.08.21