[C#] 값 형식 (Value types) & 참조 형식 (Reference types)

2024. 10. 25. 16:29·C#
728x90
728x90

✔️ Java와 비교하기

  - 값 형식 ▶ 기본 자료형 (https://young0105.tistory.com/7)

  - 참조 형식 ▶ 참조 자료형 (https://young0105.tistory.com/12)

➡️ 사실상 동일한 개념

 

 


값 형식 (Value Type)

  - 스택 메모리 영역에 저장됨

  - 변수에 실제 데이터 값이 저장됨

     → 변수를 다른 변수에 할당할 때, 값 자체가 복사됨

  - 기본적으로 null 값을 가질 수 없음

     → ?를 붙여서 nullable 형태로 만들 수 있음  ex) int?, float?

  - Java와 달리, 부호 없는 자료형이 존재함 (0, 양수만 가능)

     : unshort, uint, ulong

 

구조체 형식 (struct 키워드)

  - 데이터와 관련 기능을 캡슐화할 수 있는 값 형식

  - 값 형식에 속하기 때문에, 스택 메모리 영역에 할당됨 (↔ 클래스는 힙 메모리)

  - 다른 구조체/클래스에서 상속을 받을 수 없음

  - 구조체는 인터페이스를 구현할 수 있음

  - 유용한 상황

     · 작은 데이터 집합을 나타낼 때

     · 값이 자주 변경되지 않을 때

// 구조체 정의
public struct Point
{
    public int X; // X 좌표
    public int Y; // Y 좌표

    // 구조체의 메서드
    public void Display()
    {
        Console.WriteLine($"Point({X}, {Y})");
    }
}

// 구조체 사용 예제
class Program
{
    static void Main(string[] args)
    {
        // 구조체 인스턴스 생성
        Point point = new Point();
        point.X = 10;
        point.Y = 20;

        // 메서드 호출
        point.Display(); // 출력: Point(10, 20)
    }
}

 

참조 형식 (Reference Type)

  - 힙 메모리 영역에 실제 데이터를 저장하고, 스택 메모리 영역에는 그 데이터의 메모리 주소 값을을 저장함

  - 동일한 객체를 가리킬 수 있음 (얕은 복사)

     → 하나의 변수를 변경하면 다른 변수에도 영향을 미침

  - 기본적으로 null 값을 가질 수 있음

 

 


Java에 없는 개념들

Nullable Value Types

  - 자료형 뒤에 ?를 붙여 null 값을 가질 수 있는 형식으로 변경함

     → 원래 null 값을 가질 수 없는 '값 형식'도 null를 가질 수 있게 됨 (Java에서는 기본 자료형은 null을 가질 수 없음)

 

var 키워드 (암시적 형식)

var hello = "Hello";

  - 지역 변수를 선언할 때, 자료형을 명시하지 않고 컴파일러가 자료형을 유추할 수 있도록 하는 키워드

  - 모든 상황에서 var를 사용하더라도 컴파일러는 추론할 수 있기 때문에 컴파일 에러가 발생하지 않음

     → 그러나, 가독성을 위해 타입이 명확하지 않을 때에는 var 대신 자료형을 명시할 것

  - 관련 지침 : 링크 

 

 

 

320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

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

[C#/Dapper] INSERT · UPDATE · DELETE 쿼리 / 프로시저 실행  (1) 2024.11.14
[C#/Dapper] SELECT 쿼리 / 프로시저 실행  (5) 2024.11.13
[C#/dotnet] 라우팅 (Routing)  (4) 2024.10.25
[C#/dotnet] 서버 컨트롤  (0) 2024.10.24
[C#/dotnet] View State  (1) 2024.10.24
'C#' 카테고리의 다른 글
  • [C#/Dapper] INSERT · UPDATE · DELETE 쿼리 / 프로시저 실행
  • [C#/Dapper] SELECT 쿼리 / 프로시저 실행
  • [C#/dotnet] 라우팅 (Routing)
  • [C#/dotnet] 서버 컨트롤
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (384) N
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • etc. (13)
      • Error Note (16) N
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    http
    오블완
    tailwindcss
    zapier
    typeScript
    CSS
    SWAGGER
    SpringBoot
    jQuery
    C#
    Android
    Hotkeys
    js
    cs
    SQL
    git
    HTML
    Swing
    개발일지
    jsp
    Wordpress
    errorNote
    SEO
    vuejs
    php
    Codeigniter
    면접
    티스토리챌린지
    java
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[C#] 값 형식 (Value types) & 참조 형식 (Reference types)
상단으로

티스토리툴바