초보자를 위한 C# 200제 part 1

신승빈·2023년 7월 5일
0

Unity3d

목록 보기
3/7

C#

class가 기본 단위
필드(변수), 메소드(함수) 등 프로그램 구성 요소는 class 내부에 정의되야 함
Main()을 통해 시작, static 필수, 반환값 자유

System.Console.WriteLine()

System이라는 namespace의 Console class의 WriteLine 메소드
using을 사용해서 namespace 사용 가능

System.Console

Read() : 한글자 읽기
ReadLine() : 한줄 읽기
Write() : 문자열(스트링) 출력
WriteLine() : 문자열 + 개행 출력

type

bool, byte, sbyte, char, decimal, double, float, int, long, short 등
byte의 경우 양수값만 가능, sbyte가 음수도 가능
int.MaxValue, int.MinValue 지원
int.Parse() 지원

decimal

128 bit, 고정소수점(28bit가 지수인것 같은데 정확한 계산법은 모르겠음), 접미사 m
28~29자리 정밀도
float은 7자리, double은 15~16자리 정밀도
단, float이나 double은 더 크고 작은 범위 표현 가능

var

c++의 auto

char

utf-16 지원, 한글 변수 가능

string

System.String의 alias
@"\t"와 같이 @를 붙이면 Escape Suquence 무시(단 raw랑은 다름)

가변인자

void func(params type[] arr)

params keyword 사용

Casting

c#에서는 데이터 손실이 발생하는 암시적 형변환을 허용하지 않음

in, out, ref keyword(매개변수 한정자)

void func(out type var)
func(out var);

함수 사용시 keyword 명시 필수

in

reference + const

out

reference + 함수 내부에서 값 수정 필수

% 연산에서 실수 사용 가능

실수 자릿수까지 나머지 연산

DivideByZero

실수를 0으로 나눌때는 무한대 판정
정수를 0으로 나눌때는 예외 발생

Overflow

checked
{
    try
    {
        int a = int.MaxValue;
        a += 1;
    }
    catch(Exception e) { ... }
}

checked keyword 사용(default unchecked), overflow exception 발생
(long to int같은)casting에서도 감지 가능
Decimal은 checked를 사용하지 않아도 overflow와 DivideByZero exception 발생

string

string s = "abc";
s = "def";    // 새로 객체 생성

Immutable한 객체

string s = "abc";
s[1] = 'd';    // 불가능. Immutable

대신 replace를 지원하지만 역시 새 객체를 반환

string.Empty;    // "" 객체

StringBuilder

mutable한 객체

string.Format()

중괄호 {}으로 Format index 표현
{index[,alignment][:FormatString]}으로 표현
string.Format()에서는 중괄호 자체를 사용하기 힘듬

형식 지정자

Format 지정법
형식 + 정밀도
돈, e 표현, 백분율, 3자리간격 ',' 등 지원하는게 많음
Custom 형식 지정자도 가능한데 좀 복잡한 듯

string interpolation

문자열 자체에 매개변수를 삽입한 느낌
$"{variableName}"을 통해 Format과 비슷한 효과
variableName은 미리 선언되어 있어야 함

StringComparison

enum형
string간의 문자열 비교 조건으로 사용

Enum

class 또는 namespace안에서만 선언 가능

enum EnumName { var1, var2 };
EnumName.var1;

'.'을 이용해서 접근

Enum.GetValues(typeof(EnumName));
Enum.GetNames(typeof(EnumName));

foreach(var iter in Enum.GetValues(typeof(EnumName))) { ... }

위 함수를 이용해 반복문을 통해 접근 가능
암시적 int casting 불가능

const, readonly

const

선언 시 할당, 컴파일 타임
ClassName.VariableName으로 접근

readonly

instance 생성 시 할당, 런타임
InstanceName.VariableName으로 접근

Initializer List

c#에서는 Initializer List가 없음
그냥 생성자 정의에서 바로 할당하는 구조인 듯

Reference type

데이터를 heap에 저장하고 그 주소만 스택에 저장하는 객체
Object, string, array, dynamic, class, interface, delegate
int, double, float 등은 Value type(stack에 바로 데이터가 저장됨)

string과 Reference type

string은 reference type으로 heap에 데이터가 저장되지만 Immutable한 객체로 만약 매개변수로 string을 넘기고 매개변수를 수정한다면 지역변수로서 값이 수정되고 매개변수로 넘어간 원 변수는 변경사항이 없음
그러므로 만약 string을 reference한 매개변수로 사용하고싶다면 ref keyword필요

Null 조건 연산자

ptr != null && ptr.func()
ptr?.func()

default

value type, reference type 구분없이 자동으로 초기화 시켜주는 함수
Generic(Template)으로 생성된 객체들의 변수를 초기화시 사용하기 유용함

Nullable

int? = Nullable<int>

Value type에 null이 가능해진다
Value type의 pointer용도로 사용하는 느낌

Nullable<int> var;
int x = var ?? 1;    // var가 null일 경우 1 대입

값 비교 시 Compare()사용. <같은 비교구문은 ==, != 이외에는 모두 false
DB의 column 중 null이 가능한 column처리 시 유용

Nullable<int> var;
var.Value;
var.GetValueOrDefault();

Value로 접근할 경우 InvalidOperationException발생 가능

Object

c#의 모든 객체는 Object를 상속
값 -> Object로 casting을 Boxing
Object -> 값으로 casting을 Unboxing

switch

switch의 case문은 무조건 break를 통해서만 종료
switch의 본문이 없다면 중첩은 가능하지만 본문이 존재한다면 break없이 타고 넘어가는건 불가능

profile
이상을 길잡이 삼아 로망을 추구합니다.

0개의 댓글