3장_데이터 보관하기

CJB_ny·2022년 5월 2일
0

C#

목록 보기
2/9
post-thumbnail

데이터 형식

  • 값 형식

  • 복합 데이터 형식

값형식은 -> 기본 데이터 형식

복합 데이터 형식 -> 참조 형식

int x;	

		-----------------
		| x에 할당된 공간	|
		-----------------
        |               |
		-----------------
        |               |
		-----------------

메모리

C# 메모리

  • 스택 : 밑에서 부터 쌓이는 아무렇지 않게 정리되있는 책상

값 형식과 관련있는것 == Stack

참조 데이터형식과 관련있는것 == Heap

2진수 16진수

12의 음수 찾는법 -> 2의 보수법

이게 12임

-12를 찾으려면 0 0 0 0 1 1 0 0 반전 시킴

이래 나오는데 여기에 1더함

1더하면 자릿수 올라가니까 -12 나옴!


p54 -> 다시 진행

p66

object 형식

"돈은 여기 있다. 이제 물건을 넘겨"

물건은 칼, 총 뭐든 된다.

이게 object이다.

어떤 데이터 형식이든 마구 담을 수 있는데 이게

상속

의 효과이다.

C#에서 특별한 조취를 취한것임

박싱 언박싱

object는 참조 형식이라 Heap에 데이터를 할당함.

object a = 10;

하게되면 10 값을 박싱해서 힙에 올리고 a는 10 값을 참조를 하게됨(주소값만 가지고있음)

int b = (int)a;

를 하게되면 a에 참조되어있는 10이라는 값을 가지고와서 b에 할당함

b에 10이 할당되면 이것은 스택에 올라가게됨

a는 그대로 힙에 올라간 10이라는 값을 참조를 하는중임.

값 변환

마이너스값 옮길 형변환 할 때 uint maxValue랑 30차이남 ㅋㅋ..

이럴경우는

b = 0, d = 1 드감 반올림이 안되노? => ㅇㅇ 안된다.

변수 -> 문자열

그리고 이딴거 안됨.

문자열 - 숫자를

C#에서는 정수계열 형식, 부동소수점 형식 모두에게

Parse()

라는 메소드줌

이 메소드에 숫자로 변환할 문자열 넘겨주면 -> 숫자로 변환.

이따구로. ㅇㅋ?

문자열 -> 숫자. (오버라이드)

ToString() 으로 재정의

c는 정수인데 ToString해주어도 int그대로 임

상수와 열겨 형식

상수랑 열거 혈식은 변수와 달리

안에 담긴 데이터를 "절대" 못바꿈!

상수

"const" 키워드 사용

열거 "형식"

여러개의 상수를 정리한다.

"enum" 키워드

이렇게 초기화 해주고 아무런 값 안넣으면

이렇게 뜸 -> 컴파일러가 자동으로 할당한것임.

enum은 const의 실수를 방지하기 위해서....

형식

열거 "형식"이라 했는데

이게 int, float 와 같은 int 형식이라했었다.

그래서 int a = 어쩌구 이런데

enum도 열겨 "형식"이라

Test result = Test.YES;

Test라는 "형식"이 붙은 result라는 변수에

Test.YES를 할당함..

열거 형식 == enum 추가 설명

이렇게 할당하면 10, 11 ,12 이래감

이럴 경우는

10 11 12 50 51

Nullable 형식

데이터 형식? 변수이름;

Nullable은 "값 형식" 한해서 사용가능
참조 형식은 사용불가

이것도 "형식"이다.

Nullable 형식은 HasValue, Value 속성가짐

이딴식으로 사용가능

int c;
c.HasValue

이딴거는 안됨

또한

int d;

d = null; 이딴거 안됨

=> int "형식"은 비워둘 수 없는 null값을 가질 수 없는 데이터 형식이기 때문에!

문제

1번
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.IO;

namespace TestProject
{
public class TestClass
{
static void Main(string[] args)
{
Console.WriteLine("사각형 너비 : ");
string width = Console.ReadLine();

        Console.WriteLine("사각형 높이 : ");
        string height = Console.ReadLine();

        int a = 123;
        string b = a.ToString();

        int w = int.Parse(width);
        int h = int.Parse(height);

        Console.WriteLine($"넓이 : {w * h} ");
        Console.WriteLine(b);
    }

}

}
C#에서는 정수계열 형식, 부동소수점 형식 모두에게
Parse()
라는 메소드줌
이 메소드에 숫자로 변환할 문자열 넘겨주면 -> 숫자로 변환.

2번
int a = 7.3;
float b = 3.14;
double c = a * b;
char d = "abc";
string e = '한';
크기가 더 큰것 -> 크기가 더 작은 것 : 명시적 캐스팅 필요 (데이터가 손실 될 우려가 있어 형변환 필요)

작은 것 -> 크기가 더 작은 것 : 암시적 캐스팅 (데이터가 손실 될 우려가 적음)

int 말고 double

float b = 3.14f; || double b = 3.14;

double c = a * b; -> 같은 변수 타입이여야 가능

char d = "a"; 로 수정

string e = "한";

string e = '한'; // string형은 문자형을 데이터 타입으로 함 string e = "한"; 으로 쌍따옴표로 표현

3번
값형식은 Stack 메모리에 데이터가 쌓이고

참조 형식은 널부러진 책상같은 Heap 메모리에 데이터가 놓인다.

4번
박싱
object "형식"으로 Heap메모리에 변수의 값을 올려 Stack에서 바라보게함

object a = 123;
123이라는 값은 Heap에 올라가고

a라는 변수는 123(Heap)에 올라간 메모리 주소를 바라보고있게 한다.

이게 "박싱"

언박싱
참조 형식을 값 형식으로 변환

5번
var a = 2020;
var b = "double";
a = int형

b = string 형

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글