C#

C#문법-4 : 문자열과 열거형

알통몬_ 2019. 4. 22. 14:58
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


지난 포스팅에서 배열에 대해 공부했습니다.

2019/04/22 - [C#] - C#문법-3 : 배열 Array

이번 포스팅에서는 문자열과 열거형에 대해 공부합니다.


문자열 :

C#에서 문자열은 한 번 문자열이 지정되면 변경할 수 없습니다.

때문에 string str1 = "A"; 라고 값을 지정한 후

str1 = "B"; 로 값을 변경한다면 사람이 코드를 봤을 때는

값이 변경된 것으로 보이지만, 내부적으로는 전혀 다른 메모리를

갖는 객체를 가리킵니다.

문자열은 "" 이중부호로 표현하고

단일문자 char는 '' 단일부호로 표현합니다.

using System;

namespace workspace_csharp {
class Program {

static void Main(string[] args) {
string str1 = "C# Programming";
string str2 = "Hello world!";

char char1 = 'a';
char char2 = '3';
string str3 = str1.Substring(0, 2);

string str4 = str1 + " " + str2;

Console.WriteLine(str1);
Console.WriteLine(str2);
Console.WriteLine(str3);
Console.WriteLine(str4);
}
}
}


문자열 = 문자 배열

문자열은 char의 집합체입니다.

문자열의 각 index 문자들을 가져올 수 있습니다.

using System;


namespace workspace_csharp {
class Program {

static void Main(string[] args) {
string str1 = "C# Programming";
for(int i = 0; i < str1.Length; i ++) {
Console.WriteLine(str1[i]);
}
}
}
}


StringBuilder 라는 클래스가 있습니다.

이 클래스는 문자열을 다루는데 중요한 클래스 중 하나로

문자열과는 다르게 Mutable 타입이기 때문에 문자열 갱신이

많이 발생하는 곳에서 자주 사용됩니다.

이 클래스는 메모리를 생성 또는 소멸을 별도로 하지 않고

일정한 버퍼를 가지고 문자열 갱신을 효율적으로 처리합니다.

using System;
using System.Text;

namespace workspace_csharp {
class Program {

static void Main(string[] args) {
StringBuilder stringBuilder = new StringBuilder();
for(int i = 1; i <= 10; i++) {
stringBuilder.Append(i.ToString());
}
String str = stringBuilder.ToString();
Console.WriteLine(str);
}
}
}



열거형 Enum

열거형은 상수를 의미있는 단어들로 표현합니다.

그리고 숫자형 타입으로 캐스팅이 가능합니다.

즉 int 형 변수에 값을 대입할 수 있습니다.

예를 들어 일 ~ 토를 숫자르 0 ~ 6으로 표현하는 것 보다는

SUN ~ SAT 로 표현하는게 사람이 파악하기에 쉽겠죠?

public enum Days {
SUN,
MON,
TUE,
WED,
THU,
FRI,
SAT
}


using System;

namespace workspace_csharp {
public enum Days {
SUN,
MON,
TUE,
WED,
THU,
FRI,
SAT
}
class MyClass {
static void Main(String[] args) {
int sunday = (int)Days.SUN;
int monday = (int)Days.MON;
int tuesday = (int)Days.TUE;
int wednesday = (int)Days.WED;
int thursday = (int)Days.THU;
int friday = (int)Days.FRI;
int saterday = (int)Days.SAT;


}
}

}


또한 enum은 각 멤버들을 비트별로 구분되는 값으로 가질 수 

있습니다.( e.g. 0, 1, 2, 4, 8, 16, ... )

이렇게 비트 필드를 갖는 다는 것을 표시하기 위해서

자바에서 함수적 인터페이스에 @FunctionalInteface 어노테이션을

사용하는 것처럼 [Flags] 라는 Attr을 지정할 수 있습니다.

using System;

namespace workspace_csharp
{

class MyClass
{
static void Main(String[] args)
{
Way way = Way.LEFT;

if(way != 0) {
Console.WriteLine(way);
} else {
Console.WriteLine("not Left");
}
}
}

[Flags]
public enum Way {
LEFT = 0,
TOP = 1,
RIGHT = 2,
BOTTOM = 4
}
}


Way way = Way.LEFT; 를 아래처럼 사용할 수도 있습니다.

Way way = Way.TOP | Way.LEFT;

그럼 2가지 값을 동시에 체크할 수 있겠죠?


이상입니다. 감사합니다.

다음 포스팅에서는 연산자에 대해서 공부합니다.

반응형