오브젝트
보통 클래스로부터 생성한 객체를 오브젝트라 칭한다.
scala서 오브젝트는 위의 개념이 아니다.
1. 싱글톤
object로 생성되는건 싱글톤이다. 싱글톤 객체로 사용하고 싶을때 object를 사용한다
2. 컴패니언오브젝트(http://www.scala-lang.org/api/2.11.6/#scala.annotation.meta.companionObject)
컴패니언뜻은 동료, 동반자, 친구 뭐 이런뜻이다.
발번역하면 클래스와 친구인 오브젝트.. 뭐 이런건가 ㅋ
오브젝트는 위에서 말한것처럼 정적인 객체다, 정적인 필드와 메소드를 가지고 있다.
클래스에서 일부 정적인 기능이 필요한 경우 사용하라고 만들었다.
Account컴패니언 오브젝트를 생성했다.
Account의 인스턴스가 생성되면 고유한 ID값을 부여할 수 있다.
3. 클래스나 트레이트를 확장하는 오브젝트
오브젝트는 클래스나 트레이트로부터 상속을 받아 생성할 수 있다.
그리고 이렇게 생성된 오브젝트는 이 오브젝트가 필요한 모든곳에서 공유 할 수 있다.
4. apply 메소드
일종의 생성자 함수 같은 메소드이다.
오브젝트나 클래스의 기본기능을 명시할때 사용한다.
5. 어플리케이션 오브젝트
자바나 C에서 처럼 프로그램이 시작할경우 항상 main 메소드를 찾는다.
스칼라 어플리케이션 역시 main 메소드가 필요하다.
Main method 대신 App트레이트를 확장할 수도 있다.
트레이트는 일종의 scala에서 제공하는 특별한 추상클래스이다.
보통 클래스로부터 생성한 객체를 오브젝트라 칭한다.
scala서 오브젝트는 위의 개념이 아니다.
1. 싱글톤
object로 생성되는건 싱글톤이다. 싱글톤 객체로 사용하고 싶을때 object를 사용한다
2. 컴패니언오브젝트(http://www.scala-lang.org/api/2.11.6/#scala.annotation.meta.companionObject)
컴패니언뜻은 동료, 동반자, 친구 뭐 이런뜻이다.
발번역하면 클래스와 친구인 오브젝트.. 뭐 이런건가 ㅋ
오브젝트는 위에서 말한것처럼 정적인 객체다, 정적인 필드와 메소드를 가지고 있다.
클래스에서 일부 정적인 기능이 필요한 경우 사용하라고 만들었다.
class Account { val id = Account.newUniqueNumber() private var balance = 0.0 def deposit(amount : Double): Unit ={ balance += amount } } object Account { private var lastNumber =0 private def n zjaewUniqueNumber()={ lastNumber +=1 lastNumber } }
Account컴패니언 오브젝트를 생성했다.
Account의 인스턴스가 생성되면 고유한 ID값을 부여할 수 있다.
scala> var ac1 = new Account ac1: Account = Account@35ff8fc9 scala> var ac2 = new Account ac2: Account = Account@29c2c826 scala> ac1 res10: Account = Account@35ff8fc9 scala> ac1.id res11: Int = 1 scala> ac2.id res12: Int = 2
3. 클래스나 트레이트를 확장하는 오브젝트
오브젝트는 클래스나 트레이트로부터 상속을 받아 생성할 수 있다.
그리고 이렇게 생성된 오브젝트는 이 오브젝트가 필요한 모든곳에서 공유 할 수 있다.
4. apply 메소드
일종의 생성자 함수 같은 메소드이다.
오브젝트나 클래스의 기본기능을 명시할때 사용한다.
scala> class Bar{ | def apply() = 0 | } defined class Bar scala> val bar = new Bar bar: Bar = Bar@28348c6 scala> bar() res13: Int = 0
5. 어플리케이션 오브젝트
자바나 C에서 처럼 프로그램이 시작할경우 항상 main 메소드를 찾는다.
스칼라 어플리케이션 역시 main 메소드가 필요하다.
object chap6 { def main(args: Array[String]): Unit = { println("hello") } }
//hello
Main method 대신 App트레이트를 확장할 수도 있다.
트레이트는 일종의 scala에서 제공하는 특별한 추상클래스이다.
object chap6 extends App { println("hello") }
창피디님! 도움이 되었습니다. ㅎㅎㅎ
답글삭제좋타!!
답글삭제