DataCamp의 最近 시작한 Scala 과정을 보십시오: Scala Introduction입니다.
Scala는 大数据 분야에서 Apache Spark와 함께 사용되는 대량의 데이터 처리에서 자료과학자들에 의해 널리 사용되고 있습니다. 아래에 列挙되는 다양한 기본적인 특징을 가지고 있는 오브젝트 지향 및 함수형 프로그래밍 언어입니다:
- Scala는 정적 타입 언어로, 변수에 대한 데이터 타입이 사용되기 전에 정의되는 것을 知ります. 타입 체크는 컴파일 시간에 대해 行われ而不是 runtime에서 行われます.
- 또한 “강한 타입” 언어로 변수가 연산에 사용되기 전에 확인되는 것을 지칭합니다.
- 또한 타입 推論을 지원하며, 컴파일러가 표현식 또는 리터럴에서 타입을 추론하기 때문에 변수의 타입 선언은 선택적입니다.
이 튜토리얼에서는 다음과 같은 주제들을 다룰 것입니다:
변수
변수는 메모리의 이름이 지어진 공간이며, 컴파일러는 해당 변수의 데이터 유형에 따라 예약된 위치를 할당합니다. Scala에서 변수는 다음과 같은 문법으로 선언합니다:
val or val variable_name: variable_datatype = value;
위 문법에서, 변수는 ‘var’ 또는 ‘val’ 키워드를 사용하여 두 가지 방식 중 하나로 정의할 수 있습니다. ‘변수명’으로 새 변수를 정의하고, 그 뒤에 콜론을 붙입니다. 변수의 데이터 유형은 ‘변수_데이터타입’으로 유효한 데이터 타입이 될 수 있습니다. 그 다음 ‘값’으로 변수명에 대입합니다.
예를 들어:
val varValue: Byte = 8;
‘val’은 변수를 정의하는 키워드이며, ‘varValue’는 변수 이름입니다. ‘Byte’ 타입이며 값은 8입니다. ‘Byte’는 8비트의 부호있는 값으로, 2−7에서 27−1 사이입니다.
위의 ‘변수_데이터타입’은 Scala에서 존재하는 모든 데이터 타입일 수 있으며, 다음과 같습니다.
- Int: 32비트 부호있는 값(양수 또는 음수)로, 범위는 2−31에서 231−1입니다.
- Byte: 8비트 부호있는 값으로, 범위는 2−7에서 27−1입니다.
- Short: 16비트 부호있는 값으로, 범위는 2−15에서 215−1입니다.
- Float: 32비트나 64비트입니다.
결과적으로, 다음과 같은 자료형 Long, Char, Boolean, Char, String, Boolean, Null는 모두 자신의 rang에 대한 자세한 설명을 Scala 초보가 들어가는 가이드 자습서에서 제시합니다. 또한, ‘variable_datatype’는 대문자로 시작해야 합니다. 예를 들어 Int는 ‘I’를 포함하고 있으므로 이전에 언급한 모든 자료형은 Scala의 객체입니다.
Scala로 変数를 정의하는 규칙
Scala에서 変数를 정의하는 규칙과 conventio는 다음과 같습니다:
- 変数 이름은 소문자 캡챠 형태로 시작합니다. 예를 들어, 変수 이름 ‘nameOfgirl’에서 ‘n’가 소문자로 시작합니다. 그 다음 ‘O’와 ‘G’는 모두 单词의 첫 문자로 대문자로 바꾼 것입니다.
- 変数 이름은 Scala에서 정의한 예약어나 키워드를 포함하지 않아야 합니다.
- 変数 이름은 dollarn($) 또는 하이픈(_)를 포함할 수 있지만, ‘#’,’&’과 같은 다른 특수 문자를 사용할 수 없습니다. 또한, 하이픈을 사용하는 것을 推奨하지 않습니다.
- 변수 이름에 흰색(탭, 공백)이 들어가지 않아야 합니다.
- 변수 이름은 문자로 시작되어야 하며 숫자나 다른 문자로 시작할 수 없습니다.
Mutable 변수
Mutable 변수는 変수를 선언한 이후에도 값을 변경할 수 있는 것을 허용합니다.
Mutable 변수의 문법은 다음과 같습니다:
var variable_name : variable_datatype = value;
Mutable 변수의 문법은 다음과 같이 정의될 수 있습니다:
var variable_name = value;
Mutable 변수의 예시는 아래와 같습니다:
var nameOfThing: String = "Car";
위 예시는 var
키워드를 포함하며, 이는 Mutable 변수를 정의하는 데 사용됩니다. 변수의 이름은 ‘nameOfThing’입니다. 콜론이 뒤따르며 변수의 데이터 타입은 ‘String’입니다. 메모리에 저장된 값은 ‘Car’가 될 것입니다.
다른 문법을 사용한 Mutable 변수의 예는 아래와 같이 할 수 있습니다:
var nameOfThing = "Car";
위에서 한 것처럼 데이터 타입 없이 변수 정의가 가능합니다. 스칼라 컴파일러는 이를 자동으로 ‘String’ 데이터 타입으로 결정하며, 이는 타입 추론이라고 합니다.
아래와 같이 쉽게 변수의 값을 변경할 수 있습니다:
nameOfThing = "Bike"; print(nameOfThing)
변수의 값은 “Car”에서 “Bike”로 변경될 것입니다. 출력은 “Bike”가 될 것입니다. 왜냐하면 ‘var’ 키워드는 변수의 값을 변경할 수 있게 해주기 때문입니다 (출처: 스칼라의 변수).
Immutable 변수
Immutable 변수는 한 번 생성되면 값이 변경되지 않는 변수이며, ‘val’ 키워드를 사용하여 선언됩니다.
Immutable 변수의 문법은 아래와 같이 표시됩니다:
val variable_name : variable_data type = value;
Immutable 변수를 다음과 같이 정의할 수도 있습니다:
val variable_name = value;
Immutable 변수의 예시는 아래와 같습니다:
val numberOfThing: Int = 2;
위 예제에서는 Immutable 변수를 정의하기 위한 키워드로 val
을 사용하고, 변수 이름을 ‘numberOfThing’으로 지정했습니다. 변수의 데이터 타입은 ‘Int’로 지정되어 있으며, 메모리에 저장된 값은 2입니다.
다른 구문으로 Immutable 변수를 정의하는 예제는 아래와 같습니다:
val numberOfThing = 2;
위에서처럼 변수의 데이터 타입 없이 변수를 정의할 수 있으며, 스칼라 컴파일러가 자동으로 ‘Int’ 데이터 타입으로 판단합니다. 이 과정을 타입 추론이라 합니다 (출처: Scala의 변수).
아래와 같이 변수의 값을 변경할 수 없습니다:
numberOfThing = 7;
위 예제는 “error: not found: value numberOfThing”와 같은 오류를 발생시키며, 이는 값의 재할당이 불가능함을 보여줍니다:
다중 선언 및 할당
스칼라에서는 ‘var’ 키워드를 사용하여 변수 이름을 쉼표로 구분하고 “=” 기호와 함께 변수의 값을 지정하여 다중 선언이 가능합니다.
var (x, y, z) = (5, 4.5, "Sit")
위 예제에서는 변수 x, y, z가 각각 값 5, 4.5, “Sit”로 할당되는 것을 볼 수 있습니다.
스칼라에서는 ‘val’ 키워드를 사용하여 변수 이름을 쉼표로 구분하고 “=” 기호와 함께 변수의 값을 지정하여 한 줄로 다중 할당이 가능합니다.
val a, b, c = 1;
위 예제에서는 변수 a, b, c가 각각 값 1로 할당되는 것을 볼 수 있습니다.
변수의 범위
scop는 코드의 지정 블록 내에서 생명 주기를 가지는 변수의 가시성입니다. 변수는 로컬 스코프나 글로벌 스코프에 정의 될 수 있습니다. 예를 들어:
var globalVar = 10 def sub(){ var difference = 9-4; } print(difference)//에러 print(globalVar)//유효
위 코드에서, ‘difference’ 변수는 ‘sub’ 메소드 내에 선언된 로컬 스코프에 있으며, 뺄셈 연산은 유효한 결과를 줄 것입니다. 그러나 ‘sub’ 메소드 외부에서 값을 출력하면 에러가 발생합니다. 또한 ‘globalVar’라는 변수는 프로그램 어디에서든 접근할 수 있는 글로벌 스코프에 있으며, 어떤 연산을 수행해도 됩니다.
Scala에서 변수의 스코프 유형은 3가지가 있습니다 (출처: Scala- 변수):
- 로컬 변수
- 필드
- 메소드 매개 변수
로컬 변수
로컬 변수는 메소드 내에 선언되는 가변 또는 불변 변수로, 메소드 내에서만 접근할 수 있지만 외부에서는 접근할 수 없습니다.
로컬 변수에 대해 알아보기 위한 간단한 예제를 아래에서 볼 수 있습니다:
class Perimeter { def triangle() { var side1 = 10; var side2 = 20; var side3 = 30; var total = side1+side2+side3; print("Perimeter of the triangle is: " + total); } } object Test { def main(args:Array[String]) { val p1 = new Perimeter() p1.triangle() } }
defined class Perimeter defined object Test
위 코드는 결과를 제공합니다:
삼각形的 둘레는: 60
위 프로그램은 ‘Perimeter’라는 클래스와 ‘Test’라는 객체를 포함하며, side1, side2, side3이라는 세 가변 변수를 가진 ‘triangle’라는 메소드가 있습니다. 계산과 결과 출력은 메소드 내에서 수행되며, 정확한 출력을 제공할 것입니다.
필드
클래스 내에 정의 된 변수는 필드 변수로 불리며, 이러한 변수는 어떠한 형식의 불변 또는 변경 가능한 변수일 수 있습니다. 변수가 클래스 내에 선언되면 자동으로 public 修饰자가 되지만, 변수가 프로그램의 어느 곳에서 접근할 수 있는 것처럼 的任何方法에 정의되지 않아야 합니다. 그러나 独家 修饰자는 정의 된 클래스 내에서 접근할 수 있으나 클래스 外科手术 밖에서나 사용자 객체 내에서 접근할 수 없습니다.
class FieldExample { var value1 = 10; private var value2 = 30; def operation() { println("Value of value1:"+value1) } println("Value of value2: "+value2); } object Demo { def Main(args:Array[String]) { val obj = new FieldExample() obj.operation() print(obj.value1)//Valid print(obj.value2) } }
defined class FieldExample defined object Demo
위의 코드는 다음과 같은 결과를 제공합니다:
value2의 값: 30
value1의 값:10
10
위의 프로그램은 ‘FieldExample’이라는 클래스, ‘Demo’가 될 예정의 인스턴스, ‘operation’라는 메서드를 포함하고 있습니다. 公的 변수 value1는 点点 표현法을 사용하여 접근할 수 있으며, 값은 10입니다. 独家 변수 value2가 30입니다는 어느 것을 다시 보며 해당 변수에 대한 접근과 인쇄는 에러를 발생시킵니다.
메서드 매개 변수
메서드가 호출 될 때 값을 받아들일 수 있는 변수는 변경 가능한 變수로 정의되며 ‘val’ 키워드를 사용하여 정의되ます. 또한 변수는 그를 참조하는 것이 있으면 메서드 外科手术 밖에서도 접근할 수 있습니다.
Method Parameters에 대한 간단한 예를 봅시다:
class Triangle { def calculate(height: Int, width: Int) { var result = 0.5*(height+width); println("Area of triangle is: " + result); } } object Area { def main(args:Array[String]) { val a = new Triangle() a.calculate(4,5); } }
defined class Triangle defined object Area
Triangle Area: 4.5
위의 프로그램은 ‘Triangle’라는 클래스를 包含한다. 두 개의 메서드 매개 변수인 height와 width를 갖는 ‘calculate’ 메서드가 포함되어 있다. 정수 값 4와 5가 ‘calculate’를 호출하는 대상으로 객체 인스턴스 a를 사용할 때 전달된다.
결론
恭贺您,本教程已学习完毕!
在本教程中,您学习了Scala的变量,变量定义规则,以及带有多重声明和赋值以及变量作用域的不同类型变量。
如果您想了解更多关于Scala的知识,请参加DataCamp的Scala入门课程。
Source:
https://www.datacamp.com/tutorial/variables-in-scala