문자열 비교

썹스·2022년 12월 13일
0

Swift 문법

목록 보기
56/68

문자열 비교

📌 간단한 비교

비교 연산자를 사용하여 문자열을 간단하게 비교를 할 수 있습니다.

비교 연산자를 사용할 때는 각 문자열의 첫 번째 문자의 유니코드 값을 비교하여 논리값을 반환합니다.

var x = "hello"
var y = "Hello"

x == y  // false
x < y   // false
x > y   // true

📌 문자열 메서드를 사용한 비교

문자열을 간단하게 비교하여 논리값을 반환 받고 싶을 때는 비교연산자를 사용합니다.

하지만 문자열의 대소문자 등을 생각해야 하는 경우 또는 구체적인 결괏값을 반환받고 싶을 때는 문자열 메서드를 사용한 방법이 좋습니다.

✅ 대/소문자를 무시하고 비교하는 메서드 caseInsensitiveCompare()

문자열.caseInsensitiveCompare(비교할 문자열)

caseInsensitiveCompare() 메서드의 반환 타입은 부울(Bool) 타입이 아닌 "ComparisonResult" 타입입니다. (ComparisonResult은 열거형 타입입니다.)

  • 대/소문자를 무시한 상태에서 문자열이 같으면 orderedSame
  • 대/소문자를 무시한 상태에서 비교 대상의 유니코드값이 크면 orderedAscending
  • 대/소문자를 무시한 상태에서 비교 대상의 유니코드값이 작으면 orderedDescending
var x = "A"
var y = "a"
x.caseInsensitiveCompare(y)             // NSComparisonResult
x.caseInsensitiveCompare(y).rawValue    // 0

var x2 = "A"
var y2 = "B"
x2.caseInsensitiveCompare(y2)           // NSComparisonResult
x2.caseInsensitiveCompare(y2).rawValue  // -1

var x3 = "AB"
var y3 = "A"
x3.caseInsensitiveCompare(y3)           // NSComparisonResult
x3.caseInsensitiveCompare(y3).rawValue  // 1

✅ 문자열의 일치 여부를 비교/확인하는 메서드 compare()

문자열.compare(비교하려는 문자열)
문자열.compare(비교하려는 문자열, option: 원하는 옵션(생략 가능))

compare() 메서드 또한 부울(Bool) 타입이 아닌 "ComparisonResult" 타입입니다. (ComparisonResult은 열거형 타입입니다.)

위에서 설명한 caseInsensitiveCompare()메서드는 기본적으로 대/소문자를 무시하는 기능을 가지고 있지만, compare()메서드는 아무런 기능 없이 단순 문자열만 비교하는 메서드 입니다. (옵션을 추가하면 다양한 방식의 문자열 비교가 가능합니다.)

  • 대/소문자를 무시한 상태에서 문자열이 같으면 orderedSame
  • 대/소문자를 무시한 상태에서 비교 대상의 유니코드값이 크면 orderedAscending
  • 대/소문자를 무시한 상태에서 비교 대상의 유니코드값이 작으면 orderedDescending
var x1 = "hello"
var y1 = "hello"
x1.compare(y1).rawValue  // 0    h = h


var x2 = "zello"
var y2 = "hello"
x2.compare(y2).rawValue  // 1    z > h


var x3 = "aello"
var y3 = "hello"
x3.compare(y3).rawValue  // -1   a < h

compare()메서드에 옵션 파라미터를 추가하면 다양한 방식의 문자열 비교가 가능합니다.

var x = "hello"
var y = "Hello"
x.compare(y, options: .caseInsensitive).rawValue  // 0

옵션의 종류는 아래와 같습니다.

옵션기능
.caseInsensitive대소문자 무시
.regularExpression정규식 검증
.numeric숫자 전체를 인식
.diacriticInsensitive숫자 전체를 인식
.numeric발음기호 무시

이 외에도 다양한 옵션이 존재합니다.

🤔 문자열 메서드의 반환 값이 참(Ture)/거짓(False)이 아닌 복잡한 열겨형 타입일까??

caseInsensitiveCompare() 메서드와 compare() 메서드를 사용하여 반환받은 값은 열거형 타입이기 때문에 사용하기도 복잡하고 어렵다는 단점을 가지고 있습니다.

하지만 반환받은 열거형의 원시값(Raw Value)을 사용하면 참(Ture)/거짓(False)뿐만 아닌 문자열의 유니코드값까지 고려할 수 있으므로 다양하고 구체적인 형태의 코드를 작성할 수 있다는 장점을 가지고 있습니다.


요약

  • 문자열을 간단하게 비교할 때는 비교 연산자를 사용
var x = "hello"
var y = "Hello"

x == y  // false
x > y   // true
x < y   // false

  • 문자열을 구체적으로 비교하고 싶을 때는 문자열 비교 메서드를 사용(반환 타입은 열거형)
var x = "hello"
var y = "Hello"
x.caseInsensitiveCompare(y).rawValue  // 기본적으로 대/소문자를 무시하면서 비교

x.compare(y).rawValue  // 문자열 비교
x.compare(y, options: .caseInsensitive).rawValue  // 대/소문자를 무시하는 옵션을 추가
profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글