SqueakByExample:8.4
문자열 (Strings)
문자열 또한 카테고리 Collection-String에서 정의됩니다. 하나의 문자열은(string) 오직 문자들만(characters) 붙잡고 있는(hold) 색인화된 컬렉션(indexed Collection)입니다.
사실, 문자열(String)은 추상적(abstract)이고, 스퀵 문자열은 사실상 실체적 클래스(the concrete class) ByteString의 인스턴스입니다.
'hello world' class ⇒ ByteString
다른 중요한 문자열(String)의 서브클래스는 심볼(Symbol)입니다. 중요한 차이는 주어진 값과 함께 지금까지 심볼(symbol)의 단일 인스턴스만 존재한다는 것입니다. [이것은 때때로 “고유한 인스턴스 속성(the unique instance property”로 지칭됩니다.) 반대로, 두 개의 분리 구성된 문자열(separately constructed String)은 종종 다른 오브젝트가 될 일련의 동일한 문자들을 포함할 수 있습니다.
'hel','lo' == 'hello' ⇒ false
('hel','lo') asSymbol == #hello ⇒ true
다른 중요한 차이점은 심볼(symbol)이 변할 수 없는 반면에 문자열(String)은 변할 수 있다는 것입니다.
'hello' at: 2 put: $u; yourself ⇒ 'hullo'
#hello at: 2 put: $u ⇒ error
문자열들이 컬렉션들(collections)이라는 사실을 잊어버리기가 쉽습니다. 문자열들은 컬렉션들이 이해하는 방식으로 동일한 메시지들을 이해합니다:
#hello indexOf: $o ⇒ 5
비록 문자열이 메그니튜드(Magnitude)로부터 상속된 것은 아니지만, 보통, 비교 메서드(comparising methods) <, = 등을 지원합니다. 게다가, 문자열 »match은 몇몇 기본 방울 형식 패턴 매칭(basic glob-style pattern-mathing)에 유용합니다.
'*or*' match: 'zorro' ⇒ true
레귤러 표현식들에 사용할 좀 더 고급 지원이 필요하시다면, Vassili Bykov의 Regex 패키지와 같은 여러 개의 제 3사 실행 지원들을 활용할 수 있습니다.
문자열은 여러 개의 변환 메서드들을 지원합니다. 이 메서드 중 많은 것들은 asDate, asFileName 등과 같은 다른 클래스들을 위한 바로 가기 컨스트럭터 메서드 (shortcut constructor methods)입니다. capitalized와 traslatetoLowercase와 같은 문자열을 다른 문자열로 변환시키는 여러 개의 유용한 메서드 또한 존재합니다.
문자열과 컬렉션에 대한 좀 더 많은 정보를 원하시면, 9장을 보십시오.