본문 바로가기

전체 글

(16)
[Leaning Scala] Chapter9. 트레이트 이 글은 O'REILLY 러닝스칼라 서적을 기반으로 작성 되어 있습니다. 러닝스칼라 – Daum 검색 Daum 검색에서 러닝스칼라에 대한 최신정보를 찾아보세요. search.daum.net 트레이트 (trait) 트레이트는 다중 상속을 가능하게 하는 스칼라의 유형 중 하나 입니다. 다른 클래스 유형과 마찬가지로 트레이트는 하나 이상의 클래스를 확장할 수는 없지만 동시에 여러 트레이트를 확장할 수는 있습니다. 트레이트는 직접 인스턴스화가 될 수 없고 클래스 매개변수를 가질 수는 없지만 타입 매개변수를 사용할 수 있어 재사용성이 뛰어납니다. // 트레이트 정의 trait Article { def publish() } // 트레이트 구현 class MyArticle(title: String, content: ..
[Leaning Scala] Chapter9. Object, 케이스 클래스 이 글은 O'REILLY 러닝스칼라 서적을 기반으로 작성 되어 있습니다. 러닝스칼라 – Daum 검색 Daum 검색에서 러닝스칼라에 대한 최신정보를 찾아보세요. search.daum.net Object 서적에는 객체로 설명되어 있으나 클래스를 통햇 생성되는 객체(instance)와 혼동될 여지가 있어 영어인 Object로 명시 하겠습니다. Object는 하나 이상의 인스턴스를 가질 수 없는 형태의 클래스이며 객체지향적으로 싱글턴(singleton)이라고 합니다. 자바 등 다른 객체지향 언어에서는 정적(static)이거나 전역(global)로 선언할 수 있으며 코틀린의 object와는 비슷합니다. Object는 따로 인스턴스화를 하지 않더라도 필드나 메소드에 접근이 가능한 구조입니다. 정확하게는 최초로 접..
[Learning Scala] Chapter8. 클래스 이 글은 O'REILLY 러닝스칼라 서적을 기반으로 작성 되어 있습니다. 러닝스칼라 – Daum 검색 Daum 검색에서 러닝스칼라에 대한 최신정보를 찾아보세요. search.daum.net 이전 포스팅까지는 스칼라의 핵심적인 기능과 사용 방법에 대해 알아봤고 이제 스칼라로 객체지향 개발을 하도록 제공되는 기능들을 알아보려고 합니다. 먼저 가장 기본적인 클래스에 대해 알아보겠습니다. 다만 이번 포스팅은 기존에 자바 등 객체지향 언어에서 클래스를 사용해본 경험이 있다는 전제 하에 설명하려 합니다. 서적에는 스칼라의 클래스에 대한 다양한 내용이 있지만 기본적인 사용법과 자바 클래스와의 차이점 위주로 설명드리겠습니다. 스칼라의 클래스에서도 다른 객체지향 언어의 클래스에서 제공되는 상속(inheritance), ..
[Learning Scala] Chapter7. 그 외의 컬렉션 (모나딕 컬렉션) 이 글은 O'REILLY 러닝스칼라 서적을 기반으로 작성 되어 있습니다. 러닝스칼라 – Daum 검색 Daum 검색에서 러닝스칼라에 대한 최신정보를 찾아보세요. search.daum.net 모나딕 컬렉션(monadic collection) 이란 `Iterable` 연산과 비슷한 변형 연산은 지원하지만 하나 이상의 요소를 포함할 수 없는 컬렉션을 말합니다. Option 컬렉션 크기가 1인 컬렉션이며 값의 존재 여부를 나타내며 `null`의 안전한 처리를 하는데 사용되는 경우가 많습니다. 또한 자바의 `Optional`과 비슷하다고 볼 수 있습니다. 하나의 값에 대한 여러 연산 체인이 있을 때 이 연산들을 안전하게 처리하는데 좋은 방법이 될 수 있습니다. val name = Option("alan") nam..
[Learning Scala] Chapter7. 그 외의 컬렉션 (가변, 배열, 시퀀스) 이 글은 O'REILLY 러닝스칼라 서적을 기반으로 작성 되어 있습니다. 러닝스칼라 – Daum 검색 Daum 검색에서 러닝스칼라에 대한 최신정보를 찾아보세요. search.daum.net 이전 포스팅에서 보편적인 컬렉션인 `List`, `Set`, `Map`에 대해 알아봤습니다. 이 세 컬렉션은 모두 불변의 타입이며 `List`는 순서가 있는 컬렉션이고 `Set`과 `Map`은 순서가 없는 컬렉션 입니다. 위 세 컬렉션을 제외한 다른 컬렉션에 대해 알아보겠습니다. 가변적인 컬렉션 불변의 타입을 가진 컬렉션은 요소를 추가, 변경, 삭제가 불가능하지만 가변적인 컬렉션을 사용하여 처리할 수 있습니다. 불변 타입의 컬렉션과 대응되는 가변 컬렉션은 아래와 같습니다. 불변의 타입 가변적인 대응 타입 `collec..
[Learning Scala] Chapter6. 보편적인 컬렉션 (2) 이 글은 O'REILLY 러닝스칼라 서적을 기반으로 작성 되어 있습니다. 러닝스칼라 – Daum 검색 Daum 검색에서 러닝스칼라에 대한 최신정보를 찾아보세요. search.daum.net 이전 포스팅에서 기본적인 컬렉션에 대해 알아보았습니다. 이번 포스팅에서는 앞서 공부한 컬렉션들에 대해 조금 더 디테일한 기능에 대해 알아보겠습니다. (`List` 컬렉션을 중점으로 두고 작성하겠습니다.) List에는 무엇이 있는가? List 정의하기 리스트를 정의하는 법은 다양하게 있지만 간단하게 몇가지를 알아보겠습니다. // 빈 리스트 선언 (리스트 타입을 지정해줘야합니다.) val list = List[String]() // String List 정의 (값의 타입을 추론합니다.) val colors = List("..
[Learning Scala] Chapter6. 보편적인 컬렉션 (1) 이 글은 O'REILLY 러닝스칼라 서적을 기반으로 작성 되어 있습니다. 러닝스칼라 – Daum 검색 Daum 검색에서 러닝스칼라에 대한 최신정보를 찾아보세요. search.daum.net 스칼라는 JVM 기반 언어이므로 기본적으로 자바 컬렉션이 사용이 가능합니다. 하지만 추가적으로 스칼라만의 다양한 고차 연산도 있있습니다. 대부분 `Iterable`의 서브타입이고 컬렉션 데이터를 처리하는 메소드들을 제공합니다. List `List`는 불변의 단방향 연결 리스트입니다. `List`를 가볍게 아래와 같이 사용해 볼 수 입습니다. val list: List[Int] = List(11, 30, 10, 21) // List.apply(11, 30, 10, 21) println(s"list size : ${lis..
[Learning Scala] Chapter5. 일급 함수 이 글은 O'REILLY 러닝스칼라 서적을 기반으로 작성 되어 있습니다. 러닝스칼라 – Daum 검색 Daum 검색에서 러닝스칼라에 대한 최신정보를 찾아보세요. search.daum.net 일급 함수란? 함수가 선언되고 호출되는 것 외에 다른 데이터 타입처럼 사용될 수 있는 것. 식별자에 할당되지 않고도 리터럴 형태로 생성될 수 있음. 값, 변수 데이터 구조처럼 컨테이너에 저장될 수 있음. 다른 함수의 매개변수로 사용되거나 다른 함수의 반환값으로 사용될 수 있음. (고차 함수: higher-order function) 함수 타입과 값 함수의 타입은 입력 타입과 반환 값 타입의 단순한 그룹입니다. 일반적인 함수 정의 시 `String`, `Int`, `Unit` 등의 타입을 반환하지만 함수 자체를 반환할 ..