스칼라
- 변수
- 함수
이번엔 클래스에 대해 알아보자.
일단 클래스의 기본형태를 보자
class MyClass {
}
요거다. 자바랑 비슷하다.
그럼 상세하게 더 보자.
class MyClass(id: Long, name: String) {
def this(id:Long) = this(id,"No name")
def getName = name
def getId = id
override def toString = s"id = $id name = $name"
}
보자 흠..
일단 MyClass옆에 있는저건 생성자다.
저렇게 클래스 생성할 수 있다.
그리고 그 밑은
id
만 있는 생성자다. 보조 생성자?
그리고 그 밑은 흔히 말하는
getter
일반적은
function
이다.
그리고 자바와 다른점은
override
어노테이션이 아니라 예약어 인듯하다.
그럼 한번 클래스를 생성해보자.
val myClass = new MyClass(1L,"wonwoo")
println(myClass)
println(myClass.getName)
id = 1 name = wonwoo
wonwoo
다음 소스도 보자
class MyClass(val id: Long, val name: String) {
private val number = 1000
def this(id:Long) = this(id,"No name")
def getName = name
def getId = id
def getNumber = number
def setNumber(number:Int) = this.number = number
override def toString = s"id = $id name = $name"
}
자바와 마찬가지로
private
으로 접근제어도 가능하다.
그리고 number는
val
이 때문에
setNumber
컴파일 에러가 날것이다.
앞서 설명 했듯이
val
는 자바의
final
이라 생각하면 빠르다.
자바 개발자를 위한 스칼라 공부인듯 하네..
아 저기 보인 toString 함수를 보자.
우리가 자바를 사용할때 불편점이 있었다. 위와 같은 코드를 만들때
"id = " + id + "name = " + name
이런식을 만들었다.
보기만 해도 불편하다. 불편한 것도 있지만 자바에서 저코드는 비효율적이다. 물론 저렇게 몇개 안되는 연산은 상관없지만
많은 연산을 할 경우 String을 계속 생성하기 때문에 메모리상 비효율적이다.
그건 그렇고 일단 보기에도 불편하다.
하지만 스칼라는 앞에 s만 붙이고 나면 효율적으로 이어 나갈 수 있다. 간편해서 좋다.
클래스이야기 하다 삼천포로 빠졌네.
다시 class 로 가자
class Animal(var name: String) {
def getName = name
override def toString = s"name is $name"
}
class Dog(name: String, sound: String) extends Animal(name: String) {
def getSound = sound
override def toString = s"my name is $name and sound $sound"
}
상속이다. 객체지향언어라면 상속이 있다. 스칼라도 있다.
개념은 자바와 같다. 자바 개발자라면 생성자를 만드는게 약간 어색하지만 그래도 이해는 된다.
마찬가지로 추상클래스도 있다.
abstract class Pizza{
def order
def orderPizza = {
order
prepare
bake
}
def prepare = println("prepare")
def bake = println("bake")
}
class ChicagoPizza extends Pizza{
override def order: Unit = println("ChicagoPizza")
}
class LAPizza extends Pizza {
override def order: Unit = println("LAPizza")
}
간단하게 만들어봤다.
개념은 자바와 동일한듯 하다.
abstract
메소드만 필수적으로 구현 해주면 된다.
클래스 자체는 어렵지 않은 듯 하다. 자바와 비슷하기 때문에 그렇게 어렵게 느껴지짆 않는다.
다음 시간에 스칼라의 인터페이스라 불리는
trait
에 대해 알아보자
시간이 되면 class도 더 알아볼 예정이다.