ka373
러닝 스칼라 03] 객체, 클래스, 개발환경 등 본문
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가 사실상 표준으로 여겨진다.
'10. 스칼라' 카테고리의 다른 글
러닝 스칼라 02] 일급 함수, 컬렉션, 클래스와 객체, 케이스 클래스, 트레이트에서 몇가지 (0) | 2019.09.02 |
---|---|
러닝 스칼라 01] 스칼라 소개, 데이터, 표현식 등 (0) | 2019.09.02 |
스칼라 설치부터 Hello world까지 (0) | 2019.08.31 |
스칼라 공부: 러닝 스칼라 (0) | 2019.08.31 |