본문 바로가기

개발/Ruby on Rails

Ruby : 기초(4) 해시와 심볼

반응형

해시

해시는 컬렉션을 지원합니다. 해시의 내부는 키와 키에 해당하는 값이 들어 있습니다.

hash = {
  :apple => "iPhone",  # 키= :apple / 값= "iPhone"
  "samsung" => "Galaxy",  # 키= "samsung" / 값= "Galaxy"
  google: "pixel"  # 키= :google / 값= "pixel"
}

예시 코드를 보시면 아시겠지만, 해시를 만들 때 값을 정의하는 방법이 총 세 가지가 있습니다.
첫 번째는 심볼이라는 값을 키로 설정하는 방법,
두 번째는 문자열을 키로 설정하는 방법,
세 번째는 첫 번째와 동일한 방법(축약 표현)입니다.

해시 : 값 추가, 접근

해시에 값을 추가할 때는 해시변수[키] = 값형식으로 넣을 수 있습니다.

hash = Hash.new
hash[:apple] = "iPhone"
hash["samsung"] = "Galaxy"

값을 접근할 때는 해시변수[키]로 접근할 수 있습니다.

puts hash[:apple]
# iPhone

심볼

심볼이란 변경이 불가능한(immutable), 유일한 객체입니다.
심볼은 선언 시 값 지정이 필요하지 않으며(자동으로 할당됩니다),
힙 영역에 저장됩니다.

a = "apple"
a.object_id # 70189275356320
b = "apple"
b.object_id # 70189275367620
# 비슷해 보이지만 ID가 다르다

b = a # b에 "apple"가 들어 있음
b.object_id # 70189275356320
# 얕은 복사가 적용됨

ap = :apple # apple이라는 심볼을 ap이라는 변수에 할당
ap # :apple
ap.object_id # 1516828
ba = :apple
ba.object_id # 1516828

심볼은 유일한 객체라는 특성을 갖고 있기 때문에 해시의 키로 사용할 수 있고,
해시의 키로 사용할 때는 축약형 표현이 가능합니다.

hash = {
  :apple => "iPhone" # 일반적인 해시의 입력 방법(키 => 값)
  samsung: "Galaxy" # 심볼을 이용한 해시의 입력 방법(세미콜론 없는 심볼: 값)
}

배열

해시와 심볼이지만 배열에 대한 정리를 깜빡해서 추가로 적습니다.
루비의 변수가 데이터 형식을 지정하지 않고 아무 데이터나 넣을 수 있듯,
배열 역시 아무런 데이터나 넣을 수 있습니다.
요컨대, 정수의 배열 안에 문자열이 들어있을 수 있으며, 배열이 들어가 있을 수도 있습니다.

arr = [ 1, "string", 3, [4, 5], 6 ]
arr[2] # "string"
arr[4] # [4, 5]

배열의 참조

루비의 배열은 정의되지 않은 부분에 대해 nil을 반환하며,
음수의 인덱스값은 뒤에서부터 읽어서 값을 반환합니다.

배열의 범위 지정

배열을 참조할 때, 범위를 지정하여 여러 데이터를 얻어올 수 있습니다.

arr = [ 1, 2, 3, 4, 5 ]
arr[1, 3] # 1부터 3개; [ 1, 2, 3 ]

push, pop

push(맨 뒤에 추가), pop(맨 뒤에 삭제) 메소드를 이용해 배열을 스택처럼 활용할 수 있습니다.

'개발 > Ruby on Rails' 카테고리의 다른 글

Ruby : 기초(6) 클래스  (0) 2020.03.14
Ruby : 기초(5) 메소드  (0) 2020.03.14
Ruby : 기초(3) 반복  (0) 2020.03.13
Ruby : 기초(2) 연산  (0) 2020.03.13
Ruby : 기초(1) 변수  (0) 2020.03.13