SqueakByExample:8.4

From 흡혈양파의 번역工房
Jump to navigation Jump to search

String

String 또한 Collection-String 카테고리에 정의되어 있습니다. 하나의 String 은 오직 character 들만 가지고 있는 색인화된 Collection 입니다.

그림 8.2: 문자열 계층도


사실, String 은 추상클래스이며, 스퀵의 String 은 사실상 실제하는(concrete) 클래스 ByteString 의 인스턴스입니다.

'hello world' class        ByteString


다른 중요한점은 String 의 서브클래스는 Symbol 이라는 것입니다. 중요한 차이점은 Symbol 의 인스턴스는 하나의 값에 대해 하나만 존재하다는 점이죠.(이는 때때로 "고유 인스턴스 속성" 으로 불리기도 합니다.) 한편 개별로 생성되었지만 우연히 같은 문자열을 가지는 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


문자열들이 Collection 이라는 사실을 잊어버리기가 쉽습니다. 문자열들은 Collection 들이 이해하는것과 동일하게 메시지를 이해합니다:

#hello indexOf: $o        5


비록 String 이 Magnitude 에서 상속된 것은 아닙니다만, 일반적으로, 비교 메서드인 <, = 등을 지원합니다. 게다가, String>>match 는 기본적인 glob-style 패턴 비교에 유용합니다.

'*or*' match: 'zorro'        true


정규 표현식에 사용할만한 보다 나은 지원이 필요하다면, Vassili Bykov 의 Regex 패키지같은 여러 가지 서드파티등을 활용할 수 있습니다.

문자열은 여러가지 변환 메서드들을 지원합니다. 이 메서드 중 대부분은 asDate, asFileName 등과 같은 다른 클래스들을 위한 shortcut 생성자 메서드 입니다. capitalized 와 traslatetoLowercase 와 같이 문자열을 다른 문자열로 변환시키는 여러가지 유용한 메서드들도 있습니다.

문자열과 컬렉션에 대한 좀 더 많은 정보를 원하시면, 9장을 보십시오.


Notes