Programming/Scala(26)
-
[SCALA] 분수 클래스 만들기
이번에는 분수를 저장할 수 있는 클래스를 스칼라를 이용하여 만들어 볼 것이다.기본 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.04.19 -
[SCALA] 특수 문자열 처리와 연산자 우선 순위
특수문자 표현 스칼라에서도 아래와 같이 특수 문자의 표현이 가능하다. 위의 사진을 보면 특수 문자 처리를 위해 다소 복잡해 보인다. 스칼라에서는 아래와 같이 변경할 수 있다. 또한 따옴표 세 개를 이용해서 두줄의 문자열도 표현할 수가 있다. 하지만 결과를 보면 문자열 사이에 공백도 포함되는 것을 확인할 수 있다. 공백을 없애고 싶다면 문자열 시작 부분에 '|'를 기입해준 후 stripMargin 함수를 호출하면 된다. 비트 연산 스칼라에서의 비트 연산은 기존의 다른 프로그래밍 언어들과 비슷하다. 그 중 특이한게 있어서 리마인드 차원에서 남긴다. 스칼라의 비트 시프트 연산자는 (>) 가 있으며 추가로 (>>>) 연산자도 있다. >>, -1 >> 31 -1은 이진 표현으로 11111111111111..
2015.04.18 -
[SCALA] 컴파일하기
Scalac로 컴파일을 하기 위해 아래의 두 코드를 작성하였다.참고로 스칼라는 자바처럼 파일 이름과 클래스 이름을 동일하게 맞추지 않아도 동작한다. Summer.scala import ChecksumAccumulator.calculate object Summer{def main(args: Array[String]){for(arg println(arg + ": " + calculate(arg))}} ChecksumAccumulator.scala import scala.collection.mutable.Map object ChecksumAccumulator{private val cache = Map[String, Int]()def calculate(s: String): Int =if (cache.contai..
2015.04.17 -
[SCALA] 함수형으로 만들자
당장 Scala를 사용하기도 어려운데 함수형으로 만들어 보는 건 더더욱 힘든일 인 것 같다.몇 가지 규칙을 정해서 함수형 코딩을 하는 습관을 기르도록 하자첫번째로 var의 사용을 줄이자.var는 mutable한 자료형이다. mutable한 자료는 어느 순간 이상 동작을 일으킬 가능성이 높고, 예외 상황을 발생 시킬 수 있기 때문에 가급적 immutable한 자료형의 사용을 늘리도록 하자. 아래의 예제를 보면var i = 0while(i println(args(i)) i += 1}이 코드로 argument 값을 출력할 수가 있다. 하지만 아래와 같이 코딩 스타일을 변경하면 mutable한 자료형 없이 같은 결과를 낼 수 있으며 코드 복잡도도 줄어드는 효과를 얻을 수가 있다.for (arg ..
2015.04.16 -
[SCALA] 튜플, 집합과 맵
튜플 튜플은 List와 마찬가지로 immutable이지만 각기 다른 타입의 변수를 저장할 수 있다. 튜플에 접근하기 위해서는 _1, _2와 같이 호출을 해주어야 한다.일관성을 강조하는 scala에서 왜 pair(0), pair(1) 이런 식으로 안만들었을까나??apply 매소드는 항상 동일한 타입의 객체를 리턴하는 반면 튜플 같은 경우는 각기 다른 타입이 존재하기 때문에 _1은 어떤 타입, _2는 어떤 타입 이런식으로 따로 분리를 해논 것이다. 집합 immutable한 집합과 mutable한 집합 모두 만들 수 있다. var jetSet = Set("Boeing", "Airbus")jetSet += "Lear" 스칼라에서 따로 import를 하지 않으면 기본적으로 immutable한 집합이라고 생..
2015.04.15 -
[SCALA] 배열과 리스트
배열 기타 다른 언어들과 마찬가지로 스칼라도 배열과 리스트 타입의 자료구조를 제공한다.아래 보이는 예는 배열 타입에 대한 사용 방법을 예시하였다. val greetStrings = new Array[String](3)greetStrings(0) = "Hello"greetStrings(1) = ", "greetStrings(2) = "World!\n" for ( i print(greetStrings(i)) 코드는 간단하지만 이 코드에는 상당히 심오한 스칼라의 내용이 숨겨져 있다. 우선 new Array[String] 이란 타입으로 객체를 선언한 후 3이란 파라미터 값을 넘겨서 크기가 3인 String 타입의 배열로 인스턴스화 하였다.앞에 val로 선언하였기 때문에 분명 이 배열은 immutable이..
2015.04.14