companion object를 사용한 팩토리 메서드
companion object와 invoke 연산자를 사용해 팩토리 패턴을 구현해 보세요.
companion object를 사용한 팩토리 메서드은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
팩토리 메서드 패턴
비공개 생성자 + 팩토리
class Token private constructor(val value: String) {
companion object {
fun generate() = Token(java.util.UUID.randomUUID().toString())
fun fromString(s: String) = Token(s.trim())
}
}
val t = Token.generate()이름 있는 팩토리 메서드
class Duration private constructor(val ms: Long) {
companion object {
fun ofMillis(ms: Long) = Duration(ms)
fun ofSeconds(s: Long) = Duration(s * 1000)
fun ofMinutes(m: Long) = Duration(m * 60_000)
}
}
val d = Duration.ofMinutes(5)팩토리에서 null 반환하기
class Percentage private constructor(val value: Int) {
companion object {
fun of(value: Int): Percentage? {
return if (value in 0..100) Percentage(value) else null
}
}
}
val p = Percentage.of(75) ?: error("Invalid")캐시된 인스턴스
class Direction private constructor(val name: String) {
companion object {
private val cache = mutableMapOf<String, Direction>()
fun of(name: String) = cache.getOrPut(name.uppercase()) {
Direction(name.uppercase())
}
}
}invoke 연산자를 사용하는 생성자 형태의 팩토리
class Email private constructor(val address: String) {
companion object {
operator fun invoke(raw: String): Email {
require("@" in raw) { "Invalid email" }
return Email(raw.lowercase())
}
}
}
val e = Email("Test@Example.com") // looks like a constructor봉인 클래스와 추상 팩토리
sealed class Shape {
data class Circle(val r: Double) : Shape()
data class Rect(val w: Double, val h: Double) : Shape()
companion object {
fun circle(r: Double) = Circle(r)
fun rect(w: Double, h: Double) = Rect(w, h)
}
}의존성을 고려하는 팩토리
class Repository(private val db: Database) {
companion object {
fun create(db: Database = Database.instance) = Repository(db)
}
fun findAll() = db.query("SELECT * FROM items")
}테스트에서의 팩토리
class Order private constructor(
val id: Long, val items: List<String>, val paid: Boolean
) {
companion object {
fun unpaid(id: Long, items: List<String>) = Order(id, items, false)
fun paid(id: Long, items: List<String>) = Order(id, items, true)
}
}JSON/Config에서
class AppConfig private constructor(
val baseUrl: String, val timeout: Int
) {
companion object {
fun fromEnv() = AppConfig(
baseUrl = System.getenv("BASE_URL") ?: "http://localhost",
timeout = System.getenv("TIMEOUT")?.toInt() ?: 30
)
}
}비공개 생성자를 사용하지 말아야 할 때(NOT)
빠른 확인
요약
AI 튜터와 함께 Kotlin을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 51
- 레슨
- 203
자주 묻는 질문
“companion object를 사용한 팩토리 메서드” 강의는 무료인가요?
네 — “companion object를 사용한 팩토리 메서드” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“companion object를 사용한 팩토리 메서드”에서 뭘 배우나요?
companion object와 invoke 연산자를 사용해 팩토리 패턴을 구현해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“companion object를 사용한 팩토리 메서드” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- object 선언: Kotlin 싱글턴
- companion object: Kotlin의 정적 멤버와 유사한 요소
- 익명 객체와 객체 식
- companion object를 사용한 팩토리 메서드