본문 바로가기
Flutter/Dart의 정석

[Dart의 정석] Ch2.4. 문자열(String)

by Couldi 2022. 5. 15.
반응형

22. 5. 15.

- Could -

이 글은 다트를 공부하고자 하는 모든 사람들을 위한 글이 아니다. 다트라는 언어의 전문가가 되기를 위한 사람들을 위한 글이기 때문에, 프로그래밍을 처음 공부하는 사람들이 보기에는 부적절할 수 있다. 프로그래밍의 초심자라면 본 블로그에 'Dart 입문'을 살펴보거나, 다른 컨텐츠를 찾아 공부하는 편이 더 나을 것이다.
가능한 이해하기 쉽고 일목요연하게 정리하고자 하지만, 다소 설명이 난해하거나 이해하기 어려울 수 있다. 그런 경우 댓글을 통해 궁금한 사항을 남겨두면 필자가 언젠가 보고 좀 더 상세한 설명을 덧붙일 수 있으니 많은 댓글을 바란다.
추가적으로 이 글은 Flutter(플러터)에 대해 다루지 않는다. Dart에 대한 내용만을 다룰 예정이다.

1. 문자열(String)

문자열을 따옴표를 이용해 표시한다. 변수에 담기위해서는 아래와 같이 사용한다.

// 문자열
'따옴표를 사용해서 문자열임을 나타낸다'
"쌍따옴표를 써도 문자열이다."
'123' // 이건 숫자가 아니라 문자열이다.

// name 변수에 'James'라는 문자열을 담기
String name = 'James';

 

2. 문자열 더하기(String concatenation)

String firstName = 'James';
String lastName = 'Potter';

print(firstName);
print(lastName);

앞서 다루었던 James를 다시 한번 불러보았다. 이번에는 firstName, lastName 이라는 변수를 만들어 각각 'James'와 'Potter'를 집어넣었다. 이름을 합쳐서 출력하고 싶으면 어떻게 작성해야 할까?

 

print('My name is ' + firstName + ' ' + lastName + '.');

이런식으로 + 기호를 이용해서 작성한다. 그러면 결과는 My name is James Potter. 로 나오게 된다.

하지만 이 방식을 권장하고 싶지는 않다. 무엇보다도 가독성이 많이 떨어지니까.

 

3. 문자열 보간법(String interpolation)

위 방식보다 추천하는 방법은 아래와 같은 방식이다. 문자열 보간법이라고도 하는데.. 용어는 크게 중요치 않다. 

print('My name is $firstName $lastName.');

사용하고 싶은 변수명 앞에 $(dollar sign)을 붙이는게 마법의 시작이다. $ 기호를 이용해 해당부분이 변수라는 걸 표시한다. 아래와 같은 방식도 가능하다.

print('My name is ${firstName} ${lastName}.');

위의 방식과 차이가 있다면 { } 기호가 들어간 점인데, 이부분은 { } 안의 변수에 간단한 연산을 하거나 인스턴스에서 특정 값을 가져올 때 사용한다. 지금은 { }가 있어도 되고, 없어도 된다고 생각하자.

DartPad는 친절하게도, 오른쪽 하단의 info를 통해 { } 기호가 현재상황에서 쓸모 없다는걸 알려준다.

4. Escape String(이스케이프)

보통 '이스케이프 문자'라고 많이 부른다. 문자열에서 특수기호를 표시하고 싶을때 사용하는 방법이다. 프로그래밍 언어에서 몇몇 특수기호들을 특정 역할을 하고 있기 때문에 문자열 그대로 표시하고자 한다면 특별한 표시가 필요하고 이때 사용하는 기호가 \(역슬래시) 기호이다. 예를 들어, 불멸의 영어문장인 I'm a boy, You're a girl 을 문자열로 표시해보자.

print('I'm a boy, You're a girl');

영어문장 자체도 끔찍하지만 ' ' 사이에 있는 부분만 문자로 인식하도록 약속이 되어있기 때문에 위 코드는 에러를 발생시킨다. 이 문제를 해결하기 위해서는 사실 쌍따옴표를 사용하면 된다.

print("I'm a boy, You're a girl");

쌍따옴표 사이에 있는 부분을 문자열로 인식하도록 되어 있어 ' 기호 역시 문자열로 인식되었다. 하지만 이런 경우는 특별한 케이스이므로, 내가 원하는 특수문자를 표시하기 위해 역슬래시 기호를 사용해 보자.

print('I\'m a boy, You\'re a girl');

가독성은 위의 방식보다 좀 떨어지지만 이 역시 제대로 출력된다.

 

그렇다면 문자열로 C:\Users\could\Documents 라는 경로를 출력해보자.

이때 문자열로 \(역슬래시)가 포함되어 있기 때문에 이를 print문에 출력하려면 아래와 같이 작성해야한다.

print('C:\\Users\\min\\Documents');

왜 역슬래시를 두개씩 입력하지 싶겠지만, 첫번째 역슬래시는 escape를 뜻하는 부분이고 두번째 역슬래시는 문자열로 표시할 특수기호이다. 하지만 경로가 길어지면 정말 번거롭고 귀찮으며, 가독성이 떨어지는 일이다.

 

raw String

조금 특이한 방식의 문자열 출력법이지만, 이름그대로 raw String이다. 쓰여진 그대로를 출력하는 방식으로, 이 방식을 사용하면 모든 특수기호들은 자신의 기능을 잃어버리고 그저 문자열로 출력되게 된다.

print(r'C:\Users\min\Documents');

자주 쓰는 기능은 아니지만, 알고 있으면 나중에 코드를 세련되게 작성할수 있으니 기억해두자. 보이는 그대로 출력하기 바라는 문자열 앞에 r을 붙여주면 된다. 맞다. 생각대로 r은 raw의 머리글자로 사용되었다.

 

5. Mulit-line strings

여러줄의 문자열을 한번에 작성하고 싶을때 사용하는 방법이다. "를 사용해도 좋고, '를 사용해도 좋다. 연달아 세번 입력해 문자열의 시작과 끝을 표시해주자. 아래와 같이 사용하면 된다.

print("""이렇게 문자열을 작성하면
몇줄이더라도
한번에 작성을
할수가 있다.
이말이야.
""");

 

6. String의 Method

Method는 메소드라고 부른다. 함수의 일종으로 특정 기능을 하는 명령어라고 보면 된다. 문자열에 적용할 수 있는 여러가지 기능들이 있고, 여기서 몇가지 기능만 추려서 살펴보고자 한다. 어떤 기능들이 있는지 알고 싶다면 DartPad에서 문자열 변수 바로뒤에 .을 찍어보자. 그러면 아래처럼 수많은 메소드들이 모습을 드러낼것이다.

firstName 뒤에 .을 찍어 사용가능한 method 리스트를 불러보았다.

일단 이렇게 많은 것들이 있다는 것만 알아두자. 전부 알아두면 좋겠지만, 처음부터 다 알아야할 필요는 없다. 프로그래밍을 공부해가면서 한가지씩 익혀보자. 아래 4가지는 바로 알아둬서 나쁠것 없는 메소드들이다.

  • length
    데이터의 길이를 나타내준다.
  • runtimeType
    데이터의 타입을 알아봐준다.
  • toUpperCase
    문자열의 모든 문자를 대문자로 만든다.
  • toLowerCase
    문자열의 모든 문자를 소문자로 만든다.
  • contains
    문자열 안에 특정 문자 혹은 문자열이 있는지 확인하여, 있으면 true, 없으면 false를 반환한다.
  • replaceAll
    문자열 안에 특정 문자 혹은 문자열을 찾아 원하는 문자 혹은 문자열로 바꾼다.

위 내용을 확인하고 싶다면 직접 DartPad에서 시도해보기 바란다.

 

 

반응형

댓글