원본: Effective Scala - Functional Programming 값 지향 프로그래밍(Value oriented programming)은 많은 이점을 제공하는데, 특히 함수형 프로그래밍 구조와 함께 사용될 때 그 이점이 더욱 두드러집니다. 이 스타일은 상태의 변형(stateful mutation)보다 값의 변환(transformation)에 중점을 두어 참조 투명성을 유지하고, 더 강력한 불변성을 제공하며 논리적으로 이해하기 쉬운 코드를 작성하게 해줍니다. 케이스 클래스(Case class), 패턴 매칭(Pattern matching), 구조 분해 바인딩(Destructuring bindings), 타입 추론(Type inference), 경량 클로저(Lightweight closure) ..
원문: Effective Scala - Control structures 프로그램을 함수형 스타일로 작성할 경우 일반적으로 전통적인 제어 구조가 더 적게 필요하게 되며, 선언형 스타일로 작성할 때 가독성이 더 좋아집니다. 이는 일반적으로 당신이 작성한 로직을 여러 개의 작은 메소드나 함수로 나누고, 이를 match 표현식으로 연결하는 것을 의미합니다. 함수형 프로그램은 종종 표현 중심적이 되는 경향이 있습니다. 조건문의 각 분기는 동일한 타입의 값을 계산하고, for (..) yield 표현은 comprehension을 계산하며, 흔하게 재귀 구조가 사용됩니다. Recursion (재귀)문제를 재귀적으로 표현하면 종종 더 간단하게 표현될 때가 있습니다. 심지어 꼬리 재귀 최적화가 적용되면 (이는 @tai..
원문: Effective Scala - Concurrency 현대의 서비스는 매우 높은 동시성을 유지합니다. 서버가 수만에서 수십만개까지 동시 작업을 조정하는 것은 흔한 일이며, 이러한 복잡성을 처리하는 것은 견고한 시스템 소프트웨어를 작성하는 데 필수적인 요소입니다. 쓰레드는 동시성을 표현하는 수단을 제공합니다. 쓰레드는 독립적이고 힙을 공유하는 실행 컨텍스트를 제공하며, 이는 운영 체제가 스케줄링합니다. 그러나 쓰레드의 생성은 Java에 있어서 매우 비용이 많이 드는 작업으로, 반드시 리소스 풀을 이용해 관리되어야 합니다. 이는 프로그래머에게 추가적인 복잡성을 야기하며, 높은 수준의 커플링을 일으킵니다. 특히, 어플리케이션의 로직을 쓰레드 사용에서 분리하기 어렵게 합니다. 이러한 복잡성은 특히 서비스..
원문: Effective Scala - Collections Scala는 매우 범용적이고 풍부하며 강력하면서 조합 가능한 컬렉션 라이브러리를 제공합니다. 컬렉션은 고수준의 기능을 제공하면서 수많은 연산을 노출합니다. 많은 컬렉션 조작 및 변환 작업이 간결하고 가독성 있게 표현될 수 있지만, 이러한 기능을 부주의하게 적용하면 그 반대의 결과를 초래할 수 있습니다. 모든 Scala 프로그래머는 컬렉션 디자인 문서를 읽어보아야 합니다. 이 문서는 Scala collection library에 대한 동기와 통찰을 제공합니다. 항상 당신의 요구사항과 부합하는 가장 단순한 컬렉션을 사용하세요. Hierarchy (계층 구조)Scala의 컬렉션 라이브러리는 매우 거대합니다. 이 복잡한 계층 구조를 간단히 표현하자면 ..
원문: Effective Scala - Types and Generics 타입 시스템의 주요 목적은 프로그래밍 오류를 감지하는 것입니다. 타입 시스템은 특정한 코드 불변성을 컴파일러가 검증할 수 있도록 제한된 형태의 정적 검증을 제공합니다. 물론 타입 시스템은 다른 이점도 있지만, 오류 검사가 그 존재 이유입니다. 우리는 이러한 목표를 반영하여 타입 시스템을 사용해야 하지만, 독자를 염두에 두고 신중하게 사용해야 합니다. 타입을 적절히 사용하면 명확성이 향상될 수 있지만, 지나치게 기교를 부리면 오히려 코드가 모호해질 수 있습니다.스칼라의 강력한 타입 시스템은 학문적 탐구와 실험의 원천이 되는 경우가 많습니다(예: 스칼라에서의 타입 레벨 프로그래밍). 이러한 기술들은 학문적으로 흥미로운 주제이지만, 실제..
원문: Effective Scala - Formatting Code formatting의 구체적인 사항들은 실용적이기만 하다면 크게 문제가 되지 않습니다. 본질적으로 스타일은 좋거나 나쁜 것이 아니며, 거의 모든 사람들이 각자의 선호에 따라 좋고 나쁨을 다르게 느낍니다. 하지만 어플리케이션을 일관적으로 동일한 포맷으로 작성하게 되면 가독성이 향상됩니다. 특정 스타일에 이미 익숙한 독자는 새로운 규칙이나 언어 문법의 복잡한 부분을 다시 이해할 필요가 없습니다. 스칼라에서는 이러한 일관성이 특히 중요한데, 그 이유는 스칼라 문법이 굉장히 높은 수준의 중첩(중복)을 가지기 때문입니다. 하나 예를 들자면 메소드의 호출이 있습니다. 메소드는 "."으로 호출할 수 있고, 공백으로 호출할 수도 있고, 매개변수가 없거..
원문: Effective Scala - Introduction 스칼라는 트위터에서 사용되는 주요 애플리케이션 프로그래밍 언어 중 하나입니다. 우리의 많은 인프라가 스칼라로 작성되었으며, 이 언어를 활용하기 위해 여러 대규모 라이브러리들(유틸성 라이브러리를 모은 util, 타입간의 상호 변환을 도와주는 bijection 등)을 운영하고 있습니다. 스칼라는 매우 효과적이지만, 동시에 큰 언어이기도 하여서, 우리는 이를 사용할 때는 세심한 주의가 필요하다는 것을 배울 수 있었습니다. 스칼라의 함정은 무엇일까요? 어떤 기능을 받아들이고, 어떤 기능을 피해야 할까요? "순수 함수형 스타일"을 언제 사용하고, 언제 피해야 할까요? 다르게 표현하자면, 어떻게 하면 이 언어를 효과적으로 사용할 수 있을까요? 이 가이드..
Effective Scala는 twitter에서 제작한 글로, 다른 언어의 Effective 시리즈와는 다르게 web에 게시되어서 배포됩니다.해당 글은 Marius Eriksen(트위터)가 적은 글로, 링크는 twitter github에서 제공해주고, 지속적으로 업데이트 된다고 합니다.twitter에서 scala를 사용하면서 느꼈던 점들이나 알아야 하는 점들을 적어둔 글로 한번쯤은 읽어볼만한 글입니다.한글로 번역한 글이 보이지 않아서 원문과 함께 나름대로 정리하면서 번역하려 합니다.번역에 대한 글이나 어떤 형식이든 코멘트는 환영합니다. (이미지는 chatgpt를 통해 제작되었습니다)