Array#values 메서드 추가 제안 (Feature #21615)

Feature #21615: Introduce `Array#values` - Ruby - Ruby Issue Tracking System

작성자
Ruby Weekly
발행일
2025년 09월 23일

핵심 요약

  • 1 Ruby의 Array와 Hash 컬렉션 간 값 접근 인터페이스의 일관성을 위해 Array#values 메서드 추가가 제안되었습니다.
  • 2 제안된 Array#values는 Hash#values와 동일하게 배열의 모든 요소를 포함하는 새로운 배열을 반환하도록 구현될 예정입니다.
  • 3 이 제안은 컬렉션의 덕 타이핑(duck-typing) 호환성, Array#each_value와의 비교, Set#values 확장 가능성 등 다양한 측면에서 논의되고 있습니다.

도입

Ruby 개발에서 Array와 Hash 같은 컬렉션의 값을 일관되게 처리하기 위한 새로운 기능 제안, Array#values가 논의 중입니다. 현재 Hash는 #values 메서드를 제공하지만, Array는 해당 메서드가 없어 개발자들이 타입 확인(is_a? 또는 respond_to?)을 통해 분기 처리해야 하는 불편함이 있습니다. 이 제안은 Hash#values와 유사한 Array#values를 추가하여 컬렉션 간의 일관된 인터페이스를 제공하고 코드 가독성을 향상시키는 것을 목표로 합니다.

제안 배경 및 동기

  • Hash#values를 통해 모든 값을 배열로 반환하지만, Array는 이와 같은 직접적인 메서드가 없어 컬렉션의 값을 추출할 때 불편함이 발생합니다.
  • 이는 ArrayHash 모두 #values_at을 구현하고 있다는 점에서 Array#values의 부재가 불일치로 느껴질 수 있다는 의견입니다.
  • 제안자는 input.respond_to?(:values) ? input.values : input와 같은 조건부 로직을 input.values로 단순화할 수 있다고 설명합니다.

제안 내용

  • Array 클래스에 #values 메서드를 추가하여, 해당 배열의 모든 요소를 포함하는 새로운 배열을 반환하도록 합니다.
  • 이는 Hash#values와 동일하게 원본 객체와 독립적인(새로운) 배열을 생성하여 반환하는 방식입니다.

논의된 대안 및 피드백

  • Enumerable#values: 너무 광범위한 변경으로 간주되어 채택되지 않았습니다.
  • Array#each_value: Array#each가 이미 반복을 처리하므로 중복된다는 의견과, values_at, fetch_values 등 기존 메서드와의 일관성을 위해 values가 더 적합하다는 의견이 있었습니다.
  • Set#values와의 연관성: 컬렉션 객체들의 덕 타이핑(duck-typing) 호환성을 고려한다면 Set#values도 함께 제안되어야 한다는 피드백이 있었으며, 제안자는 향후 긍정적인 반응이 있을 경우 Set#values도 추가 제안할 의사가 있음을 밝혔습니다.
  • Principle of Least Surprise 사용 자제: 제안서에서 PoLS 용어 사용은 설득에 부정적일 수 있다는 피드백이 있었습니다.

결론

Array#values 추가 제안은 Ruby 개발에서 컬렉션 객체들의 값 접근 인터페이스를 통일하여 코드의 일관성과 간결성을 높이는 데 기여할 것으로 기대됩니다. 이 제안은 현재 Array와 Hash 간의 기능적 불균형을 해소하고, 타입 검사 없이도 유연하게 컬렉션을 다룰 수 있도록 돕습니다. 향후 Set#values와 같은 다른 컬렉션 클래스로의 확장 가능성도 논의되고 있어, Ruby의 컬렉션 API 전반에 걸친 개선의 시작점이 될 수 있을 것입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!