✔️ 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 대신 자료형을 명시할 것
- 관련 지침 : 링크
'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 |