변수란?

값이 저장된 메모리 주소

 

 

프로그램이 실행되면 크게 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

문자열 보간이란?

 

값을 포함하는 문자열 출력

 

Conosole.Write는 값을 출력만 한다

Console.WriteLine은 값을 출력하고 줄바꿈

 

방법 1

 

https://www.youtube.com/watch?v=PPjhCXCmtIs&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=14

 

$ 와 " 사이에 공백이 있으면 안된다.

{ } 즉 중괄호는 쌍으로 있어야 한다.

 

방법 2

https://www.youtube.com/watch?v=PPjhCXCmtIs&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=14

 

 

 

 

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

namespace Step15
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //홍길동님 안녕하세요 출력
            //Console.WriteLine("홍길동님 안녕하세요");

            //이름이 변경될수 있으므로
            //"홍길동" 문자열 값을 변수에 저장
            //문자열 변수 name 선언
            string name = "홍길동"; // 변수 정의 및 값 할당
            //Console.WriteLine(name);

            //Write와 WriteLine의 차이
            Console.WriteLine(name);
            Console.Write(name);

            name = "임꺽정";
            Console.Write(name);
            Console.WriteLine(name);

            Console.WriteLine($"{name}님 안녕하세요");
            Console.WriteLine("{0}님 안녕하세요", name);

            //여러 변수의 있는 값도 가능
            //출력문 하나로 "33세 임꺽정님 안녕하세요." 출력하기
            //나이는 변할 수 있으므로 변수에 할당
            //정수형 age 변수 선언
            int age = 33;
            Console.WriteLine($"{age}세 {name}님 안녕하세요.");
            Console.WriteLine("{0}세 {1}님 안녕하세요.", age, name);
            //인덱스는 0부터 시작 1씩 증가, {}는 쌍으로 있어야 한다
            //값(변수) 목록은 ,(콤마)로 구분한다.
        }

    }
}

'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

변수가 선언된 후에는 다시 선언되거나 다른 형식의 값이 할당될 수 없지만

 

형식이 변수의 형식으로 암시적으로 변환될 수 있는 경우는 예외

 

예를들어 string은 int로 암시적으로 변환될수 없다

 

int i;

i = "Hello";

 

암시적 변환 : 

변환은 항상 성공하고 특수 구문이 필요하지 않다

 

명시적 변환

명시적 변환에는 캐스트 식이 필요

https://www.youtube.com/watch?v=0GgMLPjxzFk&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=14

 

 

C#에는 기본 데이터 형식을 다른 형식으로 변환할 수 있는 기능이 있다.

 

https://www.youtube.com/watch?v=0GgMLPjxzFk&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=14

https://learn.microsoft.com/ko-kr/dotnet/api/system.convert.tosingle?view=net-8.0\

 

 

 

Convert.ToSingle 메서드 (System)

지정된 값을 단정밀도 부동 소수점 숫자로 변환합니다.

learn.microsoft.com

 

 

https://youtube.com/watch?v=0GgMLPjxzFk&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=14

 

 

 

https://www.youtube.com/watch?v=0GgMLPjxzFk&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=14

 

 

 

아스키 코드란?

128개의 부호로 영문 키보드에서 사용 가능한 모든 부호를 2바이트 이내로 사용 가능하게 한 체계

https://m.blog.naver.com/ycpiglet/222146759413

 

ASCII(아스키 코드)란 무엇인가? (유니코드, 패리티 검사 등)

ASCII란? 아스키(ASCII)란, 미국 국립 표준 협회(ANSI, American National Standards In...

blog.naver.com

 

 

 

유니코드란?

 

전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다를 수 있도록 설계된 산업 표준

 

 

 

정수를 문자열로 반환하는 것에 대해 같으나

찾아보니 변수나 객체가  null인 경우 처리하는 것이 다르다.

 

12hong인 문자열을 정수형으로 바꿔보려 했지만 오류가 난다.

 

 

 

그래서 문득 들은 생각이 각 알파벳마다 아스키코드로 지정해 놓은 숫자가 있는데

왜 안되는가? 라는 생각이 들었다.

찾아보니..

  1. Convert.ToInt32() 메서드는 문자열을 정수로 변환할 때 숫자로 시작하는 부분까지만 처리하고 그 뒤의 문자는 무시합니다. 따라서 "12"까지만 인식하고 "h"부터는 인식하지 못합니다.

라는 결과를 얻게 되었다.

 

명시적 변환

 

암시적 변환

 

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

[C#] 값형식과 참조형  (0) 2024.05.25
[C#] 문자열 보간  (0) 2024.05.25
[C#] 열거형식  (0) 2024.05.25
[C#] 상수  (0) 2024.05.25
[C#] Var 키워드  (0) 2024.05.25

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/enum

 

열거형 형식 - C# reference

선택 또는 선택의 조합을 나타내는 C# 열거형에 대해 알아봅니다

learn.microsoft.com

 

class 키워드 대신 enum 키워드와 함께 정의할 수 있다.

enum과 final, abstract 키워드를 함께 사용하면 컴파일 에러가 난다.

enum은 암시적으로 final을 의미하기 때문이고, enum은 상속받거나 상속 할 수 없기 때문이다.

https://velog.io/@maigumi/Enum

 

열거형 Enum

자바 enum

velog.io

 

 

값에는 종류가 있고

종류에 따라 사용하는 키워드가 다름

 

미리 정의되어 있는 키워드 이외

사용자가 직접 타입을 만들 수도 있다.

 

상수들을 묶어 열거형이라는 이름으로

사용자 정의 타입을 만들어 보자

 

열거형은 상수들의 집합

 

열거형을 정의하려면 enum 키워드를 정의하고

열거형 멤버의 이름을 지정

 

https://www.youtube.com/watch?v=vixfkrzmK3E&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=12

 

기본적으로 열거형 멤버의 연결된 상수 값은 int형식

 

0으로 시작하고 정의된 텍스트 순서에 따라 1씩 증가

 

Spring <------------ 0

Summer <--------- 1 

등등..

 

연결된 상수 값을 명시적으로 지정할 수 있다.

 

https://www.youtube.com/watch?v=vixfkrzmK3E&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=12

 

열거 형식을 정의한다는 것은

새로운 타입 정의를 의미

 

변수 정의와 헷갈리면 안된다.

 

열거 형식 정의는 class 내부 또는

namespace내부에서 하자

 

열거형식 변수 정의

Season season;

 

열거형식 변수에 값 할당

season = Season.Spring;

 

열거 형식 변수값 출력

Console.WriteLine(season);

 

열거형 변수의 값은 할당된 열거형 멤버이름으로 출력된다.

 

namespace Step13
{
    internal class Program
    {
        enum Season //의미 있는 이름이면 좋다. => 열거형 Season 정의
        {
            Spring, // => Season.Spring = 0
            Summer, // => Season.Summer = 1
            Autumn, // 즉 1씩 증가하는데 명시적으로 값을 할당 가능
            Winter = 10 // 맨뒤에 ;(세미클론)을 붙이면 오류
        }
        static void Main(string[] args)
        {
            //enum Season 변수 선언
            Season season;
            //변수 명 앞에는 타입
            //열거형 Season 타입의 변수 season

            season = Season.Spring; //.을 찍으면 정의한 상수 맴버들이 나온다.
            season = Season.Winter; // 방향키를 통해 맴버들을 선택 가능
            Console.WriteLine(season); // Winter => 출력 값은 정수 값이 아니라 상수 맴버 이름

            //변수의 메모리 장소에 새로운 값이 할당되었기 때문에 출력이 바뀜
            

        }
    }
}

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

[C#] 문자열 보간  (0) 2024.05.25
[C#] 형식 변환  (0) 2024.05.25
[C#] 상수  (0) 2024.05.25
[C#] Var 키워드  (0) 2024.05.25
[C#] 오류와 디버깅  (0) 2024.05.24

상수란(const)?

 

변하지 않는 값

 

 

언제든지 변경될 수 있는 정보를 나타낼 때는 상수를 만들지 말자

특히 서비스의 가격, 제품 버전 번호 또는 브랜드 이름을 저장하지 말자

 왜냐하면 시간이 지남에 따라 변경될 수 있다.

 

 

상수는 const 키워드로 선언

 

ex) const int hp = 10;

var과 마찬가지로 선언만 할수 없다

ex) const int maxHp;

 

선언과 값 할당을 동시에 하자

 

초기화 : 선언 후 값을 할당

 

const는 생성과 동시에 값 할당 해야

 

올바른 예

 

 

namespace Step12
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //int maxHp = 100;
            //maxHp = 120;
            //Console.WriteLine(maxHp);

            const int MaxHp = 100;
            Console.WriteLine(MaxHp);

            //상수는 선언과 동시에 할당
            const string Monday = "Monday";
            Console.WriteLine(Monday);

            const float PI = 3.14f;
            Console.WriteLine(PI);
        }
    }
}

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

[C#] 형식 변환  (0) 2024.05.25
[C#] 열거형식  (0) 2024.05.25
[C#] Var 키워드  (0) 2024.05.25
[C#] 오류와 디버깅  (0) 2024.05.24
[C#] 컴파일과 빌드  (0) 2024.05.24

 

변수 선언

형식을 직접 선언한 것처럼

컴파일러가 형식을 결정한다.

 

컴파일러란????????????

 

 

https://eunjinii.tistory.com/4

 

 

변수 선언시 변수명 앞에

변수 타입을 명시 해줘야하지만

 

var 키워드를 사용하면

 

변수에 할당되는 값에 따라

컴파일러가 형식을 결정

 

ex)

var hp = 10;

var damage = 12.3f;

var name = "홍길동";

var obj = new object();

 

var 키워드 사용 시 주의 사항

 

※다음과 같이 정의만 해서는 안된다.

 

ex) var armor;

반드시 값을 할당해 줘야 한다.

 

object obj = new object();
Console.WriteLine(obj); //System.Object ??

 

 

지금 정리할 내용은 아니지만 궁금하여 검색을 해보았다.



 

 

var로 입력후 변수명에 커서를 가져다 대면 변수의 타입을 볼 수 있다.

 

 

namespace Step11
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var hp = 10;
            Console.WriteLine(hp);

            var damage = 12.3f;
            Console.WriteLine(damage);

            var name = "홍길동";
            Console.WriteLine(name);

            var word = 'A';
            Console.WriteLine(word);

            var isTest = true;
            Console.WriteLine(isTest);

            var obj = new object();
            Console.WriteLine(obj);
        }
    }
}

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

[C#] 열거형식  (0) 2024.05.25
[C#] 상수  (0) 2024.05.25
[C#] 오류와 디버깅  (0) 2024.05.24
[C#] 컴파일과 빌드  (0) 2024.05.24
[C#] 주석  (0) 2024.05.24

오류 또는 에러 또는 버그

 

프로그램이 얘기치 않게 동작하게 만드는 프로그램안의 실수 또는 결함

 

디버그, 디버깅이란?

 

프로그램에서 버그를 제거하는 과정

 

 

 

 

오류의 종류

 

Syntax Error : 구문 오류

 

잘못된 문법의 사용으로 발생하는 오류

구문 오류는 컴파일 과정에서 검사 되기 때문에

오류를 수정하지 않으면 실행 불가

; 빠짐

 

} 빠짐

 

 

 

 

Logical Error : 논리 오류

 

프로그램이 부정확하게 동작하게 하지만

비정상적으로 종료 또는 충돌시키지는 않는 버그

계산식 안에 ( ) 가 생략됨

 

 

 

 

 

Run-time Error : 실행 오류

 

구문 오류도 논리 오류도 아니지만

프로그램이 실행 시 오류가 생겨 종료 됨

(즉, 프로그램이 비정상적인 동작 또는 종료)

ex) 0으로 나누기, 없는 파일 접근 하기 등

 

오류의 내용과 해당 줄을 알려줌

 

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

[C#] 상수  (0) 2024.05.25
[C#] Var 키워드  (0) 2024.05.25
[C#] 컴파일과 빌드  (0) 2024.05.24
[C#] 주석  (0) 2024.05.24
[C#] 데이터 타입 bool, char, object  (0) 2024.05.24

컴퓨터는 0과 1로만 명령어를 처리

컴파일 : 사람이 이해하는 언어를 컴퓨터가 이해할 수 있도록 바꿔 주는 것

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

 

빌드 : 소스 코드 파일을 실행 할 수 있는 소프트웨어로 변환하는 과정 또는 결과물

 

콘솔 프로젝트에서 빌드를 하면 .exe파일이 생성됨

 

 

빌드 성공이라고 나오진 않았지만 문제가 없으므로 넘어가도 됨.

 

여기에서 우클릭 -> 파일탐색기 -> 파일탐색기에서 폴더열기 -> bin -> debug 안에 들어가면 있다.

exe파일을 더블클릭하면 실행과 동시에 꺼짐

 

 

Console.Read(); 입력

그 후 키를 입력 받을때가지 기다리기 ( 깜빡 거림)

그러다 멈추고 계속하려면 아무키나 누르십시오 누르면 완료가 된 상태

 

다시 폴더로 들어가면 튕기지 않고 깜빡거리면서 잘 실행됨

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

[C#] Var 키워드  (0) 2024.05.25
[C#] 오류와 디버깅  (0) 2024.05.24
[C#] 주석  (0) 2024.05.24
[C#] 데이터 타입 bool, char, object  (0) 2024.05.24
[C#] 변수와 값, 데이터 타입 (int, float, string)  (0) 2024.05.23

주석 : 프로그래밍에 있어서 내용을 메모하는 목적

소스 코드를 더 쉽게 이해할수 있도록 만듬

주석의 종류


1. // : 한 줄 주석
2. /* */ : 여러 줄 주석

 

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

namespace Step08
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //한줄 주석
            /* => 계속 엔터를 치면 늘어난다.
             * => 여러줄 주석에 사용
             *  
             * 따라서 이 사이에 메모를 하면 된다.
             * 
             * 
             */

            /**/     // 를 입력하고 사이에 메모를 남긴다.


            /*
             여러줄 주석입니다.
                여러줄 주석입니다.    <= 이렇게 탭을 눌러 들여쓰기
             
             
             
             */  //=> 여기서 이 줄의 *에 커서를 붙인 후 space로 공간 확보

            Console.WriteLine("Hello World");
            //Console.WriteLine("Hello World");


        }
    }
}

 

 

한줄은 주석처리가 되어 한 줄만 실행됨

 

 

단축키 : 드래그 후

 

Ctrl + K + C                   => 주석

         Ctrl + K + U                   => 주석 해제

 

 

 

단축키 변경하는 법

도구 -> 옵션

검색 창에 => 키보드

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

[C#] 오류와 디버깅  (0) 2024.05.24
[C#] 컴파일과 빌드  (0) 2024.05.24
[C#] 데이터 타입 bool, char, object  (0) 2024.05.24
[C#] 변수와 값, 데이터 타입 (int, float, string)  (0) 2024.05.23
[C#] Start  (0) 2024.05.23

bool : 논리형식

true 혹은 false값

 


char: 문자형식
'a'와 같이 작은 따옴표 안에 문자 하나의 값을 나타내는 형식

 


object : 오브젝트형식
아무거나 넣을수 수 있는 형식

 

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

namespace Step7
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //bool형식 변수 선언 및 할당
            bool isLucky = true;

            //변수에 값 할당
            isLucky = false;

            //출력
            Console.WriteLine(isLucky);
            //변수에 값을 넣으면 이전에 있던 값은 사라진다.

            //char형식 변수 선언
            char word;
            //값 할당
            word = 'a';

            //출력
            Console.WriteLine(word); // a

            //object형식 변수 선언
            object obj;
            //모든 값을 할당 가능
            obj = 100;      //정수 int
            obj = 12.3f;    //소수점 float
            obj = "홍길동";  //문자열 string
            obj = true;     //논리형식 bool
            obj = '김';     //문자형식 bool


            //출력
            Console.WriteLine(obj);
        }
    }
}

 

 

하나의 변수에 값을 여러개 넣으면 같은 위치에 덮여쓰여져서 마지막의 값이 출력된다.

 

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

[C#] 오류와 디버깅  (0) 2024.05.24
[C#] 컴파일과 빌드  (0) 2024.05.24
[C#] 주석  (0) 2024.05.24
[C#] 변수와 값, 데이터 타입 (int, float, string)  (0) 2024.05.23
[C#] Start  (0) 2024.05.23

+ Recent posts