DataCamp은 最近 스칼라(Scala) curse를 시작하였습니다. 스칼라 시작하기를 확인하십시오!
또한 다음과 같은 튜orial을 확인하십시오.
소개

일반적으로, 오브젝트-지향 프로그래밍(OOP)는 클래스와 오브젝트로 구성되며 Polymorphism, Inheritance 등의 실제 세계 엔티티를 구현하는 것이 목적입니다.
OOP은 클래스와 오브젝트를 갖추고 있어 향후 요구에 따라 이를 재사용할 수 있는 기능을 지원합니다. 이러한 魔力의 주요 이유는 지원하는 기능의 수입니다. 클래스와 오브젝트가 있으며 앞서 언급한 프로그램과 달리 클래스와 오브젝트를 欠하지 않습니다. 이러한 것은 새로운 메서드와 속성을 추가하여 확장 가능한 高质量의 소프트웨어를 만들어줍니다.
자동차 전시장이 있다고 가정해봅시다. 몇 달마다 새로운 자동차가 출시되고, 청중에게 그 이름과 기능을 알리기 위해 새로운 메서드와 속성을 처음부터 정의해야 합니다. 그러나 객체 지향 프로그램에 자동차 클래스가 있다면, 새로운 자동차에 대해 추가할 것은 그 자동차의 정보를 담은 객체뿐이며, 그 객체는 클래스 메서드와 속성을 호출할 것입니다.
클래스는 객체의 표현 또는 설계도로 생각할 수 있습니다. 클래스는 보통 자체 메서드(행동)와 속성을 가집니다.
속성은 각 객체를 다른 객체와 구분하는 개별 엔터티이며, 객체의 다양한 특성을 결정합니다. 반면, 메서드는 프로그래밍에서 함수가 일반적으로 작동하는 방식과 유사합니다. 메서드는 클래스의 인스턴스가 어떻게 작동하는지를 결정합니다. 바로 이러한 메서드(행동) 덕분에 객체는 특정 작업을 수행할 수 있는 능력을 가집니다.

위 그림은 객체 지향 프로그래밍의 흐름, 혹은 더 구체적으로 클래스가 어떻게 생겼는지에 대한 직관을 제공합니다. 위 그림에는 class car
가 있으며, 속성: 연료, 최대 속도
를 가지고 있으며, 모델
, 제조사
등과 같은 더 많은 속성을 가질 수 있습니다. 또한 refuel()
, getFuel()
, setSpeed()
와 같은 다양한 메서드
집합을 가지고 있으며, 추가 메서드로 기어 변경
, 엔진 시작
, 엔진 정지
등이 있을 수 있습니다.
따라서 특정 자동차에 대해 이야기할 때는 클래스의 인스턴스화된 객체를 가지게 됩니다.
스칼라에서의 객체 지향 프로그래밍에 대해 이야기해봅시다.
스칼라의 클래스와 객체
c++와 자바와 마찬가지로, 스칼라의 객체 지향 프로그래밍은 거의 같은 관례를 따릅니다. 클래스(classes
)와 객체(objects
)를 정의하는 개념과 클래스 생성자
내에서의 개념이 있으며, 이것이 스칼라의 객체 지향 프로그래밍의 모든 것입니다.
클래스 선언
class Class_name{ // 메서드와 어트리뷰트 }
스칼라에서 클래스는 class
키워드로 정의되며 그 뒤에 클래스의 이름이 옵니다. 일반적으로 클래스 이름은 대문자로 시작합니다. Scala 클래스 선언에서 선택적으로 사용할 수 있는 몇몇 키워드가 있습니다: class-name
은 대문자로 시작해야 합니다: superclass
는 extend 키워드로 시작하는 상위 클래스 이름입니다: traits
는 클래스가 구현하는 쉼표로 구분된 목록으로 extend 키워드로 시작합니다.
스칼라에서 클래스는 하나의 상위 클래스만 상속할 수 있으며, 이는 스칼라가 다중 상속을 지원하지 않는다는 의미입니다. 그러나 트레이트
를 사용하여 이를 달성할 수 있습니다.
마지막으로, 스칼라의 클래스 본문은 중괄호 {}
로 둘러싸입니다.
// 클래스의 이름은 Car입니다 class Car { // 클래스 변수 var make: String = "BMW" var model: String = "X7" var fuel: Int = 40 // 클래스 메서드 def Display() { println("Make of the Car : " + make); println("Model of the Car : " + model); println("Fuel capacity of the Car : " + fuel); } } object Main { // 메인 메서드 def main(args: Array[String]) { // 클래스 객체 var obj = new Car(); obj.Display(); } }
上面的 코드를 class.scala
이라는 이름으로 저장하고 terminal에서 scala class.scala
명령어로 실행하면、아래와 같은 출력이 보입니다.

그렇다면, 위의 코드는 오브젝트-오riented program의 수행 가능한 권한을 完全하게 사용하지 않습니다. 위의 코드는 여러 번 실행하더라도 같은 결과를 돌려줍니다. 클래스 안에 static variables를 정의했으며、이러한 변수의 값은 새로운 객체를 무제한 만큼 생성하더라도 고정되어 있습니다. 결론적으로, Mercedes Benz나 Ferrari 자동차에 대한 자세한 정보를 얻을 수 있다고 기대하시면 안됩니다.
Scala에서의 생성자
생성자는 대抵하여 객체 상태를 초기화하는 것을 主要적으로 사용합니다. 이러한 객체 초기화는 객체 생성 시에 발생하며, 한번만 호출됩니다.
Scala에서는 두 种의 생성자가 있습니다: Primary
와 Auxiliary
입니다. 이 튜토리얼에서는 主打的 생성자(Source: O’Reilly)에 대해 배울 것입니다.
class Class_name(Parameter_list){ // methods, attributes }
主打的 생성자는 클래스와 같은 몸으로 구성되며, 클래스 정의와 함께 인젝tive로 생성됩니다. 이 생성자는 클래스 정의에서 시작되어 클래스의 완전한 몸에 자리를 占了합니다. 또한, Scala 程제에서 한 번에 한 개의 생성자만 있으면 主打的 생성자라고 합니다. 主打的 생성자는 零, 한 개, 또는 많은 매개 변수를 정의할 수 있습니다.
이제, 이전 예제에 기본 생성자 기능을 추가하고 영향을 관찰해봅시다.
또한, 이곳에서 클래스의 새로운 특징을 배울 수 있습니다. 즉, 클래스는 여러 개의 오브젝트나 인스턴스를 가질 수 있지만, 이들은 서로 독립적입니다.
// 클래스 이름은 Car입니다. class Car(make: String, model: String, fuel: Int) { // 클래스 메서드 def Display() { println("Make of the Car : " + make); println("Model of the Car : " + model); println("Fuel capacity of the Car : " + fuel); } } object Main { // 메인 메서드 def main(args: Array[String]) { // 다중 클래스 오브젝트 var obj1 = new Car("BMW", "X7", 40); var obj2 = new Car("Mercedes Benz", "S350D", 50); obj1.Display(); obj2.Display(); } }
quickly see the output:

Well, isn’t this great? With the help of a constructor, you were able to generate more effective results.
Scala에서 오브젝트 선언
Scala에서 오브젝트를 선언하는 것은 클래스를 생성하거나 클래스를 호출하는 것과 같습니다. 클래스와 마찬가지로, 오브젝트도 객체 지향 프로그래밍의 기본 단위입니다.
오브젝트는 세 가지 특징을 가질 수 있습니다. (源自: GeeksforGeeks):
State:
오브젝트의 속성은 그 자신을 나타냅니다. 또한 오브젝트의 속성을 반영합니다.Behavior:
오브젝트의 메서드는 그 자신을 나타냅니다. 또한 다른 오브젝트와 interact하는 방법을 반영합니다.Identity:
오브젝트에 유니크한 이름을 주며 한 오브젝트가 다른 오브젝트와 이gether work하게 합니다.
Canine를 개념으로 하여 아래 diagram을 보시고 그 이적, 상태, 행동에 관해 생각해 보십시오.

모든 인스턴스 또는 개체는 클래스의 속성과 메서드를 共有한다. 단일 클래스는 여러 개체를 가질 수 있으며, 여러분은 여기에서 배웠다. 그러나 각 개체의 상태 또는 값은 유니크하다.
결국, 다음과 같이 주요 생성자, 클래스 변수, 속성, 메서드를 모두 하나의 코드로 합쳐 봅시다.
아래는 클azz Motorcycle
를 구성하는 요소들의 그림metric representation입니다.

아래 코드는 자신을 설명하는 것처럼 보입니다; 高层적으로는 motorcycle engine가 on
또는 off
状態인지 여부를 확인합니다. 초기에는 engine가 off状態로 정의되며 그 상태와 switches를 통해 ona를 통해 자신의 상태를 통보하고 켜짐을 시도합니다.
class Motorcycle(make:String,color:String) { var engineState: Boolean = false; def startEngine() { if (engineState == true){ println("The engine is already on."); } else { engineState = true println("The engine is now on."); } } def showAtts() { println("This motorcycle is a "+ color + " " + make); if (engineState == true){ println("The engine is on."); } else{ println("The engine is off."); } } } object Main { def main (args: Array[String]) { var m = new Motorcycle("BMW K 1600 GTL","White"); println("Calling showAtts..."); m.showAtts(); println("------"); println("Starting engine..."); m.startEngine(); println("------"); println("Calling showAtts..."); m.showAtts(); println("------"); println("Starting engine..."); m.startEngine(); } }

하하!
이 튜토리얼을 끝냈어!
이제 scala로 class와 method를 선언하고, object를 인스턴스화하고, 그들의 attribute를 설정하고, instance method를 호출하는 것을 알고 있습니다. 이러한 이론은 여러분에게 scala뿐만 아니라 다른 프로그래밍 언어에서도 유용하게 사용될 것입니다.
오브젝트-오riented programming 이론은 ��iciappa 및 동시에 매우 강력합니다. 您的 코드에 새로운 차원을 더해줍니다. 재사용 가능하게 만들어줍니다. 您的 프로그램이 larger가 되면 您的 코드는 복잡성이 증가합니다. object-oriented programming 이론은 인heritance, polymorphism, instance methods 과 같은 많은 것을 가지고 있습니다. 또 another powerful feature는 Singleton입니다. 설계 принципы는 您的 코드를 더 구조화 하고 읽기 좋게 유지합니다. design patterns에 대해서 자세히 보고자 하면 this book을 읽어보십시오.
Please feel free to ask any questions related to this tutorial in the comments section below.
Finally, don’t forget to take the new Scala course on DataCamp, Introduction to Scala.
Source:
https://www.datacamp.com/tutorial/scala-classes-objects