Ruby / / 2022. 12. 22. 22:09

Ruby on Rails 6 : Ruby 문법 톺아보기 3 - 배열 (Array)

저번 글에서 말했다 싶이, Ruby on Rails는 Ruby를 기반으로 한 풀 프레임워크입니다. 그렇기에 어느정도 Ruby 언어에 대한 숙지가 필요합니다. 저번 글에 이어서 대략 3~4개 정도의 글을 Ruby 언어에 대한 간략한 톺아보기로 채워보려고 합니다. 이번 시간에는 배열과 이를 통한 데이터 입출력 등을 함께 보기로 하겠습니다.

배열, 즉 Array

배열의 클래스명

오늘도 역시나 irb를 틀고서 한번 클래스명을 확인해보겠습니다. "[].class"를 하면 배열의 클래스 이름을 알 수 있습니다. Ruby에서는 Array라고 나옵니다. 그렇다면 보격적으로 변수를 선언한 다음에 배열을 할당해보겠습니다. 배열 할당은 파이썬의 List와 비슷합니다. [1,2,3]으로 넣어주면 됩니다. 특히 파이썬과 닮은 점이 바로 변수의 타입에 상관없이 [1,2, "apple", "banana", 3]와 같이 넣어줄 수 있다는 점입니다.

그 외에도 특이한 점은 만약 배열 길이를 넘어가는 숫자를 인덱스로 넣어주면 보통은 에러를 띄우겠지만, Ruby의 경우는 nil을 띄워줍니다. 그 외에도 배열의 길이를 확인하는 방법으로는 variable.length 또는 variable.size인데, 이 둘의 차이에 대해서는 나중에 설명하겠습니다.

배열의 요소 추가 및 삭제, 변수에 배열 할당

파이썬의 경우 처럼 배열의 있는 요소에 접근하는 방법은 인덱스를 넣어주는 것입니다. [1,2, "apple", "banana", 3]에서 a[1]을 하면 2가 출력됩니다. a[1] = "pineapple"을 해주면 "pineapple"이 입력됩니다. 여기서 궁금증이 생깁니다. 그렇다면 길이를 띄어넘는 인덱스에 변수를 할당하면 어떻게 될까요? 예를들어 사이즈가 5개인데 a[10] = "me"같이요. 이경우 Ruby는 초과되는 사이즈만큼 nil을 넣고 10번에 "me"를 넣어줍니다.

위의 사진처럼 공간에 nil이 들어있는 것을 확인할 수 있습니다. 이처럼 Ruby의 경우 에러를 띄우기 보다는 빈 공간에 nil을 넣어주고 그만큼 배열의 길이를 늘립니다. 그 외에도 변수를 추가하는 방법은 여러가지가 있습니다.

"변수 << 값"을 해주면, 파이썬의 list.append(variable)처럼 끝자리에 새로운 값을 넣어줍니다. 그렇다면 이 배열을 변수에 할당하는 방법이 있을까요? 의외로 간단합니다.

변수를 선언과 동시에 배열을 할당하면 됩니다. 아까 설정한 배열 a를 b, c, d = a로 해주면 간단하게 배열의 요소를 변수에 넣어줄 수 있습니다. 이때 변수에 넣어지는 값의 순서는 인덱스 순서되로 할당되는데 이를 풀어보면, b = a[0], c = a[1], d = a[2]가 됩니다. 이처럼 간단하게 할당해줄수 있습니다.

배열 슬라이싱

Ruby도 다른 몇몇 언어와 마찬가지로 배열 슬라이싱을 제공합니다. 대표적으로 파이썬 처럼 지원하지요. 다만 그 방식이 파이썬하고는 조금 다릅니다. a[1,3]처럼 파이썬이 ":"으로 구분하는 것과 달리 ","으로 인덱싱을 구분합니다. 그 외에도 다양한 메소드를 지원하는데요, 대표적으로 values_at메소드가 있습니다.

위의 사진을 보시면 values_at(index_1, index_2, ...)등을 통해 index 위치를 넣어주면 값을 반환해줍니다. 그 외에도 파이썬 처럼 역 인덱스, 즉 음수 인덱스를 지원합니다. 예를들어 a = [1,2,3,4,5,6]에서 6에 접근 하는 방법으로 a[5]가 있을 수 있지만, a[-1]도 가능합니다. 그리고 이러한 방식은 슬라이싱에도 유효합니다.

 

그 외에도 Ruby의 배열은 다양한 메소드를 지원합니다. last, first, concat가 있습니다. 이름을 보면 느낌이 오실겁니다.

first, last의 경우 각각의 배열의 첫번쨰 요소 및 마지막 요소를 반환해 줍니다.

concat은 영어 concatenate의 약자로 배열을 연결해주는 역할을 합니다.

 

배열간의 연산

Ruby의 경우 배열간의 연산을 지원합니다. 집합간의 연산으로 생각해주시면 편합니다. 각 집합의 차집합, 여집합, 합집합 등을 생각하면 편합니다. 한번 직접 예시를 보겠습니다.

먼저 | 의 경우 두 배열의 합집합입니다. &의 경우 교집합 그리고 -는 차집합 연산을 합니다. 보통 이런 경우 파이썬의 set을 떠오르기 마련입니다. Ruby에도 물론 Set이 있습니다. 집합 연산을 할경우 사실 Set을 사용하는 것을 권고합니다.

Summary

이렇듯 이번 글에서는 배열과 그 메소드에 대해 알아보았습니다. 다음 시간에는 반복문 등에 대해 알아보겠습니다. 감사합니다.

728x90
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유