Programming(174)
-
[SCALA] 상속
스칼라에서도 추상 클래스가 존재하며 그에 대한 상속도 존재한다.abstract class Element{ def contents: Array[String]}위의 예제는 Element 라는 추상 클래스를 정의한 것이고, contents라는 매서드를 정의만 한 것이다. contents라는 매서드가 정의만 되었기 때문에 추상 맴버가 되고 (추상 맴버일 경우에는 맴버 앞에 abstract를 붙여주지 않아도 됨) 추상 맴버를 가진 class는 자연스럽게 추상 클래스가 된다. (class 앞에 abstract 붙여 줘야 한다.)이 Element를 상속 받기 위해서는 contents라는 매서드를 반드시 구현을 해주어야 한다.상속은 자바와 마찬가지로 extends 키워드를 사용한다. 상속은 private 맴버를 ..
2015.04.25 -
[SCALA] 코드 중복 줄이기와 Currying
파일의 마지막 이름이 입력된 문자와 일치하는지를 찾는 함수, 파일 이름에 해당 문자열이 포함되어 있는지를 찾는 함수가 아래와 같이 정의되어 있다고 가정하자.def fileEnding(query : String) = { for (file yield file}def fileContaining(query: String) = { for ( file yield file}딱 보기에도 비슷한 구조로 되어 있다. 이 두 함수를 합칠 수는 없을까??스칼라에서는 함수를 값으로 인식하기 때문에 매개변수에 각각의 기능을 하는 함수를 직접 넘기면 어떨까??def filesMatching(query:String, matcher: (String, String) => Boolean) = { ..
2015.04.24 -
[SCALA] 함수와 클로저
스칼라에서 함수 사용함에 있어 기본 C나 자바와 다른 몇가지 특징이 있어 이번 포스팅에서 설명하려 한다.첫번째로 스칼라에서는 함수 내에서 함수를 선언하고 사용할 수가 있다. def processData(data: List, width: Int){ def processLine(line: String){ if (line.length > width) ..... } for (d processLine(d)} 위의 코드를 보면 processData란 함수 안에 processLine이란 함수를 정의해서 내부적으로만 사용할 수 있도록 했다.또한 processLine에서는 processData에서 정의한 변수들도 사용이 가능하다. 이런 식으로..
2015.04.22 -
[SCALA] 제어 문
스칼라에서 제어 구문은 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 -
[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