복붙노트

[SCALA] 스칼라에서 객체와 클래스의 차이

SCALA

스칼라에서 객체와 클래스의 차이

난 그냥 인터넷에서 몇 가지 스칼라 튜토리얼을 통해 갈거야 및 물체가 예를의 시작에 선언 된 몇 가지 예에서 나타났습니다.

스칼라의 클래스와 객체 사이의 차이점은 무엇입니까?

해결법

  1. ==============================

    1.또한 객체와 클래스에 대한 스칼라 설명서를 참조하십시오.

    또한 객체와 클래스에 대한 스칼라 설명서를 참조하십시오.

    대부분의 경우, 먼저 어떤 클래스의 인스턴스를 인스턴스화하지 않고도 방법과 값을 사용할 수 있어야한다 / 변수를 보유 할 객체가 필요합니다. 이 사용은 밀접하게 자바에서 정적 멤버 관련이있다.

    object A {
      def twice(i: Int): Int = 2*i
    }
    

    그런 다음 A.twice를 사용하는 방법 위에 호출 할 수 있습니다 (2).

    두 번 일부 클래스 A의 멤버 인 경우에, 당신은 첫 번째 인스턴스를 만들 필요가있다 :

    class A() {
      def twice(i: Int): Int = 2 * i
    }
    
    val a = new A()
    a.twice(2)
    

    당신은 두 번 인스턴스 특정 데이터를 필요로하지 않습니다,이게 얼마나 중복 볼 수 있습니다.

    또한 클래스 또는 특성의 특별한 인스턴스로 개체 자체를 사용할 수 있습니다. 이 작업을 수행 할 때, 개체는 그 서브 클래스의 인스턴스가되기 위해 몇 가지 특성을 확장 할 필요가있다.

    다음 코드를 살펴 보자 :

    object A extends B with C {
      ...
    }
    

    이 선언은 첫째 B와 C를 확장 익명 (액세스) 클래스를 선언하고이 클래스라는 이름의 A.의 단일 인스턴스를 인스턴스화

    이것은이 C.와 B 형 또는 C, 또는 B의 오브젝트를 기대 함수로 전달 될 수 있다는 것을 의미

    또한 스칼라에서 객체의 몇 가지 특별한 기능이 존재한다. 나는 공식 문서를 읽을 것을 권장합니다.

  2. ==============================

    2.클래스는 정의에 대한 설명입니다. 이 방법과 다른 유형의 구성 측면에서 유형을 정의합니다.

    클래스는 정의에 대한 설명입니다. 이 방법과 다른 유형의 구성 측면에서 유형을 정의합니다.

    고유 보장하는 클래스의 인스턴스 - 객체는 싱글이다. 코드의 모든 개체에 대해 익명 클래스는 구현하는 객체를 선언 어떤 클래스에서 상속되는 만들어집니다. 이 클래스는 스칼라 소스 코드에서 볼 수없는 - 당신이 반사를 통해 얻을 수 있지만.

    객체와 클래스 사이의 관계가있다. 객체들은 같은 이름을 공유하는 경우 클래스의 동반자 객체이라고합니다. 이 경우, 각각 다른 민간 가시성의 방법에 액세스 할 수 있습니다. 이 방법은 자동으로하지만, 가져올 수 없습니다. 당신은 명시 적으로 가져 오거나 클래스 / 객체 이름을 접두사해야 하나.

    예를 들면 :

    class X {
      // class X can see private members of object X
      // Prefix to call
      def m(x: Int) = X.f(x)
    
      // Import and use
      import X._
      def n(x: Int) = f(x)
    
      private def o = 2
    }
    
    object X {
      private def f(x: Int) = x * x
    
      // object X can see private members of class X
      def g(x: X) = {
        import x._
        x.o * o // fully specified and imported
       }
    }
    
  3. ==============================

    3.객체는 정확히 하나의 인스턴스 (새로운 MyObject를 호출 할 수 없습니다)이있다. 당신은 클래스의 여러 인스턴스를 가질 수 있습니다.

    객체는 정확히 하나의 인스턴스 (새로운 MyObject를 호출 할 수 없습니다)이있다. 당신은 클래스의 여러 인스턴스를 가질 수 있습니다.

    자바 오브젝트의 정적 메소드 및 필드와 같은 (일부 추가) 목적이있다.

  4. ==============================

    4.많은 설명한 바와 같이, 객체는 단일 인스턴스를 정의합니다. 내가 믿는 대답을 여기에 한 가지 탈락 개체가 여러 용도로 사용하는 것이 있습니다.

    많은 설명한 바와 같이, 객체는 단일 인스턴스를 정의합니다. 내가 믿는 대답을 여기에 한 가지 탈락 개체가 여러 용도로 사용하는 것이 있습니다.

    그것은 매우 강력하고 일반적인 구조입니다. 무엇 스칼라 초보자에게 매우 혼란 스러울 수는 동일한 구조가 크게 다른 용도를 가질 수 있다는 것입니다. 그리고 객체 더욱 혼란 스러울 수 있습니다 한 번에 서로 다른 용도의 많은 서비스를 제공 할 수 있습니다.

  5. ==============================

    5.스칼라에서 객체를 정의하는 것은 정적 메소드가 자바의 클래스를 정의하는 것과 같다. 그러나, 스칼라의 개체는 다른 수퍼 클래스를 확장 인터페이스를 구현하고,이 클래스의 인스턴스 인 것처럼 주위에 전달 될 수 있습니다. (그래서 더 정적 클래스의 메소드 만 같다).

    스칼라에서 객체를 정의하는 것은 정적 메소드가 자바의 클래스를 정의하는 것과 같다. 그러나, 스칼라의 개체는 다른 수퍼 클래스를 확장 인터페이스를 구현하고,이 클래스의 인스턴스 인 것처럼 주위에 전달 될 수 있습니다. (그래서 더 정적 클래스의 메소드 만 같다).

  6. ==============================

    6.공식 차이 -

    공식 차이 -

    사용의 차이 :

  7. ==============================

    7.개체의 키워드는 하나의 명명 된 인스턴스가있는 클래스처럼 새로운 싱글 타입을 만듭니다. 자바에 익숙하다면, 스칼라의 객체를 선언하는 것은 익명 클래스의 새로운 인스턴스를 생성하는 등의 많은입니다.

    개체의 키워드는 하나의 명명 된 인스턴스가있는 클래스처럼 새로운 싱글 타입을 만듭니다. 자바에 익숙하다면, 스칼라의 객체를 선언하는 것은 익명 클래스의 새로운 인스턴스를 생성하는 등의 많은입니다.

    스칼라는 자바의 static 키워드에 상응가 없습니다, 당신은 자바에서 정적 멤버와 클래스를 사용할 수있는 경우 객체는 종종 스칼라에 사용됩니다.

  8. ==============================

    8.개체 클래스이지만 이미 인스턴스가 (이다), 그래서 당신은 새로운 ObjectName를 호출 할 수 없습니다. 반면에, 클래스 그냥 입력하고 그것을 새로운 클래스 이름을 호출하여 인스턴스를 할 수있다 ().

    개체 클래스이지만 이미 인스턴스가 (이다), 그래서 당신은 새로운 ObjectName를 호출 할 수 없습니다. 반면에, 클래스 그냥 입력하고 그것을 새로운 클래스 이름을 호출하여 인스턴스를 할 수있다 ().

  9. ==============================

    9.스칼라, 정적 개념이 없다. 따라서 스칼라는 프로그램 실행에 대한 진입 점을 제공하는 단일 개체를 만듭니다. 당신이 싱글 톤 객체를 생성하지 않는 경우, 코드가 성공적으로 컴파일하지만 모든 출력을 생성하지 않습니다. 싱글 개체 내에서 선언하는 방법은 세계적으로 액세스 할 수 있습니다. 싱글 톤 객체는 클래스와 특성을 확장 할 수 있습니다.

    스칼라, 정적 개념이 없다. 따라서 스칼라는 프로그램 실행에 대한 진입 점을 제공하는 단일 개체를 만듭니다. 당신이 싱글 톤 객체를 생성하지 않는 경우, 코드가 성공적으로 컴파일하지만 모든 출력을 생성하지 않습니다. 싱글 개체 내에서 선언하는 방법은 세계적으로 액세스 할 수 있습니다. 싱글 톤 객체는 클래스와 특성을 확장 할 수 있습니다.

    스칼라 싱글 개체 예

    object Singleton{  
        def main(args:Array[String]){  
            SingletonObject.hello()         // No need to create object.  
        }  
    }  
    
    
    object SingletonObject{  
        def hello(){  
            println("Hello, This is Singleton Object")  
        }  
    }  
    

    산출:

    Hello, This is Singleton Object
    

    당신이 싱글 개체와 같은 이름의 클래스가있을 때 스칼라, 그것은 동반자 클래스라고하며 싱글 객체는 동반자 개체라고합니다.

    컴패니언 클래스와 그 동반자는 모두 같은 소스 파일에 정의되어 있어야 오브젝트.

    스칼라 도우미 개체 예

    class ComapanionClass{  
        def hello(){  
            println("Hello, this is Companion Class.")  
        }  
    }  
    object CompanoinObject{  
        def main(args:Array[String]){  
            new ComapanionClass().hello()  
            println("And this is Companion Object.")  
        }  
    }  
    

    산출:

    Hello, this is Companion Class.
    And this is Companion Object.
    

    스칼라에서는 클래스가 포함 할 수 있습니다 :

    1. 데이터 멤버

    2. 회원의 방법

    3. 생성자 블록

    4. 중첩 된 클래스

    5. 슈퍼 클래스 정보 등

    당신은 클래스의 모든 인스턴스 변수를 초기화해야합니다. 디폴트 범위가 없습니다. 액세스 범위를 지정하지 않으면, 그것은 public입니다. 주요 메소드가 정의되어있는 객체가 있어야합니다. 그것은 당신의 프로그램의 시작 지점을 제공합니다. 여기, 우리는 클래스의 예를 만들었습니다.

    클래스의 스칼라 샘플 예

    class Student{  
        var id:Int = 0;                         // All fields must be initialized  
        var name:String = null;  
    }  
    object MainObject{  
        def main(args:Array[String]){  
            var s = new Student()               // Creating an object  
            println(s.id+" "+s.name);  
        }  
    } 
    

    미안 해요, 내가 너무 늦게 오전하지만 난 당신을 도움이되기를 바랍니다.

  10. ==============================

    10.자바 클래스하지만 스칼라와 같은 스칼라 클래스는없는 당신에게 자바의 main 메소드와 같은 클래스의 모든 입력 방법을 제공합니다. 주요 방법은 객체 키워드와 관련된. 당신은 암시 적으로 정의 된 클래스의 싱글 톤 객체를 생성로 객체 키워드 생각할 수 있습니다.

    자바 클래스하지만 스칼라와 같은 스칼라 클래스는없는 당신에게 자바의 main 메소드와 같은 클래스의 모든 입력 방법을 제공합니다. 주요 방법은 객체 키워드와 관련된. 당신은 암시 적으로 정의 된 클래스의 싱글 톤 객체를 생성로 객체 키워드 생각할 수 있습니다.

    자세한 내용은이 문서를 확인 스칼라 프로그래밍에서 클래스와 객체 키워드

  11. ==============================

    11.목적은 자바 일부 확장에, 정적 특성이 JVM에 넣어 때 개체를 creat에있는 정적 클래스 need't 의미에서 정적 클래스에 동일, 그것은 바로의 클래스 이름을 사용할 수 있습니다

    목적은 자바 일부 확장에, 정적 특성이 JVM에 넣어 때 개체를 creat에있는 정적 클래스 need't 의미에서 정적 클래스에 동일, 그것은 바로의 클래스 이름을 사용할 수 있습니다

  12. ==============================

    12.당신이 자바 배경에서 오는 경우 스칼라 클래스의 개념은 종류의 유사한 자바하지만, 스칼라의 클래스 캔트 정적 멤버가 포함되어 있습니다.

    당신이 자바 배경에서 오는 경우 스칼라 클래스의 개념은 종류의 유사한 자바하지만, 스칼라의 클래스 캔트 정적 멤버가 포함되어 있습니다.

    스칼라의 객체는 스칼라에서 객체가 키워드이며, 자바 객체 클래스의 인스턴스입니다, 당신은 개체 이름을 사용하여 내부의 메소드를 호출 싱글 타입

  13. ==============================

    13.클래스는 다른 언어에서 다른 클래스와 같다. 당신은 몇 가지 구문 차이가 다른 언어와 같은 클래스를 정의합니다.

    클래스는 다른 언어에서 다른 클래스와 같다. 당신은 몇 가지 구문 차이가 다른 언어와 같은 클래스를 정의합니다.

    class Person(val name: String)
    val me = new Person("My name")
    

    그러나, 객체는 하나의 객체와 클래스입니다. 이 동반자 객체를 사용하여 클래스의 정적 멤버를 만드는 데 사용할 수 있습니다 이것은 흥미 있습니다. 이 동반자 객체는 클래스 정의의 private 멤버에 액세스 할 수 그것을 당신이 정의하고있는 클래스와 같은 이름이 있습니다.

    class Person(var name: String) {
    
      import Person._
    
      def hi(): String = sayHello(name)
    }
    
    object Person {
      private def sayHello(name: String): String = "Hello " + name
    }
    
    val me = new Person("My name")
    me.hi()
    

    또한, 주목할 점은 객체 클래스가 게으르게 또 다른 중요한 점이다 생성된다는 점이다. 그들은 우리의 코드에 필요하지 않는 그래서,이 인스턴스화되지 않습니다.

    당신이 JDBC에 대한 연결 생성을 정의하는 경우, 당신은 우리가 단일 객체와 자바에서 할 것처럼 중복을 피하기 위해 객체의 내부를 만들 수 있습니다.

  14. ==============================

    14.클래스 및 객체 : 클래스는 개체 또는 개체의 모든 속성을 설명하는 정의입니다. 그리고 객체는 클래스의 인스턴스입니다.

    클래스 및 객체 : 클래스는 개체 또는 개체의 모든 속성을 설명하는 정의입니다. 그리고 객체는 클래스의 인스턴스입니다.

  15. from https://stackoverflow.com/questions/1755345/difference-between-object-and-class-in-scala by cc-by-sa and MIT license