Kotlin Contract
๋ฐฐ๊ฒฝ
// ๋ฌธ์์ด์ด ์ ํจํ์ง (null๋ ์๋๊ณ ๋น์ด์์ง๋ ์์์ง) ๊ฒ์ฌํ๋ ํจ์
fun isValid(value: String?): Boolean {
return value != null && value.isNotEmpty()
}
fun printVerifiedLength(text: String?) {
// isValid ํจ์๋ก text๊ฐ ์ ํจํ์ง ๊ฒ์ฌ
if (isValid(text)) {
// ์ปดํ์ผ ์๋ฌ ๋ฐ์
// println(text.length)
}
}
- ์ปดํ์ผ๋ฌ๋ ํจ์ ๋ด๋ถ๊น์ง ์ดํดํ์ง ์๊ธฐ ๋๋ฌธ์,
isValid
๋ด๋ถ์์ value๊ฐ null-safeํ์ง ๋ชจ๋ฅธ๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ text.length๋ฅผ ํธ์ถํ๋ฉด, ์ปดํ์ผ๋ฌ๋ ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ฐํํ๊ฒ ๋๋ค.
- ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Kotlin Contract ํ์ํ๊ฒ ๋์๋ค.
How to use
funย isValid(value:ย String?):ย Booleanย {
contract {
returns(true) implies (value != null)
}
returnย value !=ย nullย && value.isNotEmpty()
}
- ๊ฒฐ๊ณผ๊ฐ์ true๋ก ๋ฐํํ๋ฉด, value๊ฐ null์ด ์๋๋ผ๋ ์ ๋ณด๋ฅผ Compiler์๊ฒ ์ ๋ฌํ๋ค.
์ฐ์์
funย runBlock(block: () ->ย Unit)ย {
// '์ด ๋ธ๋ก์ ์ฌ๊ธฐ์, ์ ํํ ํ ๋ฒ ์คํ๋๋ค'๊ณ ๊ณ์ฝ
contract {
callsInPlace(block,InvocationKind.EXACTLY_ONCE)
}
block()
}
- ํจ์ ํธ์ถ ๋ณด์ฆ๋ ๊ณ์ฝ์ ํ ์ ์๋ค.
Reference