7. 숫자 이외의 데이터 형식(bool, char, string)

  • 23 minutes to read

숫자 이외의 데이터 형식인 문자(char), 문자열(string) 그리고 참 또는 거짓 값을 다뤄보도록 하겠습니다.

> // 숫자 이외의 데이터 형식: bool, char, string 등의 키워드로 숫자 이외의 데이터 저장
TIP

char 키워드는 캐릭터, , 중 원하는대로 발음해도 됩니다. 외국 프로그래머와 강사들의 발음을 잘 들어보면 이 세가지 중 하나를 사용합니다. 박용준 강사는 캐릭터로 발음합니다.

7.1. 문자 데이터 형식 사용하기(char)

문자형 변수는 2 바이트의 공간에 하나의 문자를 저장합니다. 문자형 변수는 char 키워드를 사용하여 선언하고 값을 초기화할 때에는 두 개의 작은따옴표로 문자 하나를 묶어줍니다.

문자 하나를 담을 변수를 선언하고 사용하는 미리보기 샘플 코드는 다음과 같습니다. 참고로, C# Interactive에서는 Console.WriteLine() 사용 대신에 변수를 직접 출력할 수 있습니다.

> char c = 'A';
> c
'A'

char 변수 선언 및 초기화에 대한 내용을 그림으로 표현하면 다음과 같습니다.

그림: 문자 변수 선언 및 초기화

char-varible-init.png

문자 데이터 형식인 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바이트 공간을 채우는 키워드는 truefalse 키워드입니다. bool 데이터 형식에는 truefalse 키워드로 표현되는 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#에서 논리 데이터 형식에 사용될 미리 정의된 키워드는 truefalse입니다. 다만, Console.WriteLine() 메서드를 통해서 출력되는 문자열은 TrueFalse로 표현됩니다. 참고로, C언어에서는 true1이고 false0으로 표현합니다.

닷넷 데이터 형식

문자, 문자열, 논리 데이터를 표현할 때에는 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"

장 요약

이번에는 문자, 문자열 그리고 논리 형식에 대해서 다루었습니다. 간단히 데이터 형식만 사용해봤지만, 앞으로 이루어지는 모든 영역에서 더 많이 다루고 더 자세 다룰 예정입니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com