컴퓨터프로그래밍/C#

C# - 구조체(Structure)

zelkova 2016. 12. 1. 12:44

<목차로 돌아가기>

 

 

구조체의 개념

 

C#에서 크기가 작거나 내부가 그렇게 복잡하지 않을 때, 즉 작고 단순한 메소드를 포함하고 있는 선, 컬러와 같은 그래픽 요소 등을 구조체로 정의합니다.

 

클래스는 힙에 생성되는 참조 타입이다.

구조체는 스택에 생성되는 값 타입이다.

 

구조체는 클래스보다 메모리 소모가 덜합니다.

 

 

구조체 선언형식

struct 구조체명

{

   // 멤버변수, 메소드,

}

 

위의 예제를 보시면, 클래스처럼 멤버변수를 가질수도 있고, 메소드 역시 가질 수 있습니다. 

 

구조체를 사용하여 몬스터를 정의해 보겠습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    struct Monster
    {
        public string name;
        public int hp;
        public int attack;
        public int defence;
        public int evade;

        public Monster(string name, int korean, int math, int 
                          society, int science)
        {
            this.name = name;
            this.hp = korean;
            this.attack = math;
            this.defence = society;
            this.evade = science;
        }
        public void Show()
        {
            Console.WriteLine("이름: ",name);
            Console.WriteLine("체력: " + hp + ", 공격력: " + attack 
                                  + ", 방어력:" + defence + ", 
                                  회피율: " + evade + "\n");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Monster orc = new Monster("오크", 100, 10, 4, 5);
            orc.Show();

            Monster student2;
            student2.name = "고블린";
            student2.hp = 80;
            student2.attack = 7;
            student2.defence = 2;
            student2.evade = 7;
            student2.Show();
        }
    }
}

 

구조체의 특징
ㆍ매개변수가 없는 생성자 소멸자는 선언할 수 없다.
ㆍ상속을 지원하지 않는다.
ㆍ디폴트생성자를 지원하지 않는다.
ㆍ구조체의 멤버를 초기화 할 수 없다.
ㆍ구조체 내에서 초기화를 하려면 생성자를 구현하여 생성자 내에서 해야함
 
operator를 활용한 구조체의 연산자 정의
    public struct Coord {
        public int x;
        public int y;

        public Coord(int _x, int _y) {
            x = _x;
            y = _y;
        }

        public static bool operator ==(Coord c1, Coord c2) {
            return c1.x == c2.x && c1.y == c2.y;
        }

        public static bool operator !=(Coord c1, Coord c2) {
            return !(c1==c2);
        }
    }

 

 

반응형

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

C# - 리스트(List)  (0) 2016.12.01
C# - 큐(Queue)  (0) 2016.12.01
C# - 제네릭  (0) 2016.11.29
C# - 인터페이스  (0) 2016.11.29
C# - 확장클래스, 분할메소드, 중첩클래스  (0) 2016.11.28