숫자 이외의 데이터 형식(bool, char, string)
숫자 이외의 데이터 형식인 문자(char
), 문자열(string
) 그리고 참 또는 거짓 값을 다뤄보도록 하겠습니다.
> // 숫자 이외의 데이터 형식: bool, char, string 등의 키워드로 숫자 이외의 데이터 저장
TIP
char
키워드는 캐릭터
, 차
, 카
중 원하는대로 발음해도 됩니다. 외국 프로그래머와 강사들의 발음을 잘 들어보면 이 세가지 중 하나를 사용합니다. 박용준 강사는 주로 캐릭터
로 발음합니다.
문자 데이터 형식 사용하기(char
)
문자형 변수는 char
키워드로 선언하고 문자 하나를 저장합니다. 문자는 작은따옴표로 둘러 쌉니다. 'A'라고 쓰는 식이죠.
다음은 C# 대화형에서 문자 하나를 담을 변수를 선언하고 사용하는 예제입니다. C# 대화형에서는 Console.WriteLine()
를 쓰지 않고 변수명만 입력해서 변수의 값을 직접 출력할 수 있습니다.
> char c = 'A';
> c
'A'
char
변수 선언 및 초기화에 대한 내용을 그림으로 표현하면 다음과 같습니다.
그림: 문자 변수 선언 및 초기화
char
키워드로 선언된 변수는 문자 하나를 저장하는 데 사용됩니다. char
데이터 형식은 영문, 한글 등 다양한 언어의 일반적인 문자를 표현할 수 있습니다. 작은따옴표('
)로 묶은 문자 하나만 저장할 수 있으며, 여러 개의 문자를 저장할 수 없습니다.
문자 변수 선언하기
이제 문자 변수에 문자를 저장하고 출력하는 내용을 살펴보겠습니다. 다음 내용을 입력한 후 실행해 보세요.
코드: 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
변수에 하나 이상의 문자를 지정하면 "문자 리터럴에 문자가 너무 많습니다."
와 같은 에러 메시지가 출력됩니다.
참고: char
와 System.Char
char
키워드에 해당하는 닷넷 형식은 System.Char
입니다. using System;
선언으로 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
> char a = 'A';
> Char b = 'B';
> $"{a}, {b}"
"A, B"
> System.Char c = 'ABC';
(1,17): error CS1012: 문자 리터럴에 문자가 너무 많습니다.
>
이스케이프 시퀀스 사용하기
이스케이프 시퀀스는 백슬래시(\
) 기호 뒤에 특정 문자를 조합하여 제어 문자를 표현하는 방식입니다. 백슬래시 기호는 사용 중인 글꼴에 따라 모양이 달라질 수 있습니다. 한글 글꼴에서는 원(₩
) 기호로 표시되고, 영문 글꼴에서는 백슬래시(\
, 역슬래시)로 표시됩니다.
이 기법은 줄 바꿈, 탭, 작은따옴표와 같은 제어 문자를 표현하는 데 주로 사용됩니다.
예를 들어, 줄 바꿈 문자인 \n
을 사용하여 콘솔 창에서 텍스트를 한 줄 내려보겠습니다.
코드: CharacterEscapeSequence.cs
char ch1 = 'A';
char ch2 = 'B';
char newLine = '\n'; // \n: 줄 바꿈 문자
Console.WriteLine("{0}{1}{2}", ch1, newLine, ch2);
A
B
\n
과 같은 이스케이프 시퀀스는 코드에서는 두 문자로 보이지만, 실행 시 하나의 문자로 인식됩니다.
C#에서의 백슬래시(\
) 기호
C#에서 백슬래시 기호는 이스케이프 시퀀스를 표현하는 특수 기호입니다. 만약, 문자열로 백슬래시 기호 자체를 표현하려면 '\\'
형식으로 백슬래시 기호 두 개를 함께 나열해야 합니다.
문자열 데이터 형식 (string
)
프로그래밍에서 가장 자주 사용하는 데이터 형식 중 하나는 문자열을 표현하는 string
입니다. string
키워드를 사용하여 문자열 데이터 형식의 변수를 선언할 수 있으며, 문자열은 반드시 큰따옴표("
)로 묶어 표현합니다. 참고로, string
은 C# 키워드이며, 닷넷의 기본 형식인 System.String
과 동일합니다.
아래는 문자열 변수를 선언하고 사용하는 간단한 예제입니다. Visual Studio의 소스 코드 편집 창에 입력한 후 실행해 보세요.
코드: StringKeyword.cs
using System;
class StringKeyword
{
static void Main()
{
string name = "박용준";
Console.WriteLine("안녕하세요. {0}입니다.", name);
}
}
안녕하세요. 박용준입니다.
문자열은 하나 이상의 문자로 구성되며, 큰따옴표로 묶어서 표현됩니다. 문자열을 담는 string
변수는 C#에서 기본적으로 제공하는 데이터 형식으로, 앞으로 다양한 상황에서 가장 많이 사용하게 될 변수 형태 중 하나입니다.
@
기호를 사용하여 여러 줄 문자열 저장하기
C#에서 축자(Verbatim) 문자열은 @
기호를 사용하여 선언하며, 줄 바꿈과 공백을 포함한 문자열을 그대로 저장할 수 있을 뿐만 아니라, 일반적으로 사용하는 이스케이프 시퀀스(\n
, \t
등)도 해석되지 않고 문자 그대로 저장되며, 큰따옴표("
)를 포함하려면 연속된 두 개의 큰따옴표(""
)를 사용해야 합니다.
다음은 축자 문자열의 사용 예제입니다.
코드 예제: MultiLineString.cs
using System;
class MultiLineString
{
static void Main()
{
string multiLines = @"
안녕하세요.
반갑습니다.
";
Console.WriteLine(multiLines);
}
}
출력 결과:
안녕하세요.
반갑습니다.
추가로 다음 내용도 작성 후 실행해보세요.
// 일반 문자열
string path1 = "C:\\Users\\VisualAcademy";
Console.WriteLine(path1); // 출력: C:\Users\VisualAcademy
// 축자 문자열
string path2 = @"C:\Users\VisualAcademy";
Console.WriteLine(path2); // 출력: C:\Users\VisualAcademy
// 큰따옴표 포함
string quote = @"""VisualAcademy""";
Console.WriteLine(quote); // 출력: "VisualAcademy"
축자 문자열은 디렉터리 경로, 자바스크립트 코드 블록, 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.Format()
메서드 또는 문자열 연결 연산자를 사용했습니다. 그러나 C# 6.0부터는 문자열 보간법(string interpolation)을 제공하여 $"{}"
형태로 간결하게 문자열을 묶을 수 있게 되었습니다. 문자열 보간법은 "보간된 문자열" 또는 "문자열 템플릿"이라고도 불리며, 코드 가독성을 높이고 중복 내용을 효과적으로 처리할 수 있어 매우 유용합니다.
문자열 보간법의 기본 사용법
문자열 보간법에서는 $
기호를 문자열 앞에 붙이고, 문자열 내부에서 중괄호({}
)를 사용하여 변수나 표현식을 직접 삽입할 수 있습니다.
> string message = "Hello";
> $"{message}"
"Hello"
String.Format()
메서드로 문자열 묶기
전통적으로 String.Format()
메서드를 사용하여 문자열을 묶을 수 있습니다. 이 메서드는 {0}, {1}, {2}
와 같은 자리 표시자를 사용하며, 뒤에서 제공된 값을 문자열에 삽입합니다.
코드 예제: StringFormatDemo.cs
> // String.Format() 메서드 예제
> string msg = string.Format("{0}님, {1}", "홍길동", "안녕하세요.");
> Console.WriteLine(msg); // 홍길동님, 안녕하세요.
홍길동님, 안녕하세요.
문자열 보간법
문자열 보간법은 String.Format()
메서드보다 간단하고 직관적으로 변수를 문자열에 포함할 수 있는 방법을 제공합니다.
코드 예제: StringInterpolationDescription.cs
> // 문자열 보간법 예제
> int number = 3;
> string result = "홀수";
> Console.WriteLine($"{number}은(는) {result}입니다.");
3은(는) 홀수입니다.
문자열 보간법에서 중괄호 안에 작성된 변수나 표현식은 모두 문자열로 처리됩니다.
문자열 묶는 다양한 방법 비교
C#에서는 문자열을 묶어서 출력할 수 있는 여러 가지 방법을 제공합니다. 아래는 문자열 묶기를 위한 주요 방법들을 비교한 예제입니다.
코드 예제: StringInterpolation.cs
> string message = "String Interpolation";
>
> // WriteLine() 메서드의 자리 표시자 사용
> Console.WriteLine("Message: {0}", message);
Message: String Interpolation
>
> // 문자열 연결 연산자 사용
> Console.WriteLine("Message: " + message);
Message: String Interpolation
>
> // String.Format() 메서드 사용
> Console.WriteLine(String.Format("Message: {0}", message));
Message: String Interpolation
>
> // 문자열 보간법 사용
> Console.WriteLine($"Message: {message}");
Message: String Interpolation
이 예제에서는 네 가지 방법 모두 사용했지만, 가장 직관적이고 간결한 문자열 보간법을 권장합니다.
문자열 묶는 방법 요약
C# 6.0부터 도입된 문자열 보간법은 $
기호와 중괄호를 활용하여 코드를 간소화합니다. 아래는 문자열 보간법과 다른 방법들을 함께 사용하는 예제입니다.
코드 예제: StringInterpolationDemo.cs
> string name = "C#";
> string version = "13.0";
>
> // WriteLine() 메서드의 자리 표시자 사용
> Console.WriteLine("{0} {1}", name, version);
C# 13.0
>
> // String.Format() 메서드 사용
> string result = String.Format("{0} {1}", name, version);
> Console.WriteLine(result);
C# 13.0
>
> // 문자열 보간법 사용
> Console.WriteLine($"{name} {version}");
C# 13.0
>
> // C# Interactive에서는 Console.WriteLine() 생략 가능
> $"{name} {version}"
"C# 13.0"
문자열 보간법을 사용하면 기존의 String.Format()
메서드나 문자열 연결 연산자를 대체하여 코드의 가독성과 간결성을 높일 수 있습니다.
변하는 값과 변하지 않는 값
프로그래밍에서 상수(Constant)는 변하지 않는 값을 저장할 때, 변수(Variable)는 변할 수 있는 값을 저장할 때 유용합니다. 문자열에 const
키워드를 붙이면 상수로 선언할 수 있습니다. 아래 예제를 통해 상수와 변수의 차이를 알아보세요. 코드에 나오는 값을 원하는 다른 문자열이나 숫자로 변경해 실행해 보세요.
코드 예제: Immutable.cs
> // 상수: 변하지 않는 값
> const string name = "백두산";
>
> // 변수: 변하는 값
> int age = 102;
>
> $"이름: {name}, 나이: {age}"
"이름: 백두산, 나이: 102"
용어 정리로, Mutable은 '변할 수 있는' 값을 의미하며, 변수(Variable)를 나타냅니다. 반면 Immutable은 '변경할 수 없는' 값을 의미하며, 상수(Constant)를 나타냅니다.
이 두 용어는 프로그래밍에서 반드시 이해해야 할 핵심 개념이므로, 영어로도 기억해 두는 것이 좋습니다. 상수는 한 번 정의되면 변경할 수 없는 값을 의미하며, 변수는 언제든지 값을 변경할 수 있는 값을 의미합니다.
실수와 문자열을 저장하는 상수
실수 데이터와 문자열 데이터를 저장하는 상수를 사용해보겠습니다. 다음 내용을 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
)
논리 데이터 형식(bool
)은 참(true
) 또는 거짓(false
) 값을 저장할 때 사용됩니다. 이를 위해 bool
키워드를 사용하며, 논리형 변수는 특정 상태를 참과 거짓으로 구분하여 제어하는 데 유용합니다. bool
데이터 형식은 1바이트의 저장 공간을 차지하며, true
와 false
라는 두 가지 값만 저장할 수 있습니다. 이를 통해 참/거짓, 예/아니요 등의 논리적 결과를 표현할 수 있습니다. bool
키워드는 닷넷 프레임워크의 System.Boolean
형식과 동일합니다.
논리 자료형을 사용하는 방법을 알아보겠습니다. 아래 코드를 입력하고 실행해 보세요.
코드 예제: 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
등의 키워드는 닷넷의 데이터 형식으로도 제공됩니다. 이러한 닷넷 데이터 형식을 **래퍼 형식(Wrapper Type)**이라고도 합니다. 래퍼 형식은 기본 데이터 형식을 클래스 또는 구조체로 감싼 형식을 의미합니다. 다만, 닷넷에서는 "래퍼 형식"이라는 용어를 공식적으로 많이 사용하지 않습니다.
코드: WrapperType.cs
> // 래퍼 형식: 기본 형식을 클래스 또는 구조체로 감싼 .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}"
"안녕, 안녕"
참고: 날짜 형식
날짜 형식은 이후 22장에서 자세히 다룰 예정입니다. 간단히 예제를 통해 미리 살펴보겠습니다. 아래 코드를 읽어보거나 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"
장 요약
이번 장에서는 문자, 문자열, 논리 데이터 형식에 대해 살펴보았습니다. 닷넷 데이터 형식과 래퍼 형식의 개념을 간단히 소개했으며, 이를 코드로 실습했습니다. 앞으로 더 많은 영역에서 이러한 데이터 형식을 사용하고, 더 깊이 다룰 예정입니다.
퀴즈
C#에서 문자를 표현하는 데 사용되는 데이터 형식은 무엇인가요?
a.char
b.short
c.float
d.double
정답: a.char
해설: C#에서 문자는char
데이터 형식을 사용하여 표현됩니다.C#에서 논리값을 표현하는 데 사용되는 데이터 형식은 무엇인가요?
a.bool
b.int
c.double
d.float
정답: a.bool
해설: C#에서 논리값(참/거짓)은bool
데이터 형식을 사용하여 표현됩니다.문자열 보간법을 사용할 때는 어떤 기호를 사용해야 합니까?
a.$
b.%
c.#
d.@
e.&
정답: a.$
해설: 문자열 보간법은$
기호를 사용하여 문자열 내부에서 변수나 표현식을 직접 참조할 수 있도록 합니다.문자열 보간법을 사용할 때, 변수를 사용할 때의 형식은 어떻게 되어야 합니까?
a.int
변수
b.string
변수
c.var
키워드로 선언된 변수
d. 어떤 형식이든 상관없이 사용할 수 있습니다.
e.bool
변수
정답: d. 어떤 형식이든 상관없이 사용할 수 있습니다.
해설: 문자열 보간법은 문자열 내에서 다양한 데이터 형식의 변수나 표현식을 참조할 수 있기 때문에 변수의 형식에 제한이 없습니다.
1.1 퀴즈
(1) 변수에 문자를 저장하는 올바른 방법을 고르세요.
a. char ch = A;
b. char ch = "A";
c. char ch = 'A';
d. char ch = 65;
정답: c
C#에서 문자 하나를 저장할 때는 작은따옴표(
'
)로 묶어서 저장해야 합니다.
"A"
는 문자열(string)이며, 작은따옴표('
)가 필요합니다.
(2) 줄 바꿈 문자로 올바른 것을 고르세요.
a. '\n'
b. '\r'
c. '\t'
d. '\\'
정답: a
이스케이프 시퀀스(escape sequence) 중에서 줄 바꿈을 표현하는 문자는
'\n'
입니다.
'\r'
→ 캐리지 리턴(carriage return)'\t'
→ 탭(tab)'\\'
→ 백슬래시(\
)
(3) 문자열 변수를 선언할 때 사용하는 키워드는 무엇인가요?
정답: string
또는 System.String
C#에서 문자열을 저장할 때는
string
또는System.String
을 사용합니다.
string message = "Hello";
System.String message = "Hello";
(4) 상수를 선언하는 올바른 방법을 고르세요.
a. int num = 1234;
b. const double PI = 3.14;
c. const MAX = 1234;
d. string SITE_NAME const;
정답: b
상수(
const
)는 선언과 동시에 초기화해야 합니다.
const double PI = 3.14;
(✔)const MAX = 1234;
→ 자료형이 없으므로 오류string SITE_NAME const;
→const
키워드가 잘못된 위치
1.2 연습문제: 이스케이프 시퀀스 사용하기
다음 소스 코드를 완성하여 "Hello"와 "World"가 각 줄에 출력되도록 하세요.
코드
using System;
class CharacterPractice
{
static void Main()
{
char ch = '\n';
Console.WriteLine("Hello{0}World", ch);
}
}
실행 결과
Hello
World
정답
'\n'
해설
- 이스케이프 시퀀스(
'\n'
) 는 줄 바꿈을 표현하는 문자입니다. char ch = '\n';
를 이용해 줄 바꿈을 적용할 수 있습니다.- 만약 탭 간격을 띄우고 싶다면
'\t'
를 사용할 수 있습니다.
1.3 연습문제: 리터럴 사용하기
다음 소스 코드를 완성하여 "가 HELLO 3.14" 가 출력되도록 하세요.
코드
using System;
class LiteralPractice
{
static void Main()
{
char c = '가';
string s = "HELLO";
float f = 3.14F;
Console.WriteLine("{0} {1} {2}", c, s, f);
}
}
실행 결과
가 HELLO 3.14
정답
(1) '가'
(2) "HELLO"
(3) 3.14F
해설
- 문자 리터럴 → 작은따옴표(
'
)로 묶음char c = '가';
- 문자열 리터럴 → 큰따옴표(
"
)로 묶음string s = "HELLO";
- Float형 실수 리터럴 →
F
접미사 필요float f = 3.14F;