버퍼(Buffer)란?

 

데이터를 한 곳에서 다른 한곳으로 전송하는 동안

일시적으로 그 데이터를 보관하는 메모리의 영역

 

스트림(Stream)이란?

데이터가 순서대로 전송되도록 보장하는 데이터의 흐름

 

Console.ReadLine();

문자열을 입력 받고 입력을 종료하면 엔터키를 누르세요

 

Console.ReadKey();

문자 하나를 입력 받고 입력을 종료

 

Console.Read();

문자열을 입력받고 입력을 종료하려면 엔터키를 누르세요

 

string input = Console.ReadLine();

그리고 홍길동을 입력했다면

string input = "홍길동";

 

https://www.youtube.com/watch?v=9tB5QeChcO8&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=17

 

 

https://www.youtube.com/watch?v=9tB5QeChcO8&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=17

 

 

https://www.youtube.com/watch?v=9tB5QeChcO8&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=17

 

 

제일 앞에 있는 문자 하나를 정수 값으로 돌려준다. (유니코드 표 참고)

 

 

 

이제 a키를 입력해도 눌렀던 키가 바로 나오지 않는다.

 

출력값이 대소문자가 다른 이유에 대해

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

[C#] 비교 연산  (0) 2024.05.26
[C#] 산술 연산자  (0) 2024.05.26
[C#] 박싱과 언박싱  (0) 2024.05.25
[C#] 값형식과 참조형  (0) 2024.05.25
[C#] 문자열 보간  (0) 2024.05.25

Boxing이란?

 

값 형식을 object 형식으로 변환하는 프로세스

 

프로세스란?

 

프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 프로그램이다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다. 프로세스 관리 운영 체제의 중요한 부분이 되었다.

 

프로그램이란?

실행될 때 특정 작업(specific task)을 수행하는 일련의 명령어들의 모음(집합)이다.

 

 

 

값을 내부에 래핑하고 힙에 저장

 

값형식은 값이 직접 스택에 저장됨

 

값형식의 값을 boxing하면 래핑해서 힙에 저장

 

boxing은 암시적, 명시적 둘가능

 

unboxing은 명시적만 가능

 

https://www.youtube.com/watch?v=g5f8OvuEN3w&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=16
https://www.youtube.com/watch?v=g5f8OvuEN3w&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=16

 

 

이 그림을 이해하는 것이 중요하다

 

1. 정수형 변수 i는 123이라는 값을 스택 메모리에 저장

2. 객체 타입의 obj변수를 선언한다

3. i의 값을 박싱한다

그러면 i의 값이 주소를 갖게 된다

4. 그 주소값을 obj가 알게되어 스택에 주소가 저장 힙에는 값이 저장한다

 

단순 참조 할당보다 최대 20배 더 오래 걸릴 수 있다.

언박싱 할때 캐스팅 프로세스는 할당보다  4배 더 오래 걸릴 수 있다. -dosc.microsoft.com

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace Step17
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //박싱
            int i = 123;
            //object obj = i; //암시적 박싱
            object obj = (object)i; // 명시적 박싱
            // 명시적으로 박싱할 경우 캐스팅 중복 메시지를 볼 수 있다.

            //언박싱
            //int j = obj; // 언박싱은 명시적이어야 한다.
            int j = (int)obj; //명시적 언박싱

            Console.WriteLine(i);
            Console.WriteLine(obj);
            Console.WriteLine(j);

        }
    }
}

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

[C#] 산술 연산자  (0) 2024.05.26
[C#] 입력 받기  (0) 2024.05.25
[C#] 값형식과 참조형  (0) 2024.05.25
[C#] 문자열 보간  (0) 2024.05.25
[C#] 형식 변환  (0) 2024.05.25

변수란?

값이 저장된 메모리 주소

 

 

프로그램이 실행되면 크게 2개의 메모리 영역을 사용

 

 

첫 번째 메모리 영역의 이름 : 스택 메모리

 

스택은 가장 나중에 넣은 데이터를 먼저 꺼내는(Last-In-First-Out) 선형적 구조

 

 

두번째는 메모리 영역의 이름 : 힙 메모리

 

힙은 계층적 구조이고, 임의의 순서대로 저장됨

 

변수가 선언되면 스택 메모리에 공간이 할당됨

 

변수에 값을 할당한다 == 메모리에 값을 저장한다

 

 

 

 

스택에 값이 직접 저장되는 형식 값형식

 

값 형식

int, float, char, bool, enum

스택에 값이 직접 저장된다

 

 

 

힙에 값이 저장되는 형식을 참조형식

참조형식은 스택과 힙 메모리 모두 사용

 

참조 형식

string, object, array, 메서드

 

힙에는 값을 스택에는 값의 주소 저장

값을 참조한다해서 참조 형식이라 부른다

 

값은 힙메모리에, 값의 주소는 스택에 저장됨

https://www.youtube.com/watch?v=ywLrndaAPq4&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=15

 

null 키워드는 개체를 참조하지 않는 null 참조를 나타내는 리터럴이다

 

즉, null은 아무것도참조하지 않는 값

 

null은 참조 형식 변수의 기본값이다

 

값은 변수에 할당 가능

 

string 은 참조 형식

그러므로 string 변수에 null 값 할당 가능

 

string name = null;

 

https://www.youtube.com/watch?v=ywLrndaAPq4&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=15

 

값 형식은 스택에 참조 형식은 힙에 값이 저장된다.

 

리터럴이란?

 

소스 코드의 고정된 값

https://learn.microsoft.com/ko-kr/dotnet/api/system.text.ascii?view=net-8.0

 

Ascii 클래스 (System.Text)

System.Text 네임스페이스의 System.Text.Ascii에 대해 자세히 알아보세요.

learn.microsoft.com

 

 

 

그렇다면 int a = null; 은 안되고
string b = null; 이 되는 이유는??


참조 형식의 변수는 해당 객체가 아니라 객체의 주소를 저장한다.

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

[C#] 입력 받기  (0) 2024.05.25
[C#] 박싱과 언박싱  (0) 2024.05.25
[C#] 문자열 보간  (0) 2024.05.25
[C#] 형식 변환  (0) 2024.05.25
[C#] 열거형식  (0) 2024.05.25

+ Recent posts