이 영역을 누르면 첫 페이지로 이동
Coding Groot 블로그의 첫 페이지로 이동

Coding Groot

페이지 맨 위로 올라가기

Coding Groot

코딩 블로그

[C#] 구조체(struct)

  • 2019.07.19 22:26
  • Programming Language/C Sharp
글 작성자: Coding Groot

구조체의 정의

구조체는 관련된 변수들을 묶는 데 사용하는 값 형식입니다.

3차원 좌표 같은 것을 저장하기 위해서는 x, y, z 좌표를 float형으로 선언해서 저장하면 될 것입니다.
float x;, float y;, float z;
하지만, 이 변수들은 개별적으로 존재하며 단체적으로 관리하기 어렵습니다!
이것이 따로 변수 x, y, z로 돌아다니는 것보다 뭉쳐서 저장하면 관리하고 추적하기 더 편하겠죠!

그럴 때는 구조체를 많이 씁니다.

먼저 3차원 좌표를 표현하기 위한 구조체를 만들어 봅시다!

// 3차원을 표현하기 위해 만든 구조체
public struct Vector3 
{
    public float x;
    public float y;
    public float z;
}

구조체를 만들기 위해서는 struct라는 키워드를 사용합니다.
그리고 클래스처럼 생성자와 메서드도 넣을 수 있습니다.


하지만 몇 가지 주의해야 할 점이 있습니다!

1. 기본 생성자(매개 변수 없음)는 기본적으로 멤버 변수들을 초기화한다고 정의되어 있고 재정의 할 수 없습니다!

잘못된 구조체 예시

// 3차원을 표현하기 위해 만든 구조체
public struct Vector3 
{
    public float x;
    public float y;
    public float z;

    // 기본 생성자 재정의 불가능이기 때문에 오류!!!!
    public Vector3()
    {
        x = 1;
        y = 1;
        z = 1;
    }
}
2. 매개 변수가 있는 생성자는 무조건 모든 멤버 변수들을 초기화시켜줘야 합니다.

주의 사항을 지키고 다음의 코드처럼 문법적으로 옳은 구조체를 만들어봅시다!

옳은 구조체 예시

public struct Exam
{
    public string name;
    public int score;
    //주의// 구조체 생성자는 무조건 인자가 있어야 합니다.
    public Exam(string _name,int _score)
    {
        this.name = _name;
        this.score = _score;
    }
    //메서드
    public void Print()
    {
        Console.WriteLine("이름: " + name + ", 성적: " + score);
    }
}

구조체의 사용 1

위에서 보여드린 코드들을 통해 구조체를 정의하는 법에 대해 알아봤습니다.

이제 정의한 구조체를 어떻게 사용하는지 봅시다.

(위의 코드의) 구조체 Vector3와 Exam은 설계도면과 같습니다.
정수를 저장하기 위해 만든 설계도면 int, 실수를 저장하기 위해 만든 설계도면 float와 같은 것들입니다.
그렇기 때문에 우리가 정의한 Vector3와 Exam은 똑같이 int와 float를 사용하듯이 쓰면 됩니다.

int형 변수를 하나 만들기 위해서는

int a;

라고 씁니다.
그러면 Vector3형 변수를 하나 만들기 위해서는 똑같이

Vector3 myVector;

와 같이 선언하면 됩니다.
그리고 선언된 벡터의 멤버들에게 접근하고 싶으면 클래스와 동일한 방법인 . 으로 접근하면 됩니다.

구조체의 사용 예시

// 3차원을 표현하기 위해 만든 구조체
public struct Vector3 
{
    public float x;
    public float y;
    public float z;
}

// Exam 구조체
public struct Exam
{
    public string name;
    public int score;
    //주의// 구조체 생성자는 무조건 인자가 있어야 합니다.
    public Exam(string _name,int _score)
    {
        this.name = _name;
        this.score = _score;
    }
    //메서드
    public void Print()
    {
        Console.WriteLine("이름: " + name + ", 성적: " + score);
    }
}

static void Main(string[] args)
{
    //Vector3 사용
    Vector3 vector3;
    vector3.x = 1;
    vector3.y = 2.5f;
    vector3.z = 3;

    //Exam 사용
    Exam exam1; 
    exam1.name = "그루트";
    exam1.score = 98;
    exam1.Print();
}

구조체의 사용 2

구조체는 위의 Exam 구조체과 같이 생성자를 만들 수 있다고 했습니다.
구조체는 클래스처럼 초기화하기 쉽도록 생성자를 쓸 수 있습니다.
사용법도 클래스와 똑같습니다.

static void Main(string[] args)
{
    //new 사용 
    Exam exam2 = new Exam("고주형",90);
    exam2.Print();
}

여기까지 간단하게 구조체들의 사용법에 대해서 알아보았습니다.

구조체는 문법적으로 보면 클래스와 상당히 비슷하게 느껴질 수 있지만 아주 큰 차이점이 있습니다.
구조체는 값 형식(Value Type)이고 클래스는 참조 형(Reference Type)이라는 것이죠!!
다음에는 구조체와 클래스의 차이에 대해 자세하게 올리겠습니닷.


Icons made by Eucalyp from www.flaticon.com

반응형

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • Mac 사용자를 위한 C#으로 개발할 때 좋은 도구

    Mac 사용자를 위한 C#으로 개발할 때 좋은 도구

    2022.12.13
  • [C# 8.0] Nullable Reference Type이란?

    [C# 8.0] Nullable Reference Type이란?

    2020.02.29
  • [C#] Nullable (Value Type)

    [C#] Nullable (Value Type)

    2020.02.26
  • [C#] 배열 - 다차원 배열, 가변 배열

    [C#] 배열 - 다차원 배열, 가변 배열

    2019.07.17
다른 글 더 둘러보기

정보

Coding Groot 블로그의 첫 페이지로 이동

Coding Groot

  • Coding Groot의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록
  • 소개
  • 블로그 저작권

카테고리

  • 분류 전체보기 (188)
    • Git (23)
      • Git Tutorial (9)
      • Git Note (7)
      • Git Lecture (7)
    • Programming Language (1)
      • C (2)
      • C Sharp (5)
      • Java (4)
      • JavaScript (7)
      • Julia (5)
      • Python (4)
    • Programming (8)
      • Algorithm (2)
      • Compiler (5)
      • Data Structure (0)
      • Web (12)
      • NestJS (2)
    • DevOps, Infra (36)
      • Apple (6)
      • Cloud (15)
      • Database (1)
      • Network (4)
      • Linux (8)
    • Game Programming (11)
      • Unity Tutorial (5)
      • Unity Note (6)
    • Hardware Design (1)
      • Digital Circuit (1)
    • Note (20)
      • Coffee (2)
      • Retrospect (15)
      • Reading List (14)
    • Mathematics (1)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • tutorial
  • javascript
  • aws
  • Github
  • 서평
  • 한빛미디어
  • git
  • 회고
  • 전체 보기…

정보

Coding Groot의 Coding Groot

Coding Groot

Coding Groot

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기

나의 외부 링크

  • GitHub
  • SlideShare
  • 유니티 2020 수업
  • TIL Blog
  • 모도코

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. Copyright © Coding Groot.

티스토리툴바