0Pricing
Scala for Backend Engineering & Functional Programming · 강의

확장 메서드

타입에 메서드를 추가합니다

확장 메서드은(는) CoddyKit의 무료 Scala for Backend Engineering & Functional Programming 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Scala for Backend Engineering & Functional Programming 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.

기존 타입에 메서드 추가하기

확장 메서드를 사용하면 Int나 String처럼 직접 소유하지 않은 타입에 소스 코드를 수정하지 않고 새 메서드를 추가할 수 있습니다. Scala 3에서는 이를 위한 깔끔한 문법을 제공합니다.

object Main:
  extension (x: Int)
    def squared: Int = x * x
  def main(args: Array[String]): Unit =
    println(5.squared)

확장 문법

extension (param: Type)을 작성한 뒤 하나 이상의 메서드 정의를 이어서 작성합니다. 각 메서드 안에서 매개변수는 수신 객체의 값을 가리킵니다.

object Main:
  extension (s: String)
    def shout: String = s.toUpperCase + "!"
  def main(args: Array[String]): Unit =
    println("hello".shout)

하나의 블록에 여러 메서드 정의하기

하나의 extension 절에서 동일한 수신 타입에 대해 동작하는 여러 메서드를 정의할 수 있습니다.

object Main:
  extension (x: Int)
    def squared: Int = x * x
    def cubed: Int = x * x * x
    def isEven: Boolean = x % 2 == 0
  def main(args: Array[String]): Unit =
    println(4.squared)
    println(3.cubed)
    println(6.isEven)

매개변수를 사용하는 확장 메서드

확장 메서드는 수신 객체 외에도 자체 매개변수를 받을 수 있습니다.

object Main:
  extension (x: Int)
    def times(s: String): String = s * x
  def main(args: Array[String]): Unit =
    println(3.times("ab"))

제네릭 확장 메서드

확장은 제네릭으로 작성할 수 있으므로 List[A]처럼 여러 타입으로 이루어진 전체 타입군에 메서드를 추가할 수 있습니다.

object Main:
  extension [A](xs: List[A])
    def second: A = xs(1)
  def main(args: Array[String]): Unit =
    println(List(10, 20, 30).second)
    println(List("a", "b").second)

암시적 변환보다 확장이 나은 이유

확장 메서드는 예전의 ‘라이브러리 확장’이라는 목표를 더 안전하게 달성합니다. 이름이 지정된 메서드만 추가하므로 다른 곳에서 타입이 조용히 변환될 위험이 없습니다.

object Main:
  extension (d: Double)
    def percentOf(total: Double): Double = d / total * 100
  def main(args: Array[String]): Unit =
    println(25.0.percentOf(200.0))

확장과 타입 클래스

확장 메서드는 타입 클래스와 함께 사용하면 특히 효과적입니다. given 인스턴스로 동작을 정의하고 using을 사용해 메서드로 노출할 수 있습니다.

trait Show[A]:
  def show(a: A): String

object Main:
  given Show[Int] with
    def show(a: Int): String = s"<$a>"

  extension [A](a: A)
    def display(using s: Show[A]): String = s.show(a)

  def main(args: Array[String]): Unit =
    println(42.display)

연산자 정의하기

연산자도 결국 메서드이므로, 확장을 사용해 기존 타입에 기호 연산자를 추가할 수도 있습니다.

object Main:
  extension (x: Int)
    def **(exp: Int): Int = math.pow(x, exp).toInt
  def main(args: Array[String]): Unit =
    println(2 ** 10)

범위와 가져오기

확장 메서드는 해당 메서드가 범위 안에 있을 때만 사용할 수 있습니다. 객체 안에 정의한 뒤 가져와서 사용하면 적용 범위를 제어할 수 있습니다.

object StringOps:
  extension (s: String)
    def reversedWords: String = s.split(" ").reverse.mkString(" ")

object Main:
  import StringOps._
  def main(args: Array[String]): Unit =
    println("hello there world".reversedWords)

확장 메서드 연결하기

확장 메서드는 일반 값을 반환하므로 기본 제공 메서드와 연결해 자연스러운 처리 흐름을 만들 수 있습니다.

object Main:
  extension (s: String)
    def emphasize: String = s"*$s*"
  def main(args: Array[String]): Unit =
    println("scala".toUpperCase.emphasize)

실용적인 도우미

확장 메서드는 작은 도메인 도우미를 만들기에 적합하며, 호출하는 코드를 자연스럽게 읽히도록 해 줍니다.

object Main:
  extension (n: Int)
    def isPrime: Boolean =
      n > 1 && (2 until n).forall(d => n % d != 0)
  def main(args: Array[String]): Unit =
    println((2 to 12).filter(_.isPrime).toList)

빠른 확인

메서드를 추가할 때 Scala 3의 확장 메서드가 암시적 변환보다 갖는 가장 큰 장점은 무엇인가요?

복습

확장 메서드를 학습하셨습니다.

  • extension (x: Type) def ...을 사용하면 기존 타입에 메서드를 추가할 수 있습니다.
  • 하나의 블록에 연산자를 포함한 여러 메서드를 정의할 수 있습니다.
  • 제네릭으로 작성하거나 매개변수를 받을 수 있습니다.
  • using을 통해 타입 클래스와 자연스럽게 함께 사용할 수 있습니다.
  • 암시적 변환보다 안전하며, 사용하려면 범위 안으로 가져와야 합니다.

자주 묻는 질문

“확장 메서드” 강의는 무료인가요?

네 — “확장 메서드” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Scala for Backend Engineering & Functional Programming 강의 전체를 잠금 해제할 수 있습니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.

“확장 메서드”에서 뭘 배우나요?

타입에 메서드를 추가합니다 브라우저에서 직접 실행하는 실습 코드로 Scala for Backend Engineering & Functional Programming을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Scala for Backend Engineering & Functional Programming을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Scala for Backend Engineering & Functional Programming은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“확장 메서드” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Scala for Backend Engineering & Functional Programming 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Scala for Backend Engineering & Functional Programming 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 암시적 매개변수
  2. Scala 3 given/using
  3. 암시적 변환
  4. 확장 메서드
← Scala for Backend Engineering & Functional Programming(으)로 돌아가기