SqueakByExample:8.4

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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