7. 숫자 이외의 데이터 형식(bool, char, string)
숫자 이외의 데이터 형식인 문자(char
), 문자열(string
) 그리고 참 또는 거짓 값을 다뤄보도록 하겠습니다.
> // 숫자 이외의 데이터 형식: bool, char, string 등의 키워드로 숫자 이외의 데이터 저장
TIP
char
키워드는 캐릭터
, 차
, 카
중 원하는대로 발음해도 됩니다. 외국 프로그래머와 강사들의 발음을 잘 들어보면 이 세가지 중 하나를 사용합니다. 박용준 강사는 캐릭터
로 발음합니다.
7.1. 문자 데이터 형식 사용하기(char
)
문자형 변수는 2 바이트의 공간에 하나의 문자를 저장합니다. 문자형 변수는 char
키워드를 사용하여 선언하고 값을 초기화할 때에는 두 개의 작은따옴표로 문자 하나를 묶어줍니다.
문자 하나를 담을 변수를 선언하고 사용하는 미리보기 샘플 코드는 다음과 같습니다. 참고로, C# Interactive에서는 Console.WriteLine()
사용 대신에 변수를 직접 출력할 수 있습니다.
> char c = 'A';
> c
'A'
char
변수 선언 및 초기화에 대한 내용을 그림으로 표현하면 다음과 같습니다.
그림: 문자 변수 선언 및 초기화
문자 데이터 형식인 char
키워드로 선언된 변수는 문자 하나를 저장하기 위해 사용됩니다. char
데이터 형식은 16비트 저장공간을 차지합니다. char
키워드로 선언되는 변수는 단일 유니코드(Unicode) 문자를 저장합니다. 일반적인 영문 및 한글 등의 모든 언어 문자가 표현될 수 있습니다. 단일 문자는 작은따옴표('
)로 묶습니다. char
자료 형에는 여러 개의 문자를 저장할 수 없습니다. 즉, 작은따옴표 안에는 단 하나의 문자만이 들어올 수 있습니다.
char
키워드에 해당하는 닷넷 형식은 System.Char
입니다.
> char a = 'A';
> Char b = 'B';
> $"{a}, {b}"
"A, B"
> System.Char c = 'ABC';
(1,17): error CS1012: Too many characters in character literal
7.2. 문자 변수 선언하기
이제 문자 변수에 문자를 저장하고 출력하는 내용을 살펴보겠습니다. 다음 내용을 입력한 후 실행해 보세요.
코드: CharacterDemo.cs
// char 키워드: 문자 데이터 형식 변수를 선언
using System;
class CharacterDemo
{
static void Main()
{
char grade = 'A';
char kor = '가';
Console.WriteLine(grade);
Console.WriteLine(kor);
}
}
A
가
char
변수에 'A'
, '가'
와 같이 문자 하나를 작은따옴표로 묶어서 저장했습니다. char
변수에 하나 이상의 문자를 지정하면 "문자 리터럴에 문자가 너무 많습니다."
와 같은 에러 메시지가 출력됩니다.
7.3. 이스케이프 시퀀스 사용하기
앞서도 살펴본 내용인데요. 백슬래시(\
) 기호 뒤에 한 문자를 지정하는 것을 "이스케이프 시퀀스"라고 합니다. 백슬래시 기호는 한글 글꼴을 사용할 때에는 원(₩
) 기호로 표시되고 영문 글꼴을 사용할 때에는 백슬래시(\
, 역슬래시) 기호로 표현됩니다.
이스케이프 시퀀스는 줄 바꿈 문자, 작은따옴표 기호 자체, 탭 이동과 같은 제어 문자를 표현할 때 사용됩니다.
콘솔 창에서 한 줄을 내리는 \n
기호를 사용해보겠습니다.
코드: CharacterEscapeSequence.cs
> char ch1 = 'A';
> char ch2 = 'B';
> char newLine = '\n'; // \n: 줄 바꿈 문자
> Console.WriteLine("{0}{1}{2}", ch1, newLine, ch2);
A
B
\n
과 같은 이스케이프 시퀀스는 2개의 문자로 표현되지만 실제로는 하나의 문자로 인식합니다.
C#에서의 백슬래시(\
) 기호
C#에서 백슬래시 기호는 이스케이프 시퀀스를 표현하는 특수 기호입니다. 만약, 문자열로 백슬래시 기호 자체를 표현하려면 '\\'
형식으로 백슬래시 기호 두 개를 함께 나열해야 합니다.
7.4. 문자열 데이터 형식(string)
일반적으로 가장 많이 사용되는 데이터 형식은 문자열을 나타내는 string
입니다. string
키워드를 사용하면 문자열 데이터 형식의 변수를 선언할 수 있습니다. 문자열은 반드시 큰따옴표("
)로 묶습니다. 참고로, string
키워드에 해당하는 닷넷 형식은 System.String
입니다.
문자열 변수를 선언하는 내용을 살펴보겠습니다. 다음 내용을 Visual Studio의 소스 코드 편집 창에 입력한 후 실행해보세요.
코드: StringKeyword.cs
using System;
class StringKeyword
{
static void Main()
{
string name = "박용준";
Console.WriteLine("안녕하세요. {0}입니다.", name);
}
}
안녕하세요. 박용준입니다.
하나 이상의 문자로 이루어진 문자열은 큰따옴표로 묶어서 string
변수에 담습니다. C#
에서 기본으로 제공하는 데이터 형식 중에서 앞으로 가장 많이 사용될 변수 형태입니다.
@
기호를 사용하여 여러 줄 문자열 저장하기
축자(Verbatim) 문자열은 @""
형태를 사용하여 문자열에 줄 바꿈 문자가 유지됩니다. 축자 문자열에서 큰따옴표 하나를 사용하려면 ""
형태로 큰 따옴표 두 개를 연속해서 사용합니다.
> "C:\\Users\\VisualAcademy"
"C:\\Users\\VisualAcademy"
> @"C:\Users\VisualAcademy"
"C:\\Users\\VisualAcademy"
> @""""
"\""
> @"""VisualAcademy"""
"\"VisualAcademy\""
>
문자열 앞에 @
기호를 붙이면 문자열 자체를 그대로 문자열로 저장합니다. 이 때 이스케이스 시퀀스도 함께 저장됩니다. 다음 예제를 살펴보세요.
코드: MultiLineString.cs
using System;
class MultiLineString
{
static void Main()
{
string multiLines = @"
안녕하세요.
반갑습니다.
";
Console.WriteLine(multiLines);
}
}
안녕하세요.
반갑습니다.
실행해보면, 줄 바꿈 및 소스 코드 상의 빈 공백도 모두 포함하여 문자열로 저장됨을 확인할 수 있습니다.
이처럼 C# 코드 기반에서 디렉터리 경로나 자바스크립트 코드 블록 그리고 SQL문 등과 같이 여러 줄에 걸쳐 작성될 만한 내용은 @
기호를 앞에 붙여서 여러 줄을 하나의 문자열로 인식하게 할 수 있습니다.
문자열과 이스케이스 시퀀스 함께 사용하기
문자열 변수에는 문자열과 이스케이프 시퀀스를 포함한 문자 데이터 형식을 함께 사용할 수 있습니다. @
기호를 문자열 앞에 붙이면 문자열 안에 있는 이스케이프 시퀀스 문자를 무시해서 \
기호를 그대로 출력합니다.
이번에는 문자열과 이스케이프 시퀀스를 함께 사용해보겠습니다.
코드: EscapeSequenceDemo.cs
using System;
class EscapeSequenceDemo
{
static void Main()
{
// \n: 줄바꿈
Console.WriteLine("안녕\n하세요.");
// \t: 탭만큼 들여쓰기
Console.WriteLine("반갑\t습니다.");
// \r: 캐리지리턴: 줄 맨 앞으로 이동
Console.Write("또 만나요.\r");
Console.WriteLine();
// \': 작은따옴표 문자 하나 표현
Console.WriteLine(" '낼' \'만나요.\' ");
// \": 큰따옴표 문자 하나 표현
Console.WriteLine(" \"어디\"에서요? ");
// \\: 백(역)슬래시(\) 기호 자체를 표현
Console.WriteLine(" \\: 백슬래시 표현");
// 백슬래시 다음에 나오는 문자 하나는 이스케이프 문자로 본다.
Console.WriteLine(" C:\\Home\\VisualAcademy\\Default.aspx ");
// 문자열 앞에 @ 기호를 붙이면 공백/탭 포함 문자열 자체로 본다.
Console.WriteLine(@"
안녕하세요.
반갑습니다.
");
}
}
안녕
하세요.
반갑 습니다.
또 만나요.
'낼' '만나요.'
"어디"에서요?
\: 백슬래시 표현
C:\Home\VisualAcademy\Default.aspx
안녕하세요.
반갑습니다.
모든 문자열 앞에 @
기호를 붙이면 모든 이스케이프 시퀀스는 무시되고 문자열 자체로 표시합니다.
문자열 보간법(String Interpolation)
문자열 보간법 또는 보간된 문자열로 불리는 기능은 문자열을 묶을 때 편리하게 사용될 수 있는 기능입니다. 문자열 보간법은 또 다른 표현법으로 문자열 템플릿(String Template) 또는 템플릿 문자열(Template String)이라고도 합니다. 프로그래밍을 하다보면 문자열을 묶어서 결과를 출력할 일이 아주 많이 있습니다. 이때 효과적으로 문자열 처리를 위해서는 String.Format()
메서드 등을 주로 사용합니다. C# 6.0부터는 템플릿 문자열로 불리는 문자열 보간법을 제공해서 $"{}"
형태로 문자열을 묶어서 출력하는 간결한 형태를 유지할 수 있습니다. 이 방식은 처음에는 복잡해 보일 수 있으나 사용하면 사용할수록 편리함을 느낄 것입니다.
> string message = "Hello";
> $"{message}"
"Hello"
String.Format()
메서드로 문자열 묶기
String.Format()
메서드를 사용해보겠습니다. String.Format()
메서드 또는 string.Format()
메서드는 모두 동일한 표현법입니다.
코드: StringFormatDemo.cs
> // String.Format() 메서드: 문자열 연결 관련 주요 기능 제공
> string msg = string.Format("{0}님, {1}", "홍길동", "안녕하세요.");
> Console.WriteLine(msg); // 홍길동님, 안녕하세요.
홍길동님, 안녕하세요.
String.Format()
메서드는 Console.WriteLine()
메서드처럼 {0}, {1}, {2}
순서대로 뒤에서 오는 문자열을 채워서 문자열로 반환해줍니다.
보간된 문자열
문자열 보간법 또는 보간된 문자열은 C#에서 효과적으로 문자열을 묶어서 표현할 수 있는 기능을 제공합니다. Console.WriteLine()
메서드에서 제공하는 {0}, {1}
형태의 자리 표시자 대신에 직접 특정 변수의 값을 중괄호 기호를 사용하여 표현할 수 있습니다. 이때 문자열 앞에는 $
기호가 와야 합니다.
코드: StringInterpolationDescription.cs
> // 문자열 보간법(보간된 문자열)
> int number = 3;
> string result = "홀수";
> Console.WriteLine($"{number}은(는) {result}입니다.");
3은(는) 홀수입니다.
문자열 보간법에 사용되는 변수의 값은 모두 문자열로 처리됩니다.
문자열 묶는 여러가지 방법 비교
C#에서 문자열을 묶어서 출력하는 여러 가지 방법을 비교해서 살펴보겠습니다. 문자열 앞에 $
기호를 두고, 문자열 내에서 중괄호 기호를 사용하여 특정 변수의 값을 문자열에 포함할 수 있습니다.
코드: StringInterpolation.cs
> // 문자열 보간(String Interpolation)
> string message = "String Interpolation";
> Console.WriteLine("Message: {0}", message); // WriteLine() 메서드 기본 제공
Message: String Interpolation
> Console.WriteLine("Message: " + message); // 더하기 연산자
Message: String Interpolation
> Console.WriteLine($"Message: {message}"); // 문자열 보간법
Message: String Interpolation
이 강의에서는 이번 예제에서 살펴본 3가지 방법을 모두 사용하지만 세 번째 방법인 문자열 보간법(String Interpolation)의 사용을 적극 권장합니다.
문자열 묶는 3가지 방법 함께 사용하기
문자열 보간법과 관련해서 문자열을 표현하는 방법을 다시 한번 사용해보겠습니다. 현재 C# 버전은 11.0 버전이기에 변경해서 테스트하세요.
코드: StringInterpolationDemo.cs
> // String Interpolation(문자열 보간법)
> string name = "C#";
> string version = "8.0";
>
> // WriteLine() 메서드의 기본 제공 기능 사용
> Console.WriteLine("{0} {1}", name, version);
C# 8.0
>
> // String.Format() 메서드 사용
> string result = String.Format("{0} {1}", name, version);
> Console.WriteLine(result);
C# 8.0
>
> // 문자열 보간법(String Interpolation) 사용
> Console.WriteLine($"{name} {version}");
C# 8.0
>
> // C# Interactive에서는 Console.WriteLine() 생략 가능
> $"{name} {version}"
"C# 8.0"
C# 6.0 버전 때에 새로 소개된 문자열 보간법을 사용하면 String.Format() 메서드 대신에 $ 기호와 여는 중괄호와 닫는 중괄호 사이에 직접 변수의 값을 지정해서 출력해서 코드를 좀 더 간소화해서 사용이 가능합니다.
변하는 값과 변하지 않는 값
상수는 변하지 않는 값을 저장할 때 유용하고 변수는 변하는 값을 저장할 때 유용합니다. 문자열 변수에 const
키워드를 붙여 상수로 만들어 보겠습니다. 코드에 나오는 문자열은 원하는 다른 문자열 또는 영문으로 변경해서 실행해보세요.
코드: Immutable.cs
> // 상수: 변하지 않는 값
> const string name = "박용준";
>
> // 변수: 변하는 값
> int age = 45;
>
> $"이름: {name}, 나이: {age}"
"이름: 박용준, 나이: 45"
영어 단어로 Mutable
은 '변할 수 있는'
이고, Immutable
은 '변경할 수 없는'
입니다. 변수(Variable)
는 Mutable
이고 상수(Constant)
는 Immutable
입니다. 이 두 개의 영어 단어는 프로그래밍 세계에서는 반드시 알아야하기에 영어로 정리를 해보았습니다.
실수와 문자열을 저장하는 상수
실수 데이터와 문자열 데이터를 저장하는 상수를 사용해보겠습니다. 다음 내용을 Visual Studio의 C# Interactive 창에 입력한 뒤 실행해보세요.
코드: ConstDoubleString.cs
> //[1] 상수 선언과 동시에 초기화
> const double PI = 3.14;
> const string SITE_NAME = "닷넷코리아";
> //[2] 상수 참조
> PI
3.14
> SITE_NAME
"닷넷코리아"
변수를 선언할 수 있는 모든 데이터 형식 앞에 const
를 붙여 상수로 만들었습니다. 이 강의에서는 상수 이름은 주로 대문자 형태로 표현합니다.
여러 가지 상수 선언과 동시에 초기화
상수의 내용은 변경할 수 없습니다. 만약 상수를 선언한 후 상수의 값을 새로운 값으로 변경하려고 하면 에러가 발생합니다.
코드: Constant.cs
> // 변수(Variable)
> string name = "박용준";
> name = "레드플러스"; // 변경 가능
>
> // 상수(Constant)
> const int age = 20; // age는 20으로 고정
> age = 45; // age를 45로 변경하려고하면 에러가 발생
(1,1): error CS0131: The left-hand side of an assignment must be a variable, property or indexer
>
> // 변수와 상수 사용
> Console.WriteLine($"{name} - {age}");
레드플러스 - 20
>
> // 상수는 일반적으로 대문자 형태로 표현함
> const double PI = 3.14;
> const string SITE_NAME = "닷넷코리아";
> PI
3.14
> SITE_NAME
"닷넷코리아"
논리 데이터 형식(bool
)
논리 데이터 형식인 참(true
) 또는 거짓(false
) 값을 저장하려면 bool
키워드를 사용합니다. bool
키워드로 선언하는 변수는 논리형 값인 참(true
)과 거짓(false
) 정보를 저장합니다. 이를 사용하면 어떤 상태를 참과 거짓으로 구분하여 제어할 수 있습니다. bool
데이터 형식은 1
바이트의 저장 공간을 차지합니다. 1
바이트 공간을 채우는 키워드는 true
와 false
키워드입니다. bool
데이터 형식에는 true
와 false
키워드로 표현되는 2개의 값만을 저장할 수 있습니다. 이를 통해서 결과 값이 참/거짓, 예/아니요 등을 표현할 수 있습니다. bool
키워드에 해당하는 닷넷 프레임워크 형식은 System.Boolean
입니다.
논리 자료형 사용하기
이번에는 bool
변수를 사용해보겠습니다. 다음 내용을 입력한 후 실행해 보세요.
코드: BooleanDemo.cs
//[?] 논리 자료형: 참(True) 또는 거짓(False) 값 저장
using System;
class BooleanDemo
{
static void Main()
{
bool bln = true; // 참
Console.WriteLine(bln); // true => True
bool isFalse = false; // 거짓
Console.WriteLine(isFalse); // false => False
}
}
True
False
C#에서 논리 데이터 형식에 사용될 미리 정의된 키워드는 true
와 false
입니다. 다만, Console.WriteLine()
메서드를 통해서 출력되는 문자열은 True
와 False
로 표현됩니다. 참고로, C언어에서는 true
가 1
이고 false
가 0
으로 표현합니다.
닷넷 데이터 형식
문자, 문자열, 논리 데이터를 표현할 때에는 char
, string
, bool
키워드를 사용했습니다. 이에 대한 동일한 표현인 닷넷 데이터 형식은 System.Char
, System.String
, System.Boolean
입니다.
이번에는 닷넷 데이터 형식을 사용해서 변수를 만들어보겠습니다.
코드: CharStringBoolean.cs
using System;
class CharStringBoolean
{
static void Main()
{
Char c = 'A'; // char
String s = "안녕하세요."; // string
Boolean b = true; // bool
Console.WriteLine("{0}\n{1}\n{2}", c, s, b);
}
}
A
안녕하세요.
True
Char
, String
, Boolean
을 사용해서 변수를 선언하는 것도 char
, string
, bool
과 같이 동일한 표현 방식입니다.
래퍼 형식
C#에서 데이터 형식을 지정할 때 사용되는 int
, string
등의 키워드는 .NET 데이터 형식으로도 제공됩니다. 이러한 .NET 데이터 형식을 다른 말로 래퍼 형식(Wrapper Type)이라고도 합니다. 다만, 닷넷에서는 래퍼 형식 용어는 이 강의 이후로는 더 이상 사용하지 않습니다.
코드: WrapperType.cs
> // 래퍼 형식: int, string과 같은 기본 형식을 클래스 또는 구조체로 감싼 .NET 형식
> int number1 = 1234; // int 키워드: 기본 형식
> Int32 number2 = 1234; // System.Int32 구조체: .NET 형식
> $"{number1}, {number2}"
"1234, 1234"
>
> string str1 = "안녕"; // string 키워드: 기본 형식
> String str2 = "안녕"; // System.String 클래스: .NET 형식
> $"{str1}, {str2}"
"안녕, 안녕"
참고: 날짜 형식
날짜 형식은 24장에서 자세히 다룹니다. 간단히 미리 살펴보면 다음과 같습니다. 한 번 읽어보거나 C# Interactive에서 실행해본 후 넘어가도 됩니다. 참고로, DateTime
구조체라는 것이 날짜 관련 정보를 제공합니다.
코드: DateTimePreview.cs
> //[1] 날짜 전체
> DateTime.Now
[2019-09-17 오전 7:23:57]
> //[2] 각각의 항목을 나눠서 출력
> $"{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day}"
"2019-9-17"
> $"{DateTime.Now.Hour}:{DateTime.Now.Minute}:{DateTime.Now.Second}"
"7:24:21"
장 요약
이번에는 문자, 문자열 그리고 논리 형식에 대해서 다루었습니다. 간단히 데이터 형식만 사용해봤지만, 앞으로 이루어지는 모든 영역에서 더 많이 다루고 더 자세 다룰 예정입니다.