Programming(178)
-
[10강] 함수와 클로저
스칼라에서 함수 사용함에 있어 기본 C나 자바와 다른 몇가지 특징이 있어 이번 포스팅에서 설명하려 한다. 첫번째로 스칼라에서는 함수 내에서 함수를 선언하고 사용할 수가 있다. def processData(data: List, width: Int){ def processLine(line: String){ if (line.length > width) ..... } for (d x + 1 위의 함수 리터럴은 x를 입력으로 받아 1을 더해주겠다는 뜻이다. 스칼라에서는 이러한 함수 리터럴을 값으로 저장할 수 있다. var function = (x : Int) => x + 1 위와 같이 선언한 경우 함수 리터럴은 아직 소스코드인데 반해, 아래와 같이 값을 실행시키게 되면 객체로 변환이 된다. function(10)..
2015.04.22 -
[9강] 제어 문
스칼라에서 제어 구문은 if, while, for, try, match 가 전부이다. if 스칼라에서 if 표현식은 단지 표현식이 아니라 값을 리턴한다. 그래서 아래와 같은 표현이 가능하다. val filename = if(!args.isEmpty) args(0) else "default.txt" 위와 같이 표현을 하면 좋은 게 변수 선언과 동시에 값을 배정할 수가 있기 때문에 val 변수 사용이 가능하다는 것이다.이렇게 val로 한번 선언한 변수는 final 효과를 지니기 때문에 효과적인 코딩 스타일을 구사할 수 있다. while while은 Unit 타입의 결과를 리턴한다. Unit은 빈괄호 ()를 리턴하기 때문에 void와는 다르다고 할 수 있다.변수에 재할당 하는 코드 역시 Unit을 리턴한다. ..
2015.04.21 -
[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.04.19 -
[7강] 특수 문자열 처리와 연산자 우선 순위
특수문자 표현 스칼라에서도 아래와 같이 특수 문자의 표현이 가능하다. 위의 사진을 보면 특수 문자 처리를 위해 다소 복잡해 보인다. 스칼라에서는 아래와 같이 변경할 수 있다. 또한 따옴표 세 개를 이용해서 두줄의 문자열도 표현할 수가 있다. 하지만 결과를 보면 문자열 사이에 공백도 포함되는 것을 확인할 수 있다. 공백을 없애고 싶다면 문자열 시작 부분에 '|'를 기입해준 후 stripMargin 함수를 호출하면 된다. 비트 연산 스칼라에서의 비트 연산은 기존의 다른 프로그래밍 언어들과 비슷하다. 그 중 특이한게 있어서 리마인드 차원에서 남긴다. 스칼라의 비트 시프트 연산자는 () 가 있으며 추가로 (>>>) 연산자도 있다. >>, > 31 -1은 이진 표현으로 111111111111111111111111..
2015.04.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.04.17 -
[4강] 함수형으로 만들자
당장 Scala를 사용하기도 어려운데 함수형으로 만들어 보는 건 더더욱 힘든일 인 것 같다. 몇 가지 규칙을 정해서 함수형 코딩을 하는 습관을 기르도록 하자 첫번째로 var의 사용을 줄이자. var는 mutable한 자료형이다. mutable한 자료는 어느 순간 이상 동작을 일으킬 가능성이 높고, 예외 상황을 발생 시킬 수 있기 때문에 가급적 immutable한 자료형의 사용을 늘리도록 하자. 아래의 예제를 보면 var i = 0 while(i < args.length){ println(args(i)) i += 1} 이 코드로 argument 값을 출력할 수가 있다. 하지만 아래와 같이 코딩 스타일을 변경하면 mutable한 자료형 없이 같은 결과를 낼 수 있으며 코드 복잡도도 줄어드는 효과를 얻을 수가..
2015.04.16