Page 17 -
P. 17

함수형 프로그래밍의 기초는 5장에서 다룰 것이다. 그리고 함수형 프로그래밍을 적용한 예제는
                    이 책의 여러 부분에서 볼 수 있다.

                    코틀린 언어가 성장해 나가면서, 두 가지 프로그래밍 패러다임을 더 지원하기 시작했다. API를 도                            1
                    메인 특화 언어(Domain Specific Language, DSL)로 정의할 수 있는 기능 덕분에 코틀린을 선언적인
                    스타일로 코딩할 수 있다. 사실 여러 코틀린 프레임워크는 범용 프로그래밍 언어에서 제공하는 타
                    입 안전성이나 표현력을 해치지 않으면서 DSL을 제공한다. 예를 들어 Exposed 프레임워크는 데                           강력하고 실용적인 코틀린

                    이터베이스 스키마(schema)를 정의하고 데이터베이스에 저장된 데이터를 조작할 수 있는 DSL을
                    포함하며, kotlinx.html은 타입 안전성을 보장하는 새로운 HTML 템플릿 언어를 제시한다. 11장
                    도메인 특화 언어에서 이런 예제를 더 자세히 살펴보고, 직접 DSL을 만드는 방법도 알아본다.

                    또 한 가지 패러다임은 이름 그대로 동시성(concurrent) 프로그래밍이다. 코루틴을 도입하면서 코
                    틀린도 동시성 프로그래밍을 지원하기 시작했다. 자바를 포함한 여러 언어가 동시성을 지원하지
                    만, 코틀린은 새로운 프로그래밍 접근 방법을 가능하게 해주는 풍부한 프로그래밍 패턴을 제공한

                    다. 동시성에 대한 기본적인 내용은 13장 동시성에서 다룬다.

                    이 모두를 한꺼번에 제공하기 때문에 다중 패러다임은 언어의 표현력을 매우 많이 늘려주며, 언어
                    를 더 유연하고 다용도에 사용할 수 있는 도구로 만들어준다.




                    1.1.3 간결성과 표현력


                    개발자 생산성은 다른 사람이 짠 코드를 보든 본인 스스로가 짠 것을 한참 후에 보든 관계없이, 빠
                    르게 읽고 이해할 수 있는 코드를 작성할 수 있는지와 주로 연관돼 있다. 어떤 코드 조각의 의미

                    를 이해하려면 그 조각이 프로그램의 다른 부분과 어떤 관계인지를 빠르게 이해해야 한다. 그래서
                    기존 코드의 의미를 파악하는 것이 새로 코드를 작성하는 것보다 일반적으로 시간이 더 오래 걸리
                    고, 언어의 간결성, 즉 프로그래머의 의도를 잡음 정보 없이 명확하게 표현할 수 있는 능력이 개발
                    도구인 프로그래밍 언어에서 중요하다.

                    코틀린 설계자들은 필드 게터(getter)나 세터(setter), 익명 클래스, 명시적인 위임 등과 같은 자바의
                    악명 높은 불필요한 준비 코드를 제거하고 언어를 가능한 한 간결하게 만들기 위해 노력했다. 반

                    면 코틀린 설계자들은 간결성을 너무 과용하지 못하게 주의를 기울였다. 예를 들어, 스칼라와 달
                    리 코틀린에서는 커스텀 연산자를 정의할 수 없고 기존의 연산자만 재정의할 수 있다. 이는 새 연
                    산자로 인해 연산의 의미가 오히려 더 혼란스러워지기 때문이다. 이 책에서는 이런 결정으로 인한

                    결과와 결과적으로 이 결정이 얼마나 유용한지 나타내는 예를 많이 볼 수 있다.

                                                                                                  29





     Kotlin_05.indd   29                                                                     2022-02-15   오후 4:07:31
   12   13   14   15   16   17   18   19   20   21   22