본문 바로가기

scala17

[8강] 분수 클래스 만들기 이번에는 분수를 저장할 수 있는 클래스를 스칼라를 이용하여 만들어 볼 것이다. 기본 definition은 아래와 같다. class Rational(n:Int, d:Int) n에 분자가 d에 분모 값을 파라미터로 하는 class를 생성하였다. Java와의 다른 점인데 scala에서는 따로 생성자 함수를 만들지 않고 class에서 파라미터를 받고 처리하도록 되어 있다. 클래스를 만들었으니 한번 생성해보자. 생성은 무사히 잘된 것 같은데 밑에 이상한 글씨들이 뜬다.. toString을 기본적으로 overriding 해주지 않으면 default로 클래스 이름@16진수 이런식의 어떤 값을 표시해 줄 것이다. 좀 더 명확히 하기 위해 toString을 재정의해주자. class Rational(n:Int, d:Int.. 2015. 4. 19.
[7강] 특수 문자열 처리와 연산자 우선 순위 특수문자 표현 스칼라에서도 아래와 같이 특수 문자의 표현이 가능하다. 위의 사진을 보면 특수 문자 처리를 위해 다소 복잡해 보인다. 스칼라에서는 아래와 같이 변경할 수 있다. 또한 따옴표 세 개를 이용해서 두줄의 문자열도 표현할 수가 있다. 하지만 결과를 보면 문자열 사이에 공백도 포함되는 것을 확인할 수 있다. 공백을 없애고 싶다면 문자열 시작 부분에 '|'를 기입해준 후 stripMargin 함수를 호출하면 된다. 비트 연산 스칼라에서의 비트 연산은 기존의 다른 프로그래밍 언어들과 비슷하다. 그 중 특이한게 있어서 리마인드 차원에서 남긴다. 스칼라의 비트 시프트 연산자는 () 가 있으며 추가로 (>>>) 연산자도 있다. >>, > 31 -1은 이진 표현으로 111111111111111111111111.. 2015. 4. 18.
[6강] 컴파일하기 Scalac로 컴파일을 하기 위해 아래의 두 코드를 작성하였다. 참고로 스칼라는 자바처럼 파일 이름과 클래스 이름을 동일하게 맞추지 않아도 동작한다. Summer.scala import ChecksumAccumulator.calculate object Summer{def main(args: Array[String]){for(arg scalac Summer.scala ChecksumAccumulator.scala 이렇게 해주면 .class 파일과 파일명 끝이 $로 끝나는 파일들이 생성되는 것을 확인할 수 있다.신기하게도 그냥 scala라고 치고 매개변수를 입력해주면 scala 인터프리터에서 알아서 main을 찾아서 실행을 해준다.참 신기하다. 2015. 4. 17.
[4강] 함수형으로 만들자 당장 Scala를 사용하기도 어려운데 함수형으로 만들어 보는 건 더더욱 힘든일 인 것 같다. 몇 가지 규칙을 정해서 함수형 코딩을 하는 습관을 기르도록 하자 첫번째로 var의 사용을 줄이자. var는 mutable한 자료형이다. mutable한 자료는 어느 순간 이상 동작을 일으킬 가능성이 높고, 예외 상황을 발생 시킬 수 있기 때문에 가급적 immutable한 자료형의 사용을 늘리도록 하자. 아래의 예제를 보면 var i = 0 while(i < args.length){ println(args(i)) i += 1} 이 코드로 argument 값을 출력할 수가 있다. 하지만 아래와 같이 코딩 스타일을 변경하면 mutable한 자료형 없이 같은 결과를 낼 수 있으며 코드 복잡도도 줄어드는 효과를 얻을 수가.. 2015. 4. 16.
[3강] 튜플, 집합과 맵 튜플 튜플은 List와 마찬가지로 immutable이지만 각기 다른 타입의 변수를 저장할 수 있다. 튜플에 접근하기 위해서는 _1, _2와 같이 호출을 해주어야 한다.일관성을 강조하는 scala에서 왜 pair(0), pair(1) 이런 식으로 안만들었을까나??apply 매소드는 항상 동일한 타입의 객체를 리턴하는 반면 튜플 같은 경우는 각기 다른 타입이 존재하기 때문에 _1은 어떤 타입, _2는 어떤 타입 이런식으로 따로 분리를 해논 것이다. 집합 immutable한 집합과 mutable한 집합 모두 만들 수 있다. var jetSet = Set("Boeing", "Airbus")jetSet += "Lear" 스칼라에서 따로 import를 하지 않으면 기본적으로 immutable한 집합이라고 생각한다... 2015. 4. 15.
[2강] 배열과 리스트 배열 기타 다른 언어들과 마찬가지로 스칼라도 배열과 리스트 타입의 자료구조를 제공한다. 아래 보이는 예는 배열 타입에 대한 사용 방법을 예시하였다. val greetStrings = new Array[String](3)greetStrings(0) = "Hello"greetStrings(1) = ", "greetStrings(2) = "World!\n" for ( i 2015. 4. 14.
[1강] Scala 소개 Scala 이름은 참 많이 들어봤지만 정확히 무엇에 쓰이는 언어이고 무엇이 좋은지는 하나도 알지 못하고 있었다. 요새 차츰 함수형 언어가 각광받기 시작하고 있고, 그에 따라 scala란 언어도 사람들 사이에서 주목받고 있다.또한 개발자 로망 중에 하나가 능숙한 함수형 언어 하나 다뤄보는 것 아닐까나?? 해서 나 역시 scala를 공부하기로 다짐 또 다짐하였다.일단 scala란 이름은 scalable한 언어란 뜻을 가지게 하기 위해 scala로 지었다고 한다.'얼마나 확장 가능하길래 이름 부터가 scala지?' [성당과 시장]이라는 책에서 보면 성당과 시장을 소프트웨어 개발에 비유하며 설명하고 있다.성당은 일단 뼈대를 잡고 한번 구축하기 위해 많은 시간이 걸리지만, 한 번 구축하면 오랜 시간 그 구조를 유.. 2015. 4. 13.
우분투 14.04에 스칼라 설치하기 우선 기본적으로 jdk를 설치해야 한다. (스칼라 역시 자바 vm 상에서 돌아가기 때문에) $> apt-get install -y openjdk-7-jdk 이렇게 했는데 'Unable to fetch som archives, 어쩌구 저쩌구' 하는 에러가 발생했다.에러 메시지에 apt-get update를 한번 해보라고 해서 apt-get update를 한후 openjdk를 다시 설치하였더니 에러 없이 무사히설치가 되었다. 이젠 scala를 설치해보자 $> apt-get install -y scala 설치가 완료되었으면 console에 scala라고 입력해보자. 아래와 같이 scala 인터프리터가 나타날 것이다. 오~~~ scala 명령창이 나타났다. 이제 scala를 시작하기 전에 sbt란 것을 또 깔아.. 2015. 4. 6.