헷갈렸던 문법 복습

Clean·2025년 3월 21일

float

float floatValue = 3;
float floatValue2 = 3.5f;

float 타입 변수에 정수 값을 넣을 때는 f를 생략해도 된다.
하지만 소수점이 있는 실수는 반드시 f를 붙여야 한다.


byte

byte byteValue = 255;
byteValue++; // 0
byteValue++; // 1

byte의 값의 범위는 0~255이므로,
255에서 값을 더하면 256이 아니라 0이 된다.
이처럼 최대값의 범위를 초과하는걸 오버플로우라고 한다.

byte byteValue1 = 0;
byteValue1--; // 255

최소값보다 더 작은 수가 될때는 언더플로우라고 한다.


&& (and 연산자)

Console.WriteLine(true && true);    // true
Console.WriteLine(true && false);   // false
Console.WriteLine(false && true);   // false
Console.WriteLine(false && false);  // false

&&을 사용할 때는 양쪽 조건이 전부 true 일 때만 true를 반환한다.

bool boolValue = false && (true || false) && true;
Console.WriteLine(boolValue); // false

&& falsefalse &&같이 하나라도 false와 비교하면 무조건 false를 반환한다.


for (반복문)

int intValue1 = 1;
for (int i = 0; i < 5; i++)
{
    intValue1++;
}
Console.WriteLine(intValue1); // 5-0 = 5번 반복 = 6

int intValue3 = 0;
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 4; j++)
    {
        intValue3++;
    }
}
Console.WriteLine(intValue3); // 4-0 = 4번 반복을 3번 반복한다 = 4 * 3 = 12번 반복 = 12

for문 안에 조건문이 <일 때는 비교값 - 시작값 = 반복횟수 라고 생각해야겠다.
<=일 때는 (비교값 + 1 ) - 시작값 = 반복횟수

물론 연산문에서 i++같이 1씩 증가할때만이고 연산문이 다르면 다르게 생각해야한다.


값에 대한 호출 (Call By Value)

static void Main(string[] args)
{
	Func1(5);
}

static void Func1(int value)
{
    Console.WriteLine(value++); // 1. 5 출력후 6
    Func2(value);               // 3. 갔다 오면 그대로 6
    Console.WriteLine(value++); // 4. 6 출력후 7 
}

static void Func2(int value)
{
    Console.WriteLine(value++); // 2. 6 출력후 7
}

ref를 붙여서 쓰지 않는 이상 값이 변하지 않는건데,
값타입참조타입을 좀 더 신경써야겠다.


struct (구조체)

struct MyStruct
{
    public int value1;
    public int value2;
}
/////////////////////////
MyStruct s = new MyStruct() { value1 = 1, value2 = 2 };
MyStruct t = s;
// s = 1, 2
// t = 1, 2
s.value1 = 3;

// s = 3, 2
// t = 1, 2 // 값타입이라 공유 X

t.value2 = 4;
// s = 3, 2
// t = 1, 4
Console.WriteLine(s.value1 + s.value2 + t.value1 + t.value2); // 10

MSW에서는 값 타입, 참조 타입을 구분하지않고 모른채로 막 사용하다보니,
struct도 당연하게 참조 타입이라 생각하고 있었다.

값 타입과 참조 타입에 대해 다시 한번 인지하게 됐다.

struct = 값 타입
class = 참조 타입


enum (열거형)

enum Season
{
    Spring,
    Summmer,
    Autumn = 20,
    Winter
}

Console.WriteLine((Season)21); // Winter
Console.WriteLine((Season)50); // 50

enumstringint가 1:1로 대응하는 key-value형태라는건 알고 있었는데,
Console.WriteLine((Season)50);같이 enum에 대응하는 값이 없을 때는
안나오거나 null로 출력될거라 생각했었다.

하지만 예상을 벗어난 50이 출력됐다.

알고보니 enum에 해당 int값에 대응하는 멤버명이 없으면,
그대로 int값이 출력된다고 한다.

Console.WriteLine(Enum.IsDefined(typeof(Season), 50));

그리고 int값이 enum에 있는지 알 수 있는 IsDefined 함수도 있다.


다시 보면 다 알 수 있는건데 아쉽다는 생각이 든다.
현재 배우는게 얇은 지식으로 점점 늘어가는 느낌이다.
하다보면 늘기야 하겠지만 능숙해질 수 있을까?

0개의 댓글