728x90
반응형

변수(Variable)

변수란 데이터를 저장할 수 있는 일정 크기의 저장 공간을 의미한다.

하나의 변수에 하나의 데이터 값을 저장하고 변경할 수 있다.

 

 

  • 변수 선언

변수를 선언하면 컴파일러에게 변수에 필요한 메모리 공간을 할당 받는다.

 

  • 대입 연산자 (=)

대입 연산자를 사용하여 우측의 값(데이터)을 좌측의 변수로 저장한다..

int var = 10; // 'var'이라는 변수에 데이터 '10'을 저장한다.

 

 

자료형(Data Type)

자료형은 데이터의 종류에 따라 데이터가 저장될 공간의 크기와 저장형식을 정의한다.

값 형식(Value Type), 참조 형식(Reference Type)으로 나누어져있다.

값 형식과 참조 형식의 차이는 메모리에 저장하는 방식에 있다.

 

  • 값 형식(Value Type) : 데이터를 Stack Memory 영역에 저장 

값 형식은 변수가 값을 직접 담는 데이터 형식을 말한다. 값 형식의 변수는 모두 Stack에 저장되고, code block ("{}")안에서 생성된 모든 값 형식 변수들은 중괄호 "}"를 만나면 메모리에서 자동으로 제거된다.

  1. 단순 형식
  2. 열거형
  3. 구조체
  4. Nullable 값 형식 

Stack이라는 메모리 영역에 값 7이 저장된다.

Void TestValueType()
{
    int number = 7;
}

 

  • 참조 형식(Reference Type) : 데이터를 Heap Memory 영역에 저장

참조 형식은 변수가 값 대신에 값이 저장되어 있는 주소(참조)를 담는 데이터 형식을 말한다. Heap 영역은 Heap 영역에 저장되어 있는 데이터를 스스로 제거할 수 없다. 이러한 부분을 해결하고자 가비지 컬렉터라는 것이 존재하고 가비지 컬렉터는 프로그램 뒤에 숨어 동작한다. Heap에 더 이상 사용하지 않는 객체가 있으면 그 객체를 쓰레기로 간주하고 수거하는 기능을 한다.

  1. 클래스
  2. 인터페이스
  3. 배열
  4. 대리자

참조 형식은 heap이라는 다른 메모리 영역에 할당된다.

Numbers라는 배열을 구성하는 10개의 정수에 필요한 공간이 heap에 할당된다.

int [] Numbers = new int[10];

 

  • Heap, Stack 영역 이란?

[Stack]

메모리의 stack영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.

stack영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.

stack영역은 메모리의 높은 주소에서 낮은 주소 방향으로 할당된다.

 

[Heap]

Heap영역은 사용에 의해 메모리 공간이 동적으로 할당되고 해제된다.

사용자가 직접 관리하는 메모리 영역이다.

메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.

 

Stack 영역의 경우, Code block이 끝나는 시점에 값 형식의 변수들은 모두 메모리에서 제거된다. 

여기서 Code block이 끝나는 시점과 상관없이 데이터를 계속 유지하고 싶을때 Heap 영역을 사용한다.

Heap 영역에 데이터를 올려놓으면 Code block의 종료와는 상관없이 데이터 값을 계속 유지할 수 있다.

데이터를 사용하지않는 경우가 되었을때 가비지 컬렉터가 데이터값을 쓰레기로 간주하고 수거한다.

 

 

상수(Constants)

상수는 데이터를 저장할 수 있는 일정 크기의 저장 공간을 말한다.

한 번 저장된 데이터는 변경할 수 없다는 것이 변수와의 가장 큰 차이점이다.

선언과 동시에 초기화를 같이 해주어야 한다.

 

  • 정수 값을 저장하는 상수

정수 값을 저장하는 상수를 사용하고 싶을 때 열거 형식을 사용

 

  • 정수 이외의 값을 저장하는 상수

정수 이외의 값을 저장하는 상수를 사용하고 싶을 때 static class를 만들고 그 안에 상수를 선언하여 그룹화.

public static class Constants
{
    public const double PI = 3.141592;
    public const int HEIGHT = 10;
    public const int WIDTH = 10;
}

 

  • Constants 문법
const 자료형 상수이름 = 값;

 

  • 상수의 선언 및 데이터 저장
const double PI = 3.141592;

 

 

열거형(Enum)

열거형은 같은 범주에 속하는 여러 개의 상수를 선언할 때 사용한다.

 

상속의 경우. 사용자가 직접 값을 입력하기 때문에 값 입력에서 실수가 일어날 수 있다.

열거형의 경우 이러한 실수를 막는데 도움이 된다. 열거형은 상수와 달리 값을 입력하지 않아도 자동으로 값(0~1,2,3...이 대입된다. 만약 다른 값을 저장하고 싶다면 값을 직접 추가 한다. 

열겨형은 각 요소들의 값이 어떤 값을 갖느냐는 의미가 없고. 각 요소가 서로 중복되지 않는 값을 가지고 있다는 데에 의미가 있다.

 

  • 열거형 문법
enum 열겨형이름 {상수1, 상수2, ...}

 

  • 열거형 선언
enum Number {one, two, ...}

 

 

Nullable 형식

일반적으로 값 형식(Value Type)은 null 값을 가질 수 없다. 코드를 작성하다 보면 어떤 값도 가지지 않는 null 상태인 변수가 필요할 때가 있다. 이런 경우에 변수에게 할당된 메모리 공간을 비워둘 수 있도록 Nullable 형식을 사용하면 된다. Nullable의 뜻은 비어있는 상태가 될 수 있는 형식 이라는 뜻이다. 그리고 값 형식(Value Type)에서만 사용할 수 있다.

 

 

 

  • Nullable 형식 문법

자료형(Data Tpye) 옆에 "?"를 붙여준다.

DataType? 변수명;

 

  • Nullable 형식의 변수 선언
int? number = null;

 

Nullable 속성

  • HasValue 속성

해당 변수에 값이 있으면 true를 반환하고, 값이 없으면 false를 반환하는 속성이다.

만약 false를 반환했다면 그 변수는 비어 있다는 뜻이다.

 

  • Value 속성

해당 변수의 값을 가져오는 속성이다.

만약 HasValue가 false인 변수에 Value 속성을 이용하여 값을 꺼내려고 한다면 예외를 발생한다.

 

 

Var

var은 Data type을 사용자가 아닌 컴파일러가 자동으로 결정해주는 키워드이다.

int와 double 같은 명시적 형식 대신에 var를 사용하여 변수를 선언하면 컴파일러가 자동으로 해당 변수의 형식을 지정해준다. 단 var 키워드를 이용해서 변수를 선언하려면 반드시 선언과 동시에 초기화를 해줘야한다. var 키워드는 지역 변수로만 사용할 수 있다.

 

ex) Var 키워드를 이용한 변수 선언

 

  • var 키워드를 사용한 문법
var 변수명 = 값

 

  • var 키워드를 사용하여 변수 선언과 초기화
var number = 10;

 

https://blog.naver.com/PostView.naver?blogId=myjet1490&logNo=221369557011&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView
728x90
반응형

+ Recent posts