본문 바로가기

Languages

(15)
Scala-99-Problems 솔루션 : P05 ~ P07 지난 글에서는 가장 기본적인 리스트 내에서 원소를 찾는 문제들인 P01~P04에 대한 솔루션을 작성하였습니다. P08~P13 의 내용이 리스트 내 중복 제거 및 Run-length encoding에 대한 내용이라 해당 내용들을 한번에 묶어서 정리하기 위해 이번 글에서는 P05~P07 까지의 솔루션에 대해 작성하려 합니다. P05. 리스트 내 원소들의 순서가 반전된 리스트를 반환하는 함수를 작성하시오. P05. Reverse a list. 저는 재귀적으로 작성하는 솔루션을 선호해 이번 문제에서도 list의 head::tail 특성을 활용하였습니다. 재귀적으로 맨 앞 head를 Nil이 나올 떄 까지 tail에 마지막에 이어붙인다면 리스트 전체가 반전됩니다. 소스 코드는 다음과 같습니다 : def rever..
Scala-99-Problems 솔루션 : P01 ~ P04 안녕하세요! Scala 공부를 위해, 스칼라로 작성된 코딩 테스트 문제를 풀고 있습니다. Phil Gold의 99-Scala-Problems를 정리해 둔 다음 git을 clone하여 하나씩 문제를 풀고 있습니다. S-99: Ninety-Nine Scala Problems As in the previous section, we will start with a skeleton file, logic1.scala, and add code to it for each problem. The difference here is that the file starts out almost empty. First of all, consult a good book on discrete mathematics or algorith..
[스칼라] 함수 - 기초 스칼라에서는 '재활용 가능한 이름을 가진 표현식'을 함수라 칭하며, 이 표현식의 마지막줄이 반환값이 됩니다. 함수형 프로그래밍에서 함수란 '일급 객체 First-class object'이며, 이는 다른 객체들에 일반적으로 적용 가능한 연산(매개변수화, 수정, 변수에 할당 등)을 지원하는 객체를 의미합니다. 위키피디아의 일급 객체 정의 : https://ko.wikipedia.org/wiki/%EC%9D%BC%EA%B8%89_%EA%B0%9D%EC%B2%B4 일급 객체 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 컴퓨터 프로그래밍 언어 디자인에서, 일급 객체(영어: first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보..
[스칼라] 반복문 꾸준히 포스트를 작성한다는게 차일피일 미뤄두다 이제 하나씩 정리합니다..^^ 매치 표현식을 사용한 흐름제어에 이어 이번 글에서는 반복문에 대해서 다루어 보려고 합니다. 다른 프로그래밍 언어에서도 보편적으로 쓰이는 반복문은 스칼라에서도 비슷한 형태를 가지고 있습니다. 자바 8버전부터 사용 가능한 for-comprehension과 동일한 모양을 가지고 있으며, Range 컬렉션을 사용하여 반복 횟수를, yield 키워드를 사용하여 루프를 결과 컬렉션을 반환하는 표현식으로 전환할 수도 있습니다. 전통적인 while문 역시 지원하나, 스칼라에서는 while문은 결과 컬렉션을 반환하는 표현식으로 사용할 수 없기 때문에 while문보다 for-comprehension의 사용도가 조금 더 높은 것 같습니다. 반복문을..
[스칼라] 매치 표현식 스칼라에서도 전통적인 if-else 문을 지원하나, 더 간결하고 표현력이 좋으며 확장성이 높은 매치 표현식 match expressions 사용을 선호합니다. 자바의 switch-case 문과 비슷하게 동작하나, 0개 또는 단 하나의 패턴만 매칭할 수 있습니다. //매치 표현식 표현식 match { case 패턴매치 => 표현식 case _ => 표현식//catch-all 패턴 } 와일드 카드를 사용하여 매치 표현식에서 catch-all 패턴을 사용할 수 있으며, 단 하나의 패턴만 매칭할 수 있어 자바처럼 여러 개의 패턴을 한 번에 매칭하는 형태로는 사용할 수 없습니다. 따라서 중간에 빠져 나오는 break문이 존재하지 않습니다. 매치 표현식에서는 값 바인딩을 사용하여 매치 표현식의 입력 패턴을 바인딩하..
[스칼라] 데이터 타입, 표현식 스칼라는 Java와 달리 primitive type이 없습니다. 즉, 모든 데이터들은 객체로 취급됩니다. 작업하는 데이터의 종류를 스칼라에서는 타입 type 이라 부르며, 스칼라의 모든 데이터는 타입에 대응됩니다. 다음 그림은 스칼라의 타입 계층 구조 다이어그램입니다. Any는 스칼라에서 모든 타입의 루트이며, 톱타입이라고도 합니다. equals, toString 등의 범용 메소드가 정의되어 있으며, 인스턴스화 될 수 없고, 모든 값 타입의 루트인 AnyVal과 모든 참조 타입의 루트인 AnyRef를 서브클래스로 가집니다. 이 두 클래스 역시 인스턴스화 될 수 없습니다. Nothing은 모든 타입의 서브타입이며, 타입으로만 사용되고 마찬가지로 인스턴스화 될 수 없습니다. 문자 그대로 널(null)값을 의..
[스칼라] 스칼라 개요 및 Mac에서 스칼라 개발환경 설정하기 이번에 업무상 스칼라를 공부할 일이 생겨 복습 겸 공부한 내용을 정리하기로 했습니다. 스칼라는 확장 가능한 언어 라는 뜻의 SCAlable LAnguage의 약자로, JVM 상에서 구동되며 함수형 프로그래밍과 객체지향 프로그래밍의 특징을 동시에 지원하는 언어입니다. 스위스 로잔 연방 공과대학교(EPFL)의 마틴 오더스키 교수가 개발하였으며, Java의 기능 확장을 위하여 고안되었습니다. 실제로 별다른 절차 없이 자바의 소스코드를 가져다 쓸 수 있습니다. object HelloWorld { def main(args:Array[String]) { println("Hello, World!") } } 혹은 object HelloWorld extends App..