iOS/면접 질문

[ iOS 면접 질문 ] Swift의 문자열(String) 다루기와 관련된 주요 기능은 무엇이 있나요?

Sheep1sik 2025. 5. 20. 09:45
반응형

Swift의 문자열(String) 다루기와 관련된 주요 기능은 무엇이 있나요? 

Swift의 String 타입은 유니코드 규격을 완전히 지원하며, 다양한 언어, 이모지, 조합 문자 등도 정확하게 처리할 수 있도록 설계되어 있습니다.
String은 Character 타입의 컬렉션이며, 각 문자는 하나 이상의 유니코드 스칼라로 구성될 수 있습니다.
인덱싱은 정수(Int)가 아닌 String.Index를 사용하여 유니코드 경계를 정확하게 다루며, 문자열 연결(+), 분할(split), 결합(joined), 접두사/접미사 검사(hasPrefix, hasSuffix), 공백 제거(trimmingCharacters), 대소문자 변환(uppercased, lowercased) 등의 다양한 문자열 조작 기능을 제공합니다.

 

서브스트링(Substring)과 문자열의 차이점은 무엇인가요? 

Swift에서 Substring은 String의 일부를 잘라낼 때 생성되는 타입입니다.

겉보기에는 String과 거의 동일하게 동작하지만, 근본적으로는 메모리를 관리하는 방식에 차이가 있습니다.
Substring은 원본 String의 전체 메모리를 계속 참조하기 때문에, 겉으로는 일부 문자만 사용하는 것처럼 보여도 실제로는 전체 문자열이 메모리에 유지됩니다. Swift 공식 문서에서도 “Substring은 특정 작업을 수행할 때만 잠깐 사용하는 것이 좋고, 장기적으로 저장하는 용도로는 적합하지 않다”고 명확히 안내하고 있습니다. 그렇지 않으면, 이미 접근할 수 없는 문자열이 계속 메모리에 남아 메모리 누수처럼 보이는 현상이 생길 수 있기 때문입니다.

따라서 오랫동안 보관해야 하는 경우에는 Substring을 String으로 명시적으로 복사해서 사용하는 것이 더 안전한 방식이라 생각됩니다.

 

문자열 보간법(String Interpolation)을 사용하는 방법과 주의 사항을 설명해주세요. 

Swift에서 문자열 보간은 문자열 안에 변수나 표현식의 결과를 바로 삽입할 수 있는 기능입니다. 예를 들어 "제 나이는 \(age)살입니다"처럼, \() 안에 값을 넣으면 문자열로 자동 변환되어 전체 문장 안에 들어가게 됩니다.

이 기능은 단순히 값을 연결하는 것보다 훨씬 간결하고, 가독성이 뛰어난 게 장점이라고 생각합니다.

Swift 내부에서는 이 기능을 StringInterpolationProtocol이라는 프로토콜을 통해 처리하기 때문에, 커스텀 타입도 어떻게 문자열로 표현될지 직접 정의할 수 있습니다.
저의 경우 로그 메시지 출력이나 사용자 알림 문구를 만들 때 자주 사용한 것 같습니다.

다만 한 가지 주의할 점은, \() 안에 너무 복잡한 연산이나 부작용 있는 코드를 넣는 건 피해야 합니다. 예를 들어 API 호출이나 디스크 접근 같은 작업이 보간 안에 들어가면, 성능 저하나 예측하기 어려운 문제로 이어질 수 있기 때문입니다.

 

 

정규식(Regular Expression)을 사용하여 문자열을 다루는 방법을 설명해주세요.

Swift에서는 NSRegularExpression 클래스를 사용해 문자열에서 특정 패턴을 검색하거나 유효성을 검사할 수 있습니다.

정규식 패턴 문자열로 NSRegularExpression 객체를 생성하고, firstMatch(in:options:range:) 메서드를 통해 해당 문자열이 패턴과 일치하는지를 확인할 수 있습니다.

예를 들어 회원가입 페이지에서 이메일 유효성 검사, 비밀번호 유효성 검사에서 해당 NSRegularExpression를 사용할 수 있습니다.
반응형