-
[레인스톤 iOS] 스위프트 easy하게 배워볼까? - 문자열과 문자(3)Swift 기초문법 2022. 2. 10. 15:41반응형
안녕하세요!
iOS개발자로 일하고있는 레인스톤입니다:)
오늘은 문자열과 문자 마지막편!
부분 문자열과 문자열 비교에 대해서 알아보겠습니다.
부분 문자열
문자열에서 일부 문자열을 가져온다면 타입이 무엇일까요?
let string = "abcde" let subString = string.prefix(3) print(subString) // abc print(type(of: subString)) // SubString
예시코드에서 확인할 수 있듯이 SubString, 즉 부분 문자열입니다.
이 부분 문자열은 메모리 관리 측면에서 이슈가 있기 때문에 잠깐 사용하는 게 아니라면 문자열로 변환해주는 게 좋습니다.
let string = "abcde" let subString = string.prefix(3) let newString = String(subString) print(type(of: newString))// String
메모리에 무슨 문제가 있길래...?
간단하게 말하면 부분 문자열은 해당 문자를 직접 가지고 있는게 아닙니다.
원본 문자열의 메모리를 참조해서 사용하는 것이죠.
결국 메모리에 원본 문자열이 모두 올라와있는 상태가 됩니다.
메모리 낭비겠죠?
메모리 낭비라는 부분 문자열을 사용하기 위해 저렇게 긴 ~ 텍스를 메모리에 다 올려둬야한다는 의미입니다.
하지만 요걸 문자열로 다시 변환한다면?
딱 사용할 텍스트만 문자열로 메모리에 올라가기 때문에 메모리 낭비 이슈를 막을 수 있습니다:)
문자열 비교
문자열 비교에는 == 혹은 != 연산자를 사용하면 됩니다.
아래 예시처럼 말이죠!
let string1 = "Hello, World!" let string2 = "Hello, World!" if string1 == string2 { print("같습니다.") // 같습니다. }
유니코드는 결합된 결과를 비교합니다.
신기하죠?
let 한1 = "한" let 한2 = "\u{1112}\u{1161}\u{11AB}" // ㅎ, ㅏ, ㄴ if 한1 == 한2 { print("같습니다.") // 같습니다. }
그럼 latinCapitalLetterA와 cyrillicCapitalLetterA는 같을까요?
let latinCapitalLetterA: Character = "\u{41}" let cyrillicCapitalLetterA: Character = "\u{0410}" print(latinCapitalLetterA) // A print(cyrillicCapitalLetterA) // A
땡 ~! 같지않습니다.
같은 유니코드 문자여도 '유니코드'가 다르다면 다른 문자로 판별합니다!
헷갈리지 마세요 ㅎㅎ
let latinCapitalLetterA: Character = "\u{41}" let cyrillicCapitalLetterA: Character = "\u{0410}" if latinCapitalLetterA != cyrillicCapitalLetterA { print("같지않습니다.") // 같지않습니다. }
끗!
길고긴 문자열편이 끝났습니다 ㅠㅠ
부분 문자열과 유니코드는 헷갈리시면 천천히 반복해서 읽어보세요!
그럼 다음 시간에 콜렉션 타입으로 찾아오겠습니다.
반응형'Swift 기초문법' 카테고리의 다른 글
[레인스톤 iOS] 스위프트 easy하게 배워볼까? - 콜렉션 타입(2) (0) 2022.02.15 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 콜렉션 타입(1) (0) 2022.02.12 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 문자열과 문자(2) (0) 2022.02.03 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 문자열과 문자(1) (3) 2022.01.29 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 연산자(2) (0) 2022.01.27