ComputerProgrammingwithGNUSmalltalk:3.6
일반 클래스와 사용법 : 1부
GNU 스몰토크는 풍부한 클래스의 집합을 제공하는 라이브러리를 가지고 있습니다. 이 장에선 가장 흔하게 쓰이는 몇몇 클래스들과 클래스의 인스턴스로 보낼 수 있는 메시지들을 보도록 하겠습니다. 수 백개의 클래스와 수 천개의 메시지가 있지만, 그것을 모두 다룰 수 없습니다. 그래도 많은 에제를 들어 GNU 스몰토크 코드에 친숙할 수 있도록 노력하겠습니다.
수
수는 컴퓨팅에서 가장 공통적으로 사용하는 자료형식 중 하나입니다. 컴퓨터들은 인간보다 빠르고 정확하게 큰 수를 만들고 다룰 수 있습니다. GNU 스몰토크는 이러한 작업을 하는 데에 많은 이점을 줄 수 있는 Number 클래스를 갖고 있습니다.
GNU 스몰토크에서 어떻게 수를 표현할까요? 여기에 수의 몇 가지 표현이 있습니다.
자연수를 종이에 적듯이 표현할 수 있습니다.
3
15
1000000
음수로 만들 때에는 자연수 앞에 하이픈 문자를 추가합니다.
-3
-15
-1000000
소수를 표현할 때에는 점을 추가합니다.
3.5
-15.7
0.1
다른 진법의 수도 표현할 수 있습니다. 단순히 기수를 (십진수로) 추가하고, 수의 앞에 r을 붙이면됩니다. (십진수 이상의 진수에서 9보다 더 큰 수를 표현하기 위해 A부터 시작하는 문자를 사용합니다.)
8r312 (십진수 202)
16r312 (십진수 786)
16rABC (십진수 2748)
GNU 스몰토크에서는 지수표기법도 사용합니다. 지수표기법에서 e 문자는 십의 지수로 사용합니다. 따라서 십의 지수를 e 문자 뒤에 써서 표현합니다.
1e2 (100과 같음)
0.3e5 (30000과 같음)
0.0015e4 (15과 같음)
GNU 스몰토크에서는 두 개의 정수를 슬래시 문자 좌우에 두는 것으로 분수를 표현할 수 있습니다. 분수는 자동으로 가능한한 단순표기됩니다.
3/5
5/3
이제 우리가 사용할 수를 어떻게 표현하는지 알았으니, 수식을 이용하여 수를 써봅시다. 기본 수학 연산으로 시작하는 것이 좋겠습니다.
+
덧셈을 위한 이항 메시지 + 가 있습니다.
3 + 5
0.3 + 0.01
-
하이픈은 뺄셈에 씁니다.
5 - 3
3 - 5
*
* 문자(x 문자가 아님)는 곱셈에 사용합니다.
2 * 3
0.1e-2 * 1e2
/
슬래시 문자는 나눗셈에 사용합니다. 정확하게 표현하기 위해 분수나 소수를 전달합니다.
50/4
0.5/5
\\
두 개의 역슬래시 문자는 나머지 연산을 위해 사용합니다.
5 \\ 3
3 \\ 3
between:and:
두 개의 수 사이에 해당하는 수가 존재하는지 여부를 between:and: 선택자를 이용하여 제어할 수 있습니다. 예를 들어, 3이 1과 5 사이에 있는지 알아보려면 다음과 같습니다.
3 between: 1 and: 5
여러분도 보시다시피 GST에서 true 라는 이름의 객체를 반환하였습니다. 이 객체는 Boolean 클래스의 인스턴스로 논리적 명령의 참/거짓을 결정하기 위해 사용합니다. 그렇다면 논리적 거짓은 어떻게 표현할까요?
3 between: 4 and: 6
여러분도 보시다시피 false라는 이름의 객체를 표시하였습니다. 4장, 예외 흐름 제어에서 이 Boolean 객체를 어떻게 사용하는지 더 상세히 설명하도록 하겠습니다.
abs
음수의 절대값을 얻기 위해 abs 메시지를 사용합니다.
-3 abs
degreesToRadians
degreesToRadians 메시지를 사용하여 각도 크기를 라디안 값으로 변환할 수 있습니다. 이 연산은 삼각함수 계산에 유용하게 사용합니다.
180 degreesToRadians:
GST는 파이를 무척 빠르고 정확하게 계산하지 않습니까?
cos
cos 메시지를 사용하여 각의 코사인 값을 계산할 수 있습니다.
180 cos
잠깐, 180의 코사인 값은 -1 아니던가요? 단위에 주의하시기 바랍니다. cos 메시지는 각도의 크기보다는 라디안의 크기를 보내주길 원합니다. 따라서 먼저 degreesToRadians로 각도를 라디안 값으로 변환한 다음에 사용해야 합니다. 조금 있다가 degreesToRadians 메시지의 결과를 어떻게 cos 메시지로 보내는지 설명하겠습니다.
negated
negated 메시지는 수의 음수값을 찾는데 사용합니다.
3 negated
주의하십시오. 만약 이미 음수인 값에 이 메시지를 보내면, 양수값을 얻게 될 것입니다.
-3 negated
raisedTo:
raisedTo: 메시지는 수의 n승 값을 구하는 데에 사용합니다.
3 rasiedTo: 4
아시다시피 어떤 수의 0승은 항상 1 입니다.
3 raisedTo: 0
GST는 멋진 분수로 음의 멱승을 계산하여 줍니다.
3 raisedTo: -2
squared
raisedTo: 2 메시지 대신에 squared 메시지를 사용하여 제곱승을 구할 수 있습니다.
3 squared
even
짝수인지 아닌지 even 메시지를 이용하여 알아낼 수 있습니다.
4 even
2222222221 even
odd
그리고 또한 홀수인지 아닌지 odd 메시지를 이용하여 알아낼 수 있습니다.
3 odd
sign
sign 메시지는 양수라면 1, 음수라면 -1을 출력합니다.
6 sign
-0.3 sign
이제 우리는 부동소수점을 사용하는 몇 개의 메시지를 볼 것입니다.
integerPart
integerPart 메시지는 부동소수점의 정수부분을 알려줍니다.
0.7 integerPart
3.1 integerPart
truncated
십진수의 버림수를 얻기 위해 truncated 메시지를 사용합니다.
17.2 truncated
이것은 반올림이 아닙니다.
17.6 truncated
반올림을 하기 위해서는...
rounded
rounded 메시지를 사용합니다.
17.6 rounded
분수에 대한 특별한 메시지들을 봅시다.
denominator
분모를 얻기 위해서 denominator 메시지를 사용합니다.
(3/4) denominator
주의할 점은 3/4에 괄호를 붙여서 썼다는 것입니다. 왜냐하면 만약 괄호를 안 썼을 경우, denominator 메시지가 단일항 메시지이기 때문에, 3/4 표현을 계산하기 전에 denominator 메시지가 처리되었을 것입니다. 이전에도 말하였지만, 단일항 메시지는 이항 메시지보다 먼저 처리하도록 되어있습니다.
numerator
분수의 분자를 얻기 위해 numerator 메시지를 사용합니다.
(3/4) numerator
setNumerator:setDenominator:
분수의 분자와 분모를 지정하기 위해, setNumerator:setDenominator: 메시지를 사용합니다.
3/4 setNumerator: 5 setDenominator: 6
이번에는 괄호를 사용하지 않았는데, 이번에는 키워드 메시지를 3/4 표현에 보내기 때문입니다. 이항 메시지는 키워드 메시지보다 먼저 처리하기 때문입니다.
문자
문자는 자료를 표현하는 단일 기호입니다. 예를 들어, 글자, %와 같은 특수문자, 9와 같은 숫자 등은 모두 문자입니다. 스몰토크에서 문자는 개별 객체입니다. 스몰토크에게 어떤 기호를 문자라고 인식시키려면, 그것 앞에 $를 붙여야 합니다. 예를 들어서
$a
$%
$9
와 같이 표현하며, 달러 기호도 문자로 사용하려면 다음과 같이 입력합니다.
$$
문자를 다루기 위한 방법은 많으며, 그 중 몇 가지를 아래에 설명하겠습니다.
asLowercase
만약 문자들을 소문자로 바꾸길 원한다면, asLowercase 메시지를 사용하십시오.
$D asLowercase
asUppercase
asLowercase의 반대 작용을 하는 메시지입니다.
$d asUppercase
isAlphaNumeric
만약 기호가 알파벳, 숫자인지 확인하려면, isAlphaNumeric 메시지를 사용할 수 있습니다.
$% isAlphaNumeric
$3 isAlphaNumeric
사용자로부터 입력을 받을 때 이러한 방법을 필요로 할 것입니다. 예를 들어 사용자가 어떤 데이터를 입력할지 알 수 없을 때에는, 이러한 방법을 사용하여서 유효한 형식인지 분별하는 데에 사용할 것입니다.
isDigit
기호가 숫자인지 확인하기 위한 메시지입니다.
$4 isDigit
$c isDigit
isLetter
글자(알파벳) 인지 아닌지 여부도 관심있을 것입니다.
$c isLetter
$4 isLetter
문자열
문자열은 여러 개의 문자객체들의 조합으로 이루어진 객체입니다. 단어, 문장, 문단 등을 표시할 때 사용합니다. 스몰토크에 문자열을 생성한다고 알려야 할 때에는 ‘(작은 따옴표)문자를 문장의 앞과 뒤에 붙여야 합니다. 예를 들어,
'Canol'
'I want a cup of coffee'
이것은 모두 문자열 객체입니다. 문자열 내에서 작은 따옴표를 표현하고 싶을 때에는 두 개의 작은 따옴표를 연속으로 사용합니다.
'Eiffel Tower''s height varies as much as six inches, depending on the temperature.'
큰 따옴표가 아니라, 2개의 작은 따옴표라는 것에 주의하여 주십시오.
프로그래머들이 문자열을 엄청나게 쓰기 때문에, 문자열에 관한 여러가지 유용한 방법들이 많습니다. 아래 선택한 몇몇 메시지들을 봅시다.
includes:
문자열 안에 지정한 문자가 들어있는지 여부를 확인하기 위해 includes: 메시지를 사용합니다.
'Canol' includes: $n
주의할 점은 대소문자를 가린다는 것입니다.
'Canol' includes: $N
indexOf:
가끔은 문자가 문자열에 있는지 여부를 아는 것만으론 충분치 않을 때가 있습니다. 어디에 있는지도 알아야 할 때가 있습니다. indexOf: 메시지는 어디에 메시지가 있는지 알려줄 수 있습니다.
'Canol' indexOf: $n
만약 문자가 존재하지 않는다면, 이 메소드는 0을 반환합니다. 문자가 하나 이상 있을 경우, 문자열에서 처음 나타난 위치를 반환합니다.
reverse
제가 스몰토크에서 좋아하는 메시지 중 하나입니다. reverse 메시지를 통해 문자열을 거꾸로 씁니다.
'.dlrow eht ni remmargorp tseb eht si lonaC' reverse
재미있지 않나요?
countSubCollectionOccurrencesOf:
다른 문자열에서 해당 문자열이 몇 번이나 있는지 알아보는 메시지입니다.
'Thomas Edison, the inventor of the light bulb, was afraid of the dark.' countSubCollectionOccurrencesOf: 'the'
만약 두 개의 문자열을 하나의 String 객체로 만들기 원한다면, ,(콤마) 문자를 문자열 사이에 두십시오.
'Best', ' friends'
실제로 여러분이 연결하기 원하는 문자열들을 원하는 만큼 붙일 수 있습니다.
'Best', ' friends', ' should', ' never', ' be', ' separated.'
asUppercase
asUppercase 메시지를 사용하여 문장 전체를 대문자로 만들 수 있습니다.
'Hey I''m talking to you!' asUppercase
그리고 asLowercase 메시지는 문장을 소문자로 변환할 것입니다. 일부러 예제를 드리진 않겠습니다.
size
size 메시지는 문자열에서 문자가 몇 개 있는지 알려주는 메시지입니다.
'There are 39 characters in this string.' size