티스토리 뷰

구분자 문법

: 일반적인 문자열, 배열, 정규표현식 외에 구분자를 이용하여 만드는 문자열을 리터럴이라고 한다. 리터럴은 %문자로 시작하고 그 다음에 하나의 문자가 따라온다.


구분자 종류

종류 

뜻 

참조 

%q

작은 따옴표로 묶인 문자열 

 

%Q, q 

큰 따옴표로묶인 문자열 

 

%w 

토큰의 배열 

 

%r 

정규표현식 패턴 

 

%ㅌ 

셀 명령어 

 





정수와 부동소수점

루비에서의 정수는 2가지 종류이다. Fixnum, Bignum


Fixnum이 범위를 초과할 때마다, 그 객체는 자동으로 Bignum 객체로 변환된다.


입력 숫자

변환 

타입 

 비고

123456 

123456 

Fixnum 

 

 0d123456

 123456

Fixnum

 

 123_456

 123456

 Fixnum

 밑줄(언더바)는 무시한다.

 -543

 -543

 Fixnum

 음수

 0xaabb

 43707

 Fixnum

 0x는 16진수

 0377

 255

 Fixnum

 0은 8진수

 -0b10_1010

 -42

 Fixnum

 0b는 2진수

 123_456_123_456

 123456123456

 Bignum

 

 

 

 

 



Array 배열


Array란

- 같은 종류의 값들을 한 변수에 넣어둘 때 사용함

- [](대괄호)를 사용하여 묶고, ,(쉼표)를 사용하여 배열 안에 들어가는 개별요소를 구분함


Array 선언하기

1) 변수명 = [요소, 요소, 요소]

2) 변수명 = Array.new. # => 빈 배열의 변수를 만듬

3) 변수명 = Array.new(요소개수) {Hash.new} # =>  { {}, {}, {}, {} }

4) 변수명 = Array.new(3) {Array.new(4)} # => [[1,2,3,4번째 요소], [1,2,3,4번째 요소], [1,2,3,4번째 요소]]


배열: array = [1, 2, 3, 4, 5]


1) array.at(0) : 결과값 1. 배열에 포함되어 있는 요소를 꺼내기 위해 사용하는 메서드. index가 음수일 경우 마지막부터 꺼내옴.


2) array.first/ array.last - 결과값 1과 5. 배열의 첫번째, 마지막 요소를 꺼내온다. 파라메터로 숫자를 넘길 경우 첫번째 + n개까지 리턴받음


3) array.take(2) : 결과값 [1, 2]. 배열의 첫번째 요소에서 n-1번째까지 꺼내기 위한 메서드. 리턴 형태는 배열.


4) array.drop(2) : 결과값 [3, 4, 5]. 첫번째요소부터 n-1번째까지 배열에서 없앨 때 사용하는 메서드.


5) array.length / array.count : 결과값 5. 배열의 크기(요소 포함의 크기)를 알아보기 위한 메서드


6) array.empty? : 결과값 false, 배열에 요소들이 있는지 없는지 체크하기 위한 메서드(nil과 다름)


7) array.push(7) : 결과값 [1, 2, 3, 4, 5, 7]. 배열의 요소로 n을 "마지막"위치에 넣을 때 사용하는 메서드


8) array >> 7 : 7번과 같은 용도로 사용.


9) array.unshift(3) : 결과값 [3, 1, 2, 3, 4, 5]. 배열의 첫번째 요소에 원하는 값을 넣을 때 사용하는 메서드


10) array.insert(2, '추', '가', '값') : 결과값[1, 2 , '추', '가', '값', 3, 4, 5]. 원하는 배열 index 위치에 값을 넣을 때 사용하는 메서드.(요소의 개수 상관 X).


11) array.pop : 결과값 [1,2,3,4]. 배열 요소 마지막 번째를 없애고 리턴할 때 사용하는 메서드.(pop이라는 메서드명처럼 하나를 톡하고 내친다.)


12) array.shift : 결과값 [2, 3, 4, 5]. 배열 요소 첫번째를 없애고 리턴할 때 사용하는 메서드.


13) array.uniq : 배열 요소 중 중복되는 것이 있으면 중복요소를 하나로 모은 뒤 나머지는 다 삭제하고 리턴.





해시

: 루비 해시 리터럴은 중괄호 사이에 키/값 짝들을 둠으로써 만들수 있다. 

ex) 키 => 값.  => 기호를 사용한다.

color = {

"red" => 0xf00,

"green" => 0x0f0,

"blue" => 0x00f

}


해시 키에 대한 요구사항

1) 클래스는 키로 쓰기에는 불편하다. 왜냐하면 그들의 내용에 따라서 해시 값이 바뀌기 때문이다

--> 키로 사용한 객체를 외부참조하면, 참조를 이용해 객체를 바꾸면 해시코드가 변경된다.

ex) hello = @user.  color = { hello => "red" }. 만약에 hello라는 변수가 @book을 참조하는 것으로 변경하게 되면, 결국 "red"를 검색할 수 없게 된다.


2) String을 해시 키로 할 경우 : 해시는 문자열을 내부적으로 복제. 이 복사본을 키로 이용하고 freeze를 해버린다. 결국 원래 문자열이 바뀌어도 해시에는 영향을 끼치지 않는다.


** 직접 작성한 클래스를 해시 키 인스턴스로 이용할 경우

1) 키로 사용하는 객체의 해시는 일단 객체가 생성된 이후에는 바뀌지 않아야 한다.


2) 아니면, 키 해시가 바뀔 때마다 해시를 다시 색인하기 위해 Hash#rehash 메서드를 호출하는 것을 잊지마라.



심벌

심벌에 대한 좋은링크

심볼은 가벼운 문자열이 아니다

많은 루비 뉴비들은 심볼을 이해하는데 어려워하고, 어디에 사용하는 것인지 궁금해 합니다.

심볼은 최선의 아이덴티티라고 할 수 있습니다. 심볼은 무엇인지에 대한 것이 아니라 누구인지에 대한 것입니다. irb에서 차이점을 확인해 보세요.

irb(main):001:0> :george.object_id == :george.object_id
=> true
irb(main):002:0> "george".object_id == "george".object_id
=> false
irb(main):003:0>

object_id 메서드는 객체의 아이덴티티를 반환합니다. 만약 두 객체가 같은 object_id를 가진다면 두 객체는 같습니다(메모리 안의 같은 객체를 가리킵니다).

보시다시피, 심볼을 한 번 사용하면, 같은 문자열을 사용하는 모든 심볼은 메모리 안의 같은 객체를 참조합니다. 어떤 두 심볼이 같은 문자들을 가지고 있다면, object_id는 일치하게 됩니다.

이제 문자열 (“george”)를 살펴봅시다. object_id가 일치하지 않습니다. 이 말은 메모리 안의 다른 객체를 참조하고 있다는 뜻입니다. 새로운 문자열을 사용할 때마다, 루비는 매번 메모리에 할당 합니다.

심볼을 사용해야 할지 문자열을 사용해야 할지 결정해야 한다면, 무엇이 더 중요한지 생각해보세요. 객체의 아이덴티티가 중요한 경우(예를 들어 해시 키로 사용할 때)나 내용이 중요할 때(위에 있는 예제처럼 “george”)로 나눌 수 있습니다.

위와 같이 심볼은 동일한 문자열을 여러번 조회할 때 String 객체보다 유용합니다. 


심볼을 선언하는 방법은 문자열 앞에 ":" 콜론 기호를 붙이면 됩니다.

:Object

:my_variable

:"Ruby rules"

a = "cat"











































































댓글