[Dart] String 다루기와 정규표현식

Sin_B·2023년 5월 31일
0

Dart

목록 보기
9/14

String 다루기

  • 문자열 처리

    • 결합 (+)와 ${}를 사용하는 String interpolation
      • 결합 (concatenation): 문자열을 결합하는 연산자로, 두 개의 문자열을 합쳐 하나의 문자열로 만듭니다. 예를 들어, 'Hello,' + 'World!'는 'Hellow, World!'를 생성합니다.
      • ${}를 사용하는 String interpolation: 문자열 내에 변수나 표현식을 포함시킬 때 사용됩니다. 변수 또는 표현식을 ${}로 둘러싸고, 이를 문자열 내에 포함시킵니다. 예를 들어, '이름: ${name}, 나이: ${age}'라는 문자열을 생성할 때, 변수 name과 age의 값을 해당 위치에 삽입합니다.
    • substring
      • 문자열의 일부를 떼어내는 메서드입니다. 시작 인덱스와 끝 인덱스를 지정하여, 해당 범위 내의 문자열을 반환합니다. 시작 인덱스는 포함되고, 끝 인덱스는 포함되지 않습니다. 예를 들어, 'Hello, World!'.substring(7, 12)는 'World'를 반환합니다.
    • replaceAll
      • 문자열 내에서 특정 패턴을 찾아 해당 패턴을 새로운 값으로 치환합니다. 패턴은 정규식으로 지정할 수 있습니다. 예를 들어, 'Hello, World!'.replaceAll('o', 'a')는 'Hella, Warld!'를 반환합니다.
    • split
      • 문자열을 지정된 구분자를 기준으로 분리하여 문자열 배열로 반환합니다. 예를 들어, 'apple, banana, orange'.split(',')는 ['apple', 'banana', 'orange']를 반환합니다.
    • toLowerCase / toUpperCase
      • 문자열의 대소문자를 변경합니다. toLowerCase는 모든 문자를 소문자로 변환하고, toUpperCase는 모든 문자를 대문자로 변환합니다. 예를 들어, 'Hello, World!'.toLowerCase()는 'hello, world!'를 반환합니다. toUpperCase()의 경우 'HELLO, WORLD!'를 반환합니다.
    • indexOf / contains / endsWith / lastIndexOf
      • 문자열을 검색하는 메서드입니다.
      • indexOf : 지정된 문자열 또는 문자의 첫 번째 등장 위치의 인덱스를 반환합니다. 해당 문자열 또는 문자가 존재하지 않을 경우 -1을 반환합니다.
      • contains : 지정된 문자열 또는 문자가 해당 문자열에 포함되어 있는지 여부를 반환합니다. 포함되어 있다면 true를, 그렇지 않다면 false를 반환합니다.
      • endsWith : 해당 문자열이 지정된 접미사로 끝나는지 여부를 반환합니다. 끝나면 true를, 그렇지 않다면 false를 반환합니다.
      • lastIndexOf : 지정된 문자열 또는 문자의 마지막 등장 위치의 인덱스를 반환합니다. 해당 문자열 또는 문자가 존재하지 않을 경우 -1을 반환합니다.
    • ==연산자를 사용한 문자열 비교
      • ==연산자는 두 문자열이 동일한 값을 가지는지 확인합니다. 두 문자열의 내용이 동일하면 true를, 그렇지 않다면 false를 반환합니다.
    • length / isEmpty
      • 문자열의 길이를 측정하는 메서드입니다. length 메서드는 문자열의 글자 수를 반환하고, isEmpty 메서드는 문자열이 비어 있는지 여부를 확인합니다. 비어 있다면 true를, 그렇지 않다면 false를 반환합니다.
    • trime과 replaceAll
      • trim : 문자열 앞뒤에 있는 공백을 제거합니다. 예를 들어, ' Hello, World! '.trim()은 'Hello, World!'를 반환합니다.
      • replaceAll(교체) : 지정된 패턴을 찾아 새로운 값으로 모두 치환합니다. 패턴은 정규식으로 지정할 수 있습니다. 예를 들어, 'Hello, World!'.replaceAll('o', 'a')는 'Hella, Warld!'를 반환합니다.

  • 문자열 결합 방법

  • (+)연산
    • (+)연산자는 두 개의 문자열을 합쳐서 새로운 문자열을 생성합니다.
    • 예를 들어, 'Hello'+'World'의 경우, 'HelloWorld'를 반환합니다.
    • 하지만, 반복적인 문자열 연결이 필요한 경우에는 (+)연산자가 효율적이지 않을 수 있습니다. 이 때는 StringBuffer를 사용하는 것이 더 좋습니다.
  • String Interpolation
    • Dart에서는 문자열 안에 변수나 표현식을 삽입하기 위해 ${}를 사용할 수 있습니다.
    • 변수나 표현식을 ${}로 둘러싸고, 문자열 안에 넣으면 해당 값을 문자열에 삽입할 수 있습니다.
    • 예를 들어, '이름: ${name}, 나이: ${age}'와 같이 사용할 수 있습니다.
    • String Interpolation은 코드의 가독성을 높여주고, 복잡한 문자열을 생성할 때 유용합니다.
  • StringBuffer
    • StringBuffer는 문자열을 동적으로 구축하기 위한 클래스입니다.
    • StringBuffer를 사용하면 문자열을 변경 가능한 형태로 다룰 수 있으며, 반복적인 문자열 연결에 효율적입니다.
    • StringBuffer의 append 메서드를 사용하여 문자열을 추가하고, toString 메서드를 호출하여 최종 문자열을 얻을 수 있습니다.
    • StringBuffer는 문자열 조작이 필요한 경우에 유용한 선택지입니다.

Dart에서 문자열의 결합에 (+)연산자가 느린 이유는?
(+)연산자를 사용하여 문자열을 결합할 때, 매번 새로운 문자열을 생성하는 비용(메모리)이 발생합니다. (+)연산자는 기존의 문자열에 새로운 문자열을 추가하고, 그 결과로 새로운 문자열을 반환하는 동작을 수행합니다. 이 과정에서 기존의 문자열 내용을 복사하고, 새로운 문자열을 생성하는 작업이 필요합니다. 따라서 반복적인 문자열 연결 작업에서는 이러한 복사와 생성 작업이 매우 느려질 수 있습니다.

대신에 문자열을 변경 가능한 형태로 다루기 때문에, 기존 문자열을 복사하거나 새로운 문자열을 생성하는 작업 없이 문자열을 추가하는 StringBuffer를 반복적인 문자열 연결 작업에 사용하는 것이 효율적입니다.


  • Accessor와 Mutator

  • Accessor(접근자)
    • Accessor는 객체의 속성에 접근할 수 있는 메서드 또는 속성을 말합니다.
    • 주로 객체의 속성에 대한 값을 가져오는 작업을 합니다.
    • 일반적으로 Getter라고도 불리며, 객체 내부의 상태를 반환하는 역할을 합니다.
    • Dart에서는 Getter를 정의할 때, get 키워드를 사용합니다.
    • Getter는 메서드 형태로 정의되지만, 호출 시 속성처럼 사용할 수 있습니다.
  • Mutator(변경자)
    • Mutator는 객체의 속성에 값을 설정하거나 변경하는 메서드 또는 속성을 말합니다.
    • 주로 객체의 속성에 값을 할당하거나 수정하는 작업을 수행합니다.
    • 일반적으로 Setter라고도 불리며, 객체 내부의 상태를 변경하는 역할을 합니다.
    • Dart에서는 Setter를 정의할 때, set 키워드를 사용합니다.
    • Setter는 메서드 형태로 정의되며, 호출 시 할당 연산자를 사용하여 값을 변경합니다.

정규표현식(Regular Expression)

다음에 정리..

profile
| App Developer | 제가 한 개발을 읽는 사람이 이해하기 쉽게 쓰려고 노력합니다.

0개의 댓글