초기 스칼라 연구에서는 일반적으로 다음 코드와 같이 변수를 추가 할 때 Java 스타일 멤버 정의 방법을 사용했습니다.
class Student{
var name : String = _
}
Scala는 기본 생성자와 Scala 스타일의 SetXXX (public java.lang.String name ()) 및 GetXXX (public name_ (java.lang.String))을 생성합니다. 실제로 Scala는 멤버 변수와 생성자를 정의하는보다 단순화 된 방법을 제공합니다. 즉, 멤버 변수와 생성자를 서로 엮는 것입니다. 예를 들면 다음과 같습니다.
object demo03 {
def main(args: Array[String]): Unit = {
}
}
class Person(var name : String,var age : Int){
}
이 코드를 디 컴파일하면 다음을 얻을 수 있습니다.
E:\WorkSpace\scalaFiles\target\classes\com\mo\chapter06\myconstructor>javap -private Person.class
Compiled from "demo03.scala"
public class com.mo.chapter06.myconstructor.Person {
private java.lang.String name;
private int age;
public java.lang.String name();
public void name_$eq(java.lang.String);
public int age();
public void age_$eq(int);
public com.mo.chapter06.myconstructor.Person(java.lang.String, int);
Person (var name : String, var age : Int)
클래스 는 다음 세 가지 작업을 수행하는 것을 볼 수 있습니다. 1. 클래스를 정의하고 생성자 Person (var name : String, var age : Int)을 구현합니다.
2. 이름 및 연령 멤버 변수가 정의됩니다.
3. 스칼라 스타일의 Setxxx () 및 Getxxx () 메서드가 각각 생성됩니다.
Java 언어를 사용하여 Person (var name : String, var age : Int) 클래스와 동일한 기능을 수행하는 경우 다음 코드가 필요합니다.
public class demo04 {
String name ;
int age ;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public demo04(String name,int age){
this.name = name;
this.age = age;
}
}
scala는 Java에서 여러 줄의 코드 기능을 수행하기 위해 한 줄의 코드 만 사용한다는 것을 알 수 있습니다.
Java 언어에서 객체를 생성 할 때 특정 작업을 수행하려면 생성자에 해당 코드를 추가해야하지만 스칼라에서는 정의 된 클래스에 코드를 직접 삽입하기 만하면됩니다. 예를 들면 다음과 같습니다.
object demo03 {
def main(args: Array[String]): Unit = {
val person = new Person("tom",18)
//this is a part of constructor~~~
}
}
class Person(val name :String , val age : Int){
println("this is a part of constructor~~~")
//println语句作为主构造器的一部分,在创建对象时被执行。
override def toString: String = name + " " + age
}
위의 코드에서 println 문은 Person 클래스 본문에 배치되며, 해당 문은 주 생성자의 일부로 사용되어 객체 생성시 실행되며 다음 자바 코드와 동일합니다.
public class demo04 {
public static void main(String[] args) {
new demo04("tom" , 18);
}
String name ;
int age ;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public demo04(String name,int age){
System.out.println("this is a part of constructor~~~");
this.name = name;
this.age = age;
}
}
참고 :
**
- Scala 생성자의 기능은 새 객체의 초기화를 완료하는 것이며 생성자에는 반환 값이 없습니다.
- 주 생성자의 선언은 클래스 이름 바로 뒤에 배치됩니다.
- 주 생성자는 클래스 정의의 모든 문을 실행합니다 (클래스에 작성된 문을 주 생성자에 넣습니다). 여기에서 Scala의 함수 프로그래밍과 객체 지향 프로그래밍의 통합을 경험할 수 있습니다. 즉, 생성자는 메소드 (함수), 매개 변수 전달 및 메소드 사용은 이전 함수 부분과 다르지 않습니다. **