논리 연산(부울 연산)

연산된 결과 값이 참, 거짓만 존재하는 연산

 

&& (조건부 논리 AND

 

|| (조건부 논리 OR)

! (논리 부정 NOT)

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

[C#] 선택문 switch  (0) 2024.05.27
[C#] 선택문 if문  (0) 2024.05.27
[C#] 비교 연산  (0) 2024.05.26
[C#] 산술 연산자  (0) 2024.05.26
[C#] 입력 받기  (0) 2024.05.25

관계형 연산자라고 불리우며

피연산자를 비교

 

"왼쪽 피연산자가 오른쪽피연산자보다 ~한지"

 

<, >, <=, >=

 

모든 정수 및 부동 소수점 숫자 형식을 지원

 

char형식은 비교 연산자도 지원(문자 코드)

열거형 형식은 비교 연산자도 지원(기본 정수 형식의 해당 값이 비교됨)

 

== 및 != 연산자는

피연산자가 같은지 여부 확인

 

ex) Console.WriteLine(5 > 3);               //             output : True

      Console.WriteLine(5 > 3);               //             output : False

 

 

 

 

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

[C#] 선택문 if문  (0) 2024.05.27
[C#] 논리 연산  (0) 2024.05.26
[C#] 산술 연산자  (0) 2024.05.26
[C#] 입력 받기  (0) 2024.05.25
[C#] 박싱과 언박싱  (0) 2024.05.25

연산하다 

 

일정한 규칙에 따라 계산하다

 

연산자

일반적으로 수학 연산과 유사한 연산자 집합을 지원한다

 

단항 연산자

++(증가) : 피연산자를 1씩 증가

 

전위 증가 연산자( ++x )

 

증가를 시키고 출력한다

 

 

후위 증가 연산자( x++)

 

출력을 먼저하고 값이 증가된다.

https://www.youtube.com/watch?v=sZzAsWDnBsw&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=18

 

 

--(감소) : 피연산자를 1씩 감소

++(증가)연산자와 같이 전위, 후위 연산자가 있다

 

이항 연산자

 

+(더하기)

-(빼기)

*(곱하기)

/(나누기)

%(나머지)

 

모든 정수 및 소수점 숫자 형식을 지원

https://www.youtube.com/watch?v=sZzAsWDnBsw&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=18

 

데이터의 타입이 int이면 우리가 생각했을 때 나오는 소수점인

float형태가 아니고

흔히들 말하는 몫만 정수로 나온다.

 

 

하지만 소수점 형식으로 나누면 소수점까지 출력이 된다.

https://www.youtube.com/watch?v=sZzAsWDnBsw&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=18

 

나의 생각은 이러하다

 

5 % -4 를 예시로 들면

1. 각각의 피연산자를 절대값 abs을 씌운다.

2. 그러면 5 % 4를 하게 될 것이고 그 값은 1이된다.

3. 그 후 나누어지는 수의 부호를 따라서 +를 가져와

4. 답은 +1이 된다.

 

https://www.youtube.com/watch?v=sZzAsWDnBsw&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=18
https://www.youtube.com/watch?v=sZzAsWDnBsw&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=18

 

https://www.youtube.com/watch?v=sZzAsWDnBsw&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=18
https://www.youtube.com/watch?v=sZzAsWDnBsw&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=18

 

 

연산자의 계산 순서

 

후위 연산자 => 전위 연산자 => 곱, 나누기, 나머지 연산자 => 더하기, 빼기 연산자

'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

버퍼(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

문자열 보간이란?

 

값을 포함하는 문자열 출력

 

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

+ Recent posts