C# Class5

Chan·2021년 12월 3일
0

C#

목록 보기
7/10

구조체

  • 클래스의 사촌
  • 구조체의 필드를 public으로 선언
  • 클래스는 실세계의 객체를 추상화함
  • 구조체는 데이터를 담기 위한 자료구조 (굳이 은닉할 필요x)
특징클래스구조체
키워드classstruct
형식참조 형식(힙에 할당)값 형식(스택에 할당)
복사얕은 복사깊은 복사
인스턴스 생성new 연산자와 생성자 필요선언만으로 생성
생성자매개변수 없는 생성자 선언 가능매개변수 없는 생성자 선언 불가능
상속가능값 형식이므로 상속 불가능
  • 구조체 인스턴스는 스택에 할당되고 인스턴스가 선언된 블록이 끝나는 지점에서 메모리에서 사라짐
  • 구조체의 각 필드는 CLR이 기본값으로 초기화
  • 구조체는 모든 필드와 프로퍼티의 값 변경 불가능 구조체로 선언 할 수 있음, 이에 반해 클래스는 변경불가능을 선언할 수 없음
  • readonly struct 구조체 이름 {}



튜플

  • 튜플도 여러 필드를 담을 수 있는 구조체
  • 튜플은 형식 이름이 없음
  • 튜플은 구조체이므로 값 형식
  • 응용프로그램 전체에서 사용할 형식을 선언할 때가 아닌, 즉석에서 사용할 복합 데이터 형식을 선언할 때 적합
  • 예시 코드
using System;

namespace Tuple
{
    class MainApp
    {
        static void Main(string[] args)
        {
            // 명명되지 않은 튜플
            var a = ("슈퍼맨", 9999);
            Console.WriteLine($"{a.Item1}, {a.Item2}");
            
            // 명명된 튜플
            var b = (Name: "박상현", Age: 17);
            Console.WriteLine($"{b.Name}, {b.Age}");

            // 분해
            var (name, age) = b; // (var name, var age) = b;
            Console.WriteLine($"{name}, {age}");

            // 분해2
            var (name2, age2) = ("박문수", 34);
            Console.WriteLine($"{name2}, {age2}");

            // 명명된 튜플 = 명명되지 않은 튜플
            b = a; 
            Console.WriteLine($"{b.Name}, {b.Age}");

        }
    }
}
profile
Backend Web Developer

0개의 댓글

관련 채용 정보