728x90

이것이 C#이다


Chapter03 데이터 보관하기


값 형식의 변수(Call by Value)는 스택에 저장된다.

참조 형식의 변수(Call by Reference)는 힙 영역에는 데이터를 저장하고 스택 영역에는 데이터가 저장되어 있는 힙 메모리의 주소를 저장한다.


값 형식의 변수는 코드 블록이 끝나면 메모리에서 제거된다.

참조 형식의 변수는 코드 블록이 끝나도 제거되지 않는 대신 더 이상 데이터를 참조하는 곳이 없을 때 CLR의 가비지 컬렉터가 제거한다. 


object 형식

모든 데이터 형식이 자동으로 object 형식으로부터 상속받는다.

-> 어떤 형식의 데이터라도 object에 담아 처리할 수 있다.


박싱 언박싱

object 형식은 값 형식의 데이터를 힙에 할당하기 위한 박싱 기능을 제공한다.

object 형식에 값 형식의 데이터를 할당하려는 시도가 이루어지면 object 형식은 박싱을 수행해서 해당 데이터를 힙에 할당한다.

박싱되어 있는 값을 꺼내 값 형식 변수에 저장하는 과정을 언박싱이라 한다.


enum(열거 형식)

같은 범주에 속하는 여러 개의 상수를 선언할 때 enum 키워드를 이용해 열거 형식을 선언한다.

enum ValueName long {Val1, Val2, ...}

자료형 생략하면 int

상수에 값을 할당하지 않았지만 자동으로 컴파일러가 첫 번째부터 0부터 1씩 증가한 값을 할당한다.

ValueName result = ValueName.Val1;

enum으로 ValueName이라는 새로운 자료형을 만들고 열거 형식의 변수를 선언하여 값을 대입할 수 있다.

열거 형식을 선언할 때 상수에 직접 값을 대입할 수도 있다.


Nullable 형식

어떤 값도 가지지 않는 변수가 필요할 때, 0이 아닌 비어 있는 변수, null 상태인 변수가 필요할 때 사용한다.

변수에게 할당된 메모리 공간을 비워둘 수 있도록 Nullable 형식을 사용한다.

값 형식에 한해서 사용가능하다.

int? a = null;

자료형 뒤에 ?을 붙여서 선언한다.

a.HasValue로 값을 갖고 있는지 아닌지 boll을 출력할 수 있다.

a.Value로 값이 담겨 있을 때 값을 출력할 수 있다.


var

var로 자료형을 선언하면 컴파일러가 자동으로 자료형을 지정해준다.

단, 선언과 동시에 초기화해야 한다.

배열도 var로 선언할 수 있다.

foreach문에서 var를 사용한다.

또한 var는 지역 변수로만 사용할 수 있다.

클래스의 필드를 선언할 때는 선언과 초기화를 같이 하지 않고 생성자라는 특수한 메소드에서 초기화를 하는 경우가 대부분이기에 클래스의 필드는 반드시 명시적 형식을 선언한다.

C/C++에서 전역 변수는 코드의 가독성을 해치고 오류를 낳는 원흉이었기에 C#에서는 전역 변수를 지원하지 않는다.


문자열 다루기

문자열 안에서 찾기

IndexOf()

현재 문자열 내에서 찾고자 하는 지정된 문자 또는 문자열의 위치를 찾습니다.

LastIndexOf()

현재 문자열 내에서 찾고자 하는 지정된 문자 또는 문자열의 위치를 뒤에서부터 찾습니다.

StartsWith()

현재 문자열이 지정된 문자열로 시작하는지를 평가합니다.

EndsWith()

현재 문자열이 지정된 문자열로 끝나는지를 평가합니다.

Contains()

현재 문자열이 지정된 문자열을 포함하는지를 평가합니다.

Replace()

현재 문자열에서 지정된 문자열이 다른 지정된 문자열로 모두 바뀐 새 문자열을 반환합니다.


문자열 변형하기

ToLower()

현재 문자열의 모든 대문자를 소문자로 바꾼 새 문자열을 반환합니다.

ToUpper()

현재 문자열의 모든 소문자를 대문자로 바꾼 새 문자열을 반환합니다.

Insert()

현재 문자열의 지정된 위치에 지정된 문자열이 삽입된 새 문자열을 반환합니다.

Remove()

현재 문자열의 지정된 위치로부터 지정된 수만큼의 문자가 삭제된 새 문자열을 반환합니다.

Trim()

현재 문자열의 앞/뒤에 있는 공백을 삭제한 새 문자열을 반환합니다.

TrimStart()

현재 문자열의 앞에 있는 공백을 삭제한 새 문자열을 반환합니다.

TrimEnd()

현재 문자열의 뒤에 있는 공백을 삭제한 새 문자열을 반환합니다.


문자열 분할하기

Split()

현재 문자열을 지정된 문자를 기준으로 분리한 문자열의 배열을 반환합니다.

SubString()

현재 문자열의 지정된 위치로부터 지정된 수만큼의 문자로 이루어진 새 문자열을 반환합니다.


문자열 서식 맞추기

1) string 형식의 Format()

Console.WriteLine("제목 : {0}", "이것이 C#이다");

Console.WriteLine("Total : {0, -7, D}", 123);

{첨자, 맞춤 : 서식 문자열}

서식 항목의 첨자

왼쪽/오른쪽 맞춤

변환 서식 지정 문자열


-10

왼쪽 맞춤

10

오른쪽 맞춤


숫자 서식화

D 10진수

X 16진수

N 콤마로 구분

F 고정소수점

E 지수


D5는 10진수를 5자리로 표현


날짜 및 시간 서식화

DateTime dt = new DateTime(2022, 1, 11, 18, 56, 52)


y 연도

yy 두 자리, yyyy 네 자리

M 월

M 한 자리, MM 두 자리

d 일

d 한 자리, dd 두 자리

h 시 ( 1 ~ 12)

h 한 자리, hh 두 자리

H 시 ( 1 ~ 23)

H 한 자리, HH 두 자리

m 분

m 한 자리, mm 두 자리

s 초

s 한 자리, ss 두 자리

tt 오전/오후

ddd 요일

ddd 약식 요일(화), dddd 전체 요일(화요일)


2) 문자열 보간(Interpolation)

문자열 보간 - C# 6.0부터 도입

$ "텍스트{<보간식>[,길이] [:서식]}텍스트{...}..."

보간식 - 보통 인스턴스의 이름을 지정하지만, 출력할 객체를 반환하는 식을 지정할 수도 있음

길이 - 길이 옵션, 서식 항목의 [맞춤]과 같음

서식 - 서식 항목의 [서식 문자열]과 같음


string.Format()

WriteLine("{0}, {1}", 123, "최강한화");

문자열 보간

WriteLine($"{123}, {"최강한화"}");

WriteLine($"{123, -10,:D5}");


문자열 보간이 보다 읽기도 좋고 코드의 양도 적다.


Chapter04 데이터를 가공하는 연산자


산술 연산자 +, -, *, /, %

증가/감소 연산자 ++, — (전위, 후위)

문자열 결합 연산자 +

관계 연산자 <, >, ==, !=, <=, >=

논리 연산자 &&(AND, 논리곱), ||(OR, 논리합), !(NOT, 부정)

조건 연산자(삼항 연산자) ?:

조건식 ? 참일 때 값 : 거짓일 때 값

null 조건부 연산자(C# 6.0 도입) ?., ?[]

?.

객체의 멤버에 접근하기 전에 해당 객체가 null인지 검사하여 그 결과가 참이면 그 결과로 null을 반환, 거짓이면 지정된 멤버를 반환한다.

class Foo

{

public int member;

}

Foo foo = null;

int? bar;

bar = foo?.member;

?[]

?.과 비슷한 역할이나 배열과 같은 컬렉션 객체의 첨자를 이용한 참조에 사용

ArrayList a = null;

a?.Add("야구");

WriteLine(a?.Count);

WriteLine(a?[0]);

비트 연산자 <<, >>, &, |, ^(XOR, 배타적 논리합 연산자), ~(보수 연산자)

<<, >> (Shift 연산자, 비트를 왼쪽(오른쪽) 이동)

a << b = a X 2^b, a >> b = a / 2^b

^ 두 피연산자의 진리값이 서로 다르면 결과가 참

할당 연산자 =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

null 병합 연산자 ??

변수/객체의 null 검사를 간결하게 만들어주는 역할

왼쪽 피연산자가 null인지 평가

null이면 오른쪽 피연산자를, 아니면 왼쪽 피연산자를 반환한다.


C#에는 null과 관계된 형식과 연산자에 ?기호가 들어간다.

ex) Nullable, null 조건부 연산자, null 병합 연산자


728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기