원문: Scala Collections API - An Overview of the Collections API Traversable (Scala 3에서는 지원하지 않습니다) Iterable Seq IndexedSeq immutable.Vector mutable.ResizableArray (2.13에서 제거되었습니다) mutable.ArraySeq mutable.StringBuilder (String, Array - 2.13에서는 ArraySeq) LinearSeq immutable.Lis..
원문: Mutable and Immutable Collections Scala 컬렉션은 시스템적으로 변경 가능한 컬렉션과 변경 불가능한 컬렉션을 구분합니다. 변경 가능한 컬렉션은 현재 위치에서 업데이트되거나 확장될 수 있습니다. 즉, 컬렉션의 요소를 변경하거나 추가하거나 제거하는 작업을 부수 효과로서 이룰 수 있습니다. 반면에, 변경 불가능한 컬렉션은 절대로 변하지 않습니다. 당신에게는 요소를 추가하거나 제거 또는 갱신하는 연산이 주어지지만, 이러한 연산은 항상 새로운 컬렉션을 반환하고 기존의 컬렉션은 변하지 않은 채로 유지시킵니다. 모든 컬렉션 클래스는 scala.collection 패키지 또는 이의 하위 패키지인 mutable, immutable, generic 패키지에 위치해 있습니다. 대부분의 컬..
원문: Scala 2.8 Collections APIThe Scala 2.8 Collections APIMartin Odersky, Lex Spoon2010년 9월 7일 많은 이들이 보기에 Scala 2.8에서 가장 중요한 변화는 바로 새로운 컬렉션 프레임워크입니다. Scala는 이미 이전에도 컬렉션을 가지고 있었습니다(사실, 새 프레임워크는 기존 컬렉션과 대부분 호환됩니다). 그러나 다양한 컬렉션 타입을 위한 공통적이고 일관적이며 포괄적인 프레임워크는 오직 2.8에서만 제공됩니다. 컬렉션에 추가된 내용은 처음 보았을때는 다소 미묘해 보이지만, 이 변화는 여러분의 프로그래밍 스타일에 깊은 영향을 미칠 수 있습니다. 실제로 마치 프로그램의 기본 구성 요소가 개별 요소가 아니라 전체 컬렉션인 것처럼 더 높은..
https://www.scala-lang.org/docu/files/collections-api/collections.html 이전에 Effective Scala를 번역하면서 Collections에서 소개했던 Collections API 문서를 번역합니다.Scala 언어의 개발자인 Martin Odersky 교수님이 적은 문서로, Scala Collections를 설계한 이유와 원리, 그리고 사용법을 소개하는 문서입니다.Scala 문서들은 대부분 훌륭하지만 언어의 장벽으로 인해 도전해보기 힘든 것 같습니다.어떤 식으로든 코멘트는 환영하니 편하게 댓글로 달아주세요.(이미지는 ChatGPT로 제작되었습니다) 참고: https://sleeping-toy.tistory.com/30 Effective Scala ..
이전 글에서 설명했다시피 일반적으로 사용되는 프로그래밍 언어인 C 계얼 언어, Java나 Kotlin 같은 프로그래밍 언어에서는 생성자 주입, setter 함수를 이용해 가장 일반적인 DI 패턴을 활용할 수 있습니다.Scala 언어에서는 이 두 가지 방법 외에도 trait와 self type을 이용해 Cake Pattern을 구현하고, 이를 통해 DI를 활용할 수 있습니다. TraitTrait는 자바의 interface와 매우 비슷하지만 몇 가지 추가적인 기능들을 제공해줍니다.먼저 다중 상속을 지원해주고, 메서드를 직접 구현할 수도 있으며, 특정 필드를 포함할 수 있습니다.자바8 이후의 interface는 이러한 기능들을 지원해주지만, scala는 훨씬 이전부터 이러한 기능들을 trait를 통해 지원해주..
Dependency injection (의존성 주입)DI는 dependency injection의 줄임말입니다. 프로그래밍을 하면서 모두 들어봤을 단어이고, Spring을 사용한다면 알든 모르든 모두가 사용하고 있는 개념입니다.DI를 번역하면 의존성 주입이라는 뜻이고, 개념을 말하자면 객체 지향 프로그래밍에서 객체 간의 의존성을 관리하는 설계 패턴 중 하나로, 객체가 자신의 의존성을 직접 생성하는 대신 외부에서 주입받는 방식입니다. 이 패턴을 사용하면 코드의 유연성과 재사용성을 높일 수 있으며, 테스트가 용이해집니다. Dependency injection의 주요 개념의존성 주입은 의존성과 주입의 두 가지 개념으로 나눠서 설명할 수 있습니다.의존성 (dependency) 정의 의존성은 한 객체가 다른 객체..
원문: Effective Scala - Acknowledgments 여기서 배운 교훈들은 Twitter의 Scala 커뮤니티에서 얻은 것입니다. 저는 충실한 기록자가 되기를 바랍니다.Blake Matheny, Nick Kallen, Steve Gury, 그리고 Raghavendra Prabhu는 많은 유익한 지침과 훌륭한 제안을 제공해 주었습니다.
원문: Effective Scala - Twitter's standard libraries LocalsUtil의 Local은 특정 Future 디스패치 트리에 국한된 참조 셀을 제공합니다. Local의 값을 설정하면, 동일한 스레드에서 Future에 의해 지연된 모든 계산에서 해당 값을 사용할 수 있습니다. 이들은 스레드 로컬과 유사하지만, 범위가 Java 스레드가 아닌 "Future 스레드"의 트리입니다.trait User { def name: String def incrCost(points: Int)}val user = new Local[User]...user() = currentUserrpc() ensure { user().incrCost(10)}위 코드에서 ensure 블록의 user()는 ..