스케일러블하고 함수형이며 오브젝트 지향인 Scala 입문 (1)

[번역] Eclipse로 Scala 프로그래밍을 시작하기 위한 기초 지식 (2/3)

 

2012.02.10 [나카무라 슈타, 주식회사 클래스 메소드]

 

일어 원문: http://www.atmarkit.co.jp/ait/articles/1202/10/news122_2.html - 일본 IT 관련 사이트

 

- 본 글은 위 일어 원문 링크의 글을 번역하였습니다.

 


 

 

Scala 프로그래밍을 시작하기 위한 준비

 

1. JDK 인스톨

 

 Scala를 구동하기 위해서는 Java가 필요합니다만, Java 인스톨에 대해서는 본 글에서는 생략합니다. 다른 글을 참고하여 JDK 사이트에서 다운로드와 인스톨을 실시하고 적절한 path를 설정해 주세요. (※ Mac OS X를 이용하는 분은 애플 사이트에서 다운로드 해 주세요)

(*주: 원문에서는 다른 일어 사이트 링크가 걸려있지만 여기서는 생략함)

 

2. Scala 인스톨

 

 Java 인스톨이 완료되면 다음은 Scala 인스톨을 할 차례입니다. Scala는 공식 사이트에 있는 Scala 다운로드 페이지에서 다운로드 할 수 있습니다.

 

 Scala의 최신 안정판은 2012년 2월 4일 현재 Scala 2.9.1.final 입니다. 여기서는 Windows 버전 Scala를 다운로드 해서 설치해 보겠습니다.

(*주: 원문 글이 쓰여진 시점은 2012년 2월로 현재는 버전 다름)

 

 Scala 다운로드 페이지에서 Windows용 'scala-2.9.1.final.zip'을 다운로드 해주세요.

 

 다음으로 다운로드한 zip 파일을 적당한 위치에 압축을 풉니다. (※ 본 글에서는 위치를 'C:/scala-2.9.1.final'로 하겠습니다)

 

           [그림 1] 운영체제에 맞는 Scala를 다운로드

 

 

3. 환경변수 추가

 

 zip 파일을 풀었으면, 해당 디렉토리를 환경변수로 셋팅합니다.

 

 환경변수명

설정 예 

 SCALA_HOME

C:/scala-2.9.1.final 

 PATH

~;%SCALA_HOME%/bin 

 

 Windows 버전에 따라 약간 다르지만, '내컴퓨터'를 마우스 오른쪽 클릭하고 '속성' → '상세설정' 탭은 선택 → '환경변수' 버튼을 클릭합니다. 윈도우 창이 뜨면, 'SCALA_HOME' 환경변수를 새롭게 추가하고, 'PATH' 환경변수에 '%SCALA_HOME%/bin' 디렉토리를 추가해 주세요.

(*주: windows 7인 제 컴퓨터에서는 '컴퓨터' 마우스 우클릭 → '속성' → '설정변경' → '고급' 탭 → '환경변수' 클릭)

 

 

 환경변수 설정이 완료되면 커맨드 창을 열고 'scala -version' 이라고 입력해 봅시다. Scala 버전이 아래와 같이 나타나면 인스톨 성공입니다.

 

           [그림 2] 인스톨 되어있으면 Scala 버전이 표시된다

 

 ※ Windows 이외 OS에 인스톨하는 경우는 다른 사이트를 참고해 주세요.

 (*주: 일본어 사이트 링크가 있으나, 별도로 번역하지는 않음)

 


 

대화형 실행 환경 'REPL'로 'Hello World!'


 Scala는 Java와 같이 소스 파일을 컴파일해서 바이트 코드로 바꾸어 실행합니다만, 대화형 실행 환경 ('Read-eval-print loop'의 약어로 'REPL(리플)'이라고 합니다)도 사용 가능합니다.

 

 REPL에서는 한 행씩 코드를 입력해서, 그 때마다 동작을 확인하면서 실행할 수 있기 때문에 약간의 코드를 시험해 보고 싶다거나 할 때 자주 사용합니다.

 

 커맨드 창을 열고 'scala'를 입력하면 'REPL'이 기동됩니다. 이 REPL상에서 'println("Hello World")' 라고 입력해봐 주세요. 아래와 같이 결과가 'Hello World'라고 표시됩니다.

 

           [그림 3] REPL을 실행하고 있는 상태. 실행 결과가 바로 나오기 때문에 편리함

 

 REPL을 종료시키려면 ':quit' 이라고 입력합니다. '콜론(:)'을 적는걸 잊지 마세요.

 


 

Eclipse 플러그인의 Scala-IDE를 사용하려면

 

 콘솔에서 REPL을 사용해서 Scala를 실행할 수 있다는 것은 알게 되었습니다. 하지만 통합개발환경(IDE)에서 Scala를 사용하고 싶은 경우는 어떻게 하면 될까요?

 

 'Eclipse', 'NetBeans', 'IntelliJ'와 같은 현재 자주 사용되고 있는 IDE에는 Scala로 개발하기 위한 플러그인이 있습니다. 이번에는 Eclipse 상에서 Scala를 이용한 프로그래밍을 하기 위한 플러그인, 'Scala IDE for Eclipse 2.0'을 소개합니다.

 

 Scala IDE for Eclipse는 Scala 관련 기술을 제공하는 Typesafe사가 지원하는 Eclipse용 플러그인으로, 아래와 같은 기능을 가지고 있어 Scala 개발을 지원해 줍니다.

  • 코드 자동완성

  • 자동 컴파일

  • import 해야할 패키지 후보를 알려줌

  • 불필요한 import 제거

  • 소스 코드 정리

 'Ctrl'+ '스페이스' 키로 코드 자동완성이 된다거나, 'Ctrl' + 'Shift' + 'F' 키로 소스 코드 정리가 되거나 해서 JDT와 같은 감각으로 쓸 수 있습니다.

 

 또, 좀 전에는 콘솔에서 REPL을 사용했지만 Eclipse로 작성한 Scala 프로젝트를 오른쪽 클릭하여 메뉴에서 REPL을 사용하는 것도 가능합니다. (※ 자동완성이 안되는 등 콘솔상의 REPL 보다 다소 사용하기 어려운 점이 있으니 주의해 주세요)

 

 Scala IDE for Eclipse를 인스톨 해 봅시다.

 

1. Eclipse를 다운로드하고 압축 풀기 

 

 Scala IDE가 공식적으로 지원하는 Eclipse 버전은 Eclipse 3.6 (Helios) 입니다.

 

 일단은 Eclipse 3.7 (Indigo) 에서도 문제없이 작동할 것이라 생각합니다만, 플러그인끼리의 상성 때문에 불안정하게 될 가능성이 있습니다. 공식적으로 지원하고 있는 Eclipse 3.6 (Helios)를 깨끗한 상태에서 사용할 것을 추천합니다.

 

 여기에서 다운로드 해서 압축을 풉시다. 다운로드 하는 패키지는 'Eclipse IDE for Java Developers 나 Eclipse IDE for Java EE Developers'가 문제 없을 것입니다.

 

          [그림 4] Eclipse 3.6 다운로드 페이지. 자신의 환경에 맞는 Eclipse를 다운로드

 

2. Scala IDE for Eclipse를 인스톨 

 

 Eclipse를 기동하고 메뉴에서 'Help' → 'Install New Software...'를 선택합니다. 'Add' 버튼을 클릭하여 Scala 2.9용 Update Site를 입력합니다.

 

 필드명

설정 예 

 NAME

Scala IDE for Eclipse 2.0

 Location

http://download.scala-ide.org/releases-29/stable/site

 

 

 인스톨하는 플러그인 후보가 나오기 때문에 모두 선택해서 인스톨 합니다.

 

 

           [그림 5] 플러그인을 인스톨하는 사이트를 지정 (※ 화면은 Mac OS X 환경)

 

다시 시작하라고 나오니 Eclipse를 재기동 합시다. 이걸로 Scala IDE for Eclipse 인스톨은 완료입니다. 다음 페이지에서는 Eclipse로 Scala 프로그램을 실행해 봅시다.

(*주: 다음 페이지는 작성 중...)

 

 

Posted by 이슈타르네스

스케일러블하고 함수형이며 오브젝트 지향인 Scala 입문 (1)

[번역] Eclipse로 Scala 프로그래밍을 시작하기 위한 기초 지식 (1/3)

 

2012.02.10 [나카무라 슈타, 주식회사 클래스 메소드]

 

일어 원문: http://www.atmarkit.co.jp/ait/articles/1202/10/news122.html - 일본 IT 관련 사이트

 

- 본 글은 위 일어 원문 링크의 글을 번역하였습니다.

 


 

 

인기인 'Scala'를 처음부터 배워보자

 

 최근에 제 주변에도 Scala에 관한 화제가 늘어나고 있습니다. Twitter나 블로그, 기술계 뉴스 사이트에서 매일같이 Scala에 관한 이야기가 보입니다.

 

 또, 필자가 현재 연관되어 있는 프로젝트에서도 실제로 Scala를 써서 개발하고 있습니다. 지금까지는 Java로 개발하는 일이 많았지만, 그것보다 간결하고 유연성 있게 작성할 수 있어, Scala로 개발하는 것은 매우 생산성이 높다고 느끼고 있습니다.

 

 본 연재는 Scala의 특징을 소개하고, 기본 구문이나 함수, 클래스 등 Scala의 기본적인 기능에 대해 설명하려 합니다. 어떤 프로그래밍 언어를 배운 적이 있고, 프로그래밍의 기본적인 부분을 알고 있는 사람을 대상으로 하고 있습니다. 딱히 언어를 따지지는 않지만, 오브젝트 지향 언어의 경험자라면 이해하기 쉬울 것이라 생각합니다.

 

 첫 연재인 이번 글에서는 Scala의 특징을 소개하고, 개발을 시작하기 위한 준비부터 최초 Scala 프로그램 실행까지를 소개합니다.

 

 


 

 

Twitter나 Foursquare, LinkedIn이 사용하는 'Scala'란 


 
'Scala'란, 표준 Java 플랫폼 상에서 동작할 수 있는 프로그래밍 언어입니다. 2003년쯤 등장한 비교적 최신 언어입니다만, 이미 Twitter나 Foursquare, LinkedIn에서 사용한바 있습니다. 일본에서도 몇 가지 사용 사례가 있는 듯 합니다.

 

 

 Scala (스칼라) 란 이름은 '스케일러블(Scalable) (확장가능)한 언어' 를 의미합니다. Scala는 Java의 Generics (제네릭형) 의 설계 등에도 관련되었던 스위스 연방 공과대학 (EPFL)의 Martin Odersky(마틴 오더스키) 교수에 의해 설계, 개발 되었습니다.

 

 교수에 의하면, Scala 언어 개발의 동기로, 아래의 두 가지가 있다고 합니다. (일본 Wikipedia 에서 인용)

 

 1. 범용 언어는 스케일러블(확장가능) 해야한다. 같은 개념으로 작은 프로그램도 큰 프로그램도 작성할 수 있어야 한다.

 

2. 스케일러빌리티 (확장성)는 함수형 언어오브젝트 지향 언어의 두 가지 프로그래밍 개념을 통합하고, 일반화 함으로써 실현 가능하다.

 

 개발 동기에 써있듯이 Scala는 작은 스크립트 용도에서 대규모 시스템에서 사용하는 언어로써의 용도까지 다양한 니즈에 응할 수 있도록 되어 있습니다. 그리고, 그 확장성을 실현하기 위해서 '오브젝트 지향 언어와 함수형 언어의 개념을 결합하고 있다'라는 특징을 가지고 있습니다.

 

 또 Scala 공식 사이트의 Scala 소개문에서는 맨 처음에 아래와 같이 기술되어 있습니다. 

(Scala 공식 사이트에서 인용)

 

Scala is a general purpose programming language designed to express common programming patterns in a concise,  

elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages,

enabling Java and other programmers to be more productive.

Code sizes are typically reduced by a factor of two to three when compared to an equivalent Java application

 

 그 일본어 번역입니다. (프로그래밍 언어 Scala 일본어 정보 사이트에서 인용)

 

Scala는 범용적인 프로그래밍 패턴을 간결하고 세련되게 그리고 형안전하게(type-safe) 표현하기 위한 범용 프로그래밍 언어입니다.

Scala는 오브젝트 지향의 기능과 함수형 언어의 기능을 잘 결합하고 있어, Scala를 사용함으로써, Java나 그 외 프로그래머의 생산성은 보다 향상될 것입니다. 

Scala의 코드 사이즈는 전형적으로는 같은 기능을 실현한 Java 어플리케이션과 비교해서 2분의 1에서 3분의 1 정도입니다.

 

 '오브젝트 지향, 함수형 언어의 기능을 결합함으로써 보다 간결하게 코드를 작성할 수 있어 생산성이 향상된다' 고 이야기하고 있습니다.

 

 


 

 

코드를 Java 와 Scala로 비교해 보자 

 

 여기서 한 가지 예를 들어봅시다. 아래의 코드는 '인수로 전달된 문자열인 리스트 중 제 2 인수로 지정한 길이 이상의 요소를 모두 대문자로 변환하고, 그 요소를 함수 내부에서 새롭게 정의한 리스트에 추가하여 반환한다' 는 함수를 Java에서 작성한 것입니다.

 

Java의 소스 코드

 

 리스트를 루프로 돌리고, 요소마다 길이를 체크해서 조건에 맞는 요소를 함수 내부에서 정의한 리스트에 추가하고 있습니다.

 

 같은 처리를 Scala에서 작성하면 이렇게 됩니다.

 

Scala의 소스 코드

 

 전달된 리스트를 길이 (len)로 필터링하고 결과 리스트의 요소마다 모두 대문자로 변환한 리스트를 반환합니다. 어떻습니까? 확실히 Java 코드 보다 훨씬 작은 코드량을 보입니다. 

 

 이것은 극히 간단한 예이지만, Scala라면 간결하고 알기 쉬운 코드를 쓸 수 있다는 걸 알 수 있습니다.

 

 


 

 

기존의 언어에서 좋은 것만 가져온 'Scala'의 다섯가지 특징

 

 

 Scala는 아래와 같은 특징을 가지고 있습니다. 다양한 기능을 가지고 있지만, Scala만이 가지고 있는 특수한 기능이란 건 별로 없고, 기존의 프로그래밍 언어에서 좋은 부분만을 받아 들여 밸런스를 잘 맞추고 있다고 생각합니다.

 

 

[1] Scala는 오브젝트 지향 언어

 

 Scala는 순수한 '오브젝트 지향' 언어입니다. 모든 값은 '오브젝트' 이며, 모든 조작은 '메소드' 입니다. 

 

 Java의 int형이나 double형과 같은 프리미티브형은 존재하지 않습니다. 예를 들어 Scala에서 '1+2' 라는 코드는 'Int 클래스 (값은 1) 의 '+' 라는 이름의 메소드에 인수 2를 전달한다'는 의미입니다.

 

 또 Scala에서는 오브젝트 지향을 실현하기 위해 클래스 베이스의 상속과 '믹스인(mixin) 합성'을 지원하고 있습니다.

 

 '믹스인 합성' 이란 '트레이트(trait)' (Ruby에서 말하는 '모듈', Java로 따지자면 '구현을 가질 수 있는 인터페이스와 같은 것')을 사용하여 하나의 클래스에 대해서 복수의 구현을 가지는 기능을 맞출 수 있게 되는 것입니다.

 

[2] 함수형 프로그래밍이 가능

 

 '함수형 프로그래밍'이란 단어는 최근에 자주 듣는 용어일지도 모릅니다. 이것은 간단하게 말하자면, 부작용(데이터의 내부 상태를 변경하는 것)이 없는 '함수'를 사용해서 프로그램을 구축하는 프로그래밍 수법입니다.

 

 함수형 프로그래밍의 이점으로, '함수가 자기 완결하고 '상태'가 없기 때문에, 가독성이나 보수성, 테스트, 리팩토링이 쉬워진다'는 장점이 있습니다.

 

 Scala에서는 함수를 '퍼스트 클래스'로써 취급합니다. 즉, '정수나 문자열 등과 같이 함수를 인수나 리턴값으로 할 수 있다'는 것입니다.

 

 또 '정수'(val)이나 '불변 콜렉션'을 사용해서 프로그래밍 할 수 있습니다.

 (※ 변수 (var)나 가변 콜렉션을 사용해도 상관없습니다)

 

 이러한 특징을 가지고 있기 때문에 표현력이 좋아 간결하게 작성할 수 있습니다.

 

 오브젝트 지향과 함수형 프로그래밍은 대립하는 개념이 아니라, Scala에서는 이것들이 잘 어우러져 간결한 작성과 유연성을 실현하고 있습니다.

 

[3] 정적 타이핑

 

 '정적 타이핑'이란 변수나 함수가 미리 정해진 데이터형을 처리하도록 엄밀한 작성을 요구하는 프로그래밍 언어의 특성입니다.

 

 Scala는 정적 타이핑 언어여서 안전하게 추상화 할 수 있는 타입 시스템을 가지고 있습니다. 그 때문에 타입에 의한 에러는 실행할 때가 아니라, 컴파일 때 알 수 있습니다.

 

 "정적 타이핑이면, 타입 작성에서 프로그램이 장황해 지는 것 아니냐?"라고 생각하는 분들도 있을지도 모릅니다. 하지만, Scala에서는 타입 추론에 의해 타입 기술을 생략할 수 있어 간결한 표현을 할 수 있게 합니다.

 

[4] Java와의 연계

 

 Scala의 소스 파일을 컴파일하면, JVM (Java 가상 머신)의 바이트 코드가 됩니다. Java 가상 머신 상에서 동작하기 위해 Scala에서 Java의 메소드나 필드도 불러 들일 수 있고, 역으로도 가능합니다.

 

 즉, 기존의 풍부한 Java 라이브러리를 그대로 활용할 수 있습니다.

 (※ 일부 예외는 있습니다)

 

[5] 병행처리

 

 현재는 CPU의 멀티코어화 (하나의 프로세서에 복수의 프로세서, 코어를 집어넣은 기술) 가 당연해졌습니다. Java에서 병렬처리를 실행할 때는 java.lang.Thread 클래스나 java.util.concurrent 패키지를 사용해서 병렬처리를 실현합니다.

 

 Scala에서는 멀티 코어를 의식해서 효율좋게 병렬처리를 행하기 위한 'Actor'라고 불리는 라이브러리를 가지고 있습니다. 이것은 '액터 모델(actor model)'에 기반한 라이브러리로, 액터끼리 서로 메세지를 보내 처리를 하는 프로그래밍 모델입니다.

 

 거기에 Scala 2.9에서부터는 병렬처리 대응 콜렉션 (palallel collection)이 사용 가능해 졌습니다. 이것은 콜렉션을 병렬화하여 각각의 스레드에서 실행하는 처리를 간단히 작성할 수 있습니다.

 

 다음 페이지에서는 Scala를 인스톨 해 봅시다.

 

 다음 페이지: [번역] Eclipse로 Scala 프로그래밍을 시작하기 위한 기초 지식 (2/3)

 

 

 

Posted by 이슈타르네스