English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
추출기는 전달된 객체에서 해당 객체를 구성하는 매개변수를 추출합니다.
Scala 표준 라이브러리는 몇 가지 предопределенные 추출기를 포함하고 있습니다. 그들을 간단히 알아보겠습니다.
Scala 추출기는 unapply 메서드를 가진 객체입니다. unapply 메서드는 apply 메서드의 반대 작업입니다: unapply는 객체를 받아들이고, 그 객체에서 값을 추출하며, 추출된 값은 일반적으로 해당 객체의 값을 구성하는 데 사용됩니다.
다음 예제는 이메일 주소 추출기 객체를 보여줍니다:
object Test { def main(args: Array[String]) { println("Apply 메서드: " + apply("Zara", "gmail.com")); println("Unapply 메서드: " + unapply("[email protected]")); println("Unapply 메서드: " + unapply("Zara Ali")); } // 주입 메서드(선택) def apply(user: String, domain: String) = { user +"@"+ domain } // 추출 메서드(필수) def unapply(str: String): Option[(String, String)] = { val parts = str.split("@") if (parts.length == 2{ Some(parts(0), parts(1)) } else { None } } }
위 코드를 실행하면, 출력 결과는 다음과 같습니다:
$ scalac Test.scala $ scala Test Apply 메서드: [email protected] Unapply 메서드: Some((Zara,gmail.com)) Unapply 메서드: None
위 객체는 두 메서드를 정의했습니다: apply 와 unapply 메서드. apply 메서드를 사용하면 new 연산자를 사용하지 않고 객체를 생성할 수 있습니다. 따라서 "[email protected]" 문자열을 구성하는 Test("Zara", "gmail.com") 문장을 사용할 수 있습니다。
unapply 메서드는 apply 메서드의 반대 작업입니다: unapply는 객체를 받아들이고, 그 객체에서 값을 추출하며, 추출된 값은 일반적으로 해당 객체의 값을 구성하는 데 사용됩니다. 예제에서는 다음과 같이 사용합니다: Unapply 메서드는 객체에서 사용자 이름과 이메일 주소 접미사를 추출합니다。
예제에서 unapply 메서드는 전달된 문자열이 이메일 주소가 아니면 None를 반환합니다. 다음은 코드 예시입니다:
unapply("[email protected]")은 Some("Zara", "gmail.com")과 같습니다 unapply("Zara Ali")은 None과 같습니다
클래스를 인스턴스화할 때, 0개 또는 여러 개의 매개변수를 추가할 수 있으며, 컴파일러는 인스턴스화할 때 apply 메서드를 호출합니다. 클래스와 객체에서 모두 apply 메서드를 정의할 수 있습니다.
이전에 언급했듯이, unapply은 우리가 지정한 값을 추출하는 데 사용되며, apply의 작업과 반대입니다. 추출기 객체에서 match 문을 사용할 때, unapply이 자동으로 실행됩니다. 예를 들어:
object Test { def main(args: Array[String]) { val x = Test(5) println(x) x match { case Test(num) => println(x + "은" + num + "의 두 배!" //unapply이 호출됨 case _ => println("계산할 수 없음") } } def apply(x: Int) = x*2 def unapply(z: Int): Option[Int] = if (z%2==0) Some(z/2) else None }
위 코드를 실행하면, 출력 결과는 다음과 같습니다:
$ scalac Test.scala $ scala Test 10 10 는 5 의 두 배!