ka373

러닝 스칼라 03] 객체, 클래스, 개발환경 등 본문

10. 스칼라

러닝 스칼라 03] 객체, 클래스, 개발환경 등

ka373 2019. 9. 2. 11:39

1. 객체(object)

하나 이상의 인스턴스를 가질 수 없는 형태의 클래스

객체지향 설계에서는 싱글턴(singleton)이라 함

스칼라에는 자바의 static에 대응하는 키워드가 없는 대신, 객체를 static과 비슷하게 사용 가능

자바에서는 한 클래스 안에 존재했을 정적 코드와 클래스 코드를 자연스럽게 분리 가능

new 키워드로 인스턴스를 생성하는 대신 이름으로 직접 해당 객체에 접근

_____________________________________________________________

2. 동반객체(companion object)

클래스와 동일한 이름을 공유하며, 동일한 파일 내에서 그 클래스로 함께 정의되는 객체

동반 객체와 클래스가 접근 제어 관점에서는 하나의 단위로 간주되므로, 각각의 private, protected 필드와 메소드에 서로 접근 가능

_____________________________________________________________

3. 싱글턴 패턴(singleton pattern)

싱글턴 패턴(singleton pattern)

소프트웨어 디자인 패턴

생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나임

최초 생성 이후 호출된 생성자: 최초의 생성자가 생성한 객체 리턴

주로 공통된 객체를 여러 개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용

static과 차이(static의 경우)

정적 변수로 객체 생성 → 어플리케이션이 실행 될 때 객체 생성

객체가 사용 되기 전에 자원 차지 → 자원 낭비

_____________________________________________________________

4. 케이스 클래스(case class)

케이스 클래스

자동으로 생성된 메소드 몇 가지를 포함하는 클래스

자동으로 생성되는 동반 객체를 포함 → 이 동반 객체 또한 자동으로 생성된 자신만의 메소드를 가지고 있음

케이스 클래스를 사용하지 않고 직접 해당 메소드와 동반 객체를 추가하여 동일한 기능 구현 가능

이름

위치

설명

apply

객체

케이스 클래스를 인스턴스화하는 팩토리 메소드

copy

클래스

요청 받은 변경사항이 반영된 인스턴스의 사본 반환. 매개변수는 현재 필드 값으로 설정된 기본값을 갖는 클래스의 필드임

equals

클래스

다른 인스턴스의 모든 필드가 이 인스턴스의 모든 필드와 일치하면 참(true) 반환. 연산자 ==로도 호출 가능

hashCode

클래스

인스턴스의 필드들의 해시 코드 반환. 해시 기반의 컬렉션에 유용

toString

클래스

클래스명과 필드들을 String으로 전환

unapply

객체

인스턴스를 그 인스턴스의 필드들의 튜플로 추출하여 패턴 매칭에 케이스 클래스 인스턴스를 사용할 수 있도록 함

 

_____________________________________________________________

5. 트레이트(trait)

트레이트

다중 상속을 가능하게 하는 클래스 유형

스칼라는 interface가 없지만, trait로 대체 가능

스칼라의 trait는 구현 가능

클래스, 케이스 클래스, 객체, 트레이트는 모두 하나 이상의 클래스를 확장할 수 없지만, 동시에 여러 트레이트를 확장할 수는 있음

믹스인(extends 키워드 사용) 순서에 따라 호출 메소드가 결정됨

선형화(linearization): 상속될 클래스와 트레이트의 수평적인 리스트를 받아서 한 클래스가 다른 클래스를 확장하는 수직적 체인으로 재구성하는 절차

 

 

_____________________________________________________________

6. 스칼라 개발환경

IDE

이클립스(플러그인 필요)

이클립스 기반으로 된 ScalaIDE

IntelliJ IDEA(인텔리제이 아이디어)

IntelliJ IDEA

스칼라 홈페이지(https://www.scala-lang.org/)에서 추천하는 IDE

스칼라 IDE로 널리 사용됨

현재 버전: IntelliJ IDEA 2018.3.1(183.4588.61)

Ultimate edition, Community edition

빌드 툴

SBT(Scala Build Tool): 사용자 수가 가장 많음. 사실상 표준

Maven

Gradle

 

_____________________________________________________________

 

스칼라 특성

객체는 하나 이상의 인스턴스를 가질 수 없는 형태의 클래스로, 이를 통해 싱글턴 패턴을 구현 가능하다.

스칼라에는 자바의 static에 대응하는 키워드가 없으며, 객체를 static처럼 사용할 수 있다.

객체를 사용하여 (자바에서는 한 클래스 안에 존재했을)정적 코드와 클래스 코드를 자연스럽게 분리할 수 있다.

케이스 클래스는 자동으로 생성된 메소드 몇 가지를 포함하는, 인스턴스 생성이 가능한 클래스로, 케이스 클래스의 이점은 편리함에 있다.

스칼라의 트레이트는 선형화를 통해 다중 상속을 가능하게 하는 클래스 유형이다.  

스칼라의 IDE로는 이클립스, 이클립스 기반의 ScalaIDE, IntelliJ IDEA 등이 있다.

스칼라 빌드 툴은 SBT(Scala Build Tool), Maven, Gradle가 있으며, SBT가 사실상 표준으로 여겨진다.

 

Comments