확장 메서드
타입에 메서드를 추가합니다
확장 메서드은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.