#2. ์ฝํ๋ฆฐ ๊ธฐ์ด๋ฌธ๋ฒ
by JiwonDev๐ ๋ฉ์ธํจ์(Main) - HelloWorld
Class์ ๊ฐ์ ํ์์์ด, ๋ฐ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
- ๋ฐํ๊ฐ์ด๋ ํ๋ผ๋ฉํ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด, ์๋์ ๊ฐ์ด ์๋ตํ ์ ์๋ค.
- ๋ฌผ๋ก ์๋ต ๊ฐ๋ฅํ๊ฑฐ์ง, ํ์ํ๋ฉด ์ฌ์ฉํ๋ฉด ๋๋ค.
๐ค ๋ฌธ์์ด์ ์ฌ์ฉํ ${..} ์ด๊ฒ ๋ญ์ฃ ?
- ๋ฌธ์์ด์ ๋ง๋ค ๋, String template๋ฅผ ์ฌ์ฉํ๋ฉด ํธํ๊ฒ ์ธ ์ ์๋ค.
- ์ฐธ๊ณ ๋ก ${null}์ ์๋์ ๊ฐ์ด ๋ฌธ์์ด์ด ์์ฑ๋๋ค.
- """ ์ ์ฌ์ฉํ๋ฉด, ์ค๋ฐ๊ฟ๊น์ง ํฌํจํ ์คํธ๋ง์ ์์ฑํ ์ ์๋ค.
- ๋ฌธ์์ด์ ์ฌ๋ฌ ์ค ์์ฑํ ๋, trimMargin()๊ณผ trimIndent()์ ์ด์ฉํ๋ฉด ์ฝ๋๋ฅผ ์กฐ๊ธ ๋ ๊น๋ํ๊ฒ ๋ง๋ค ์ ์๋ค.
// ๋ฌธ์์ด ์๋ผ์ธ์ | ๋ฑ์ ์ฌ์ฉํด์, ๊ฐ๋
์ฑ์ ๋์ผ ์ ์๋ค.
fun foo() {
val heroes = """
|D.Va
|Lucio
|Mercy
|Soldier: 76
""".trimMargin() // .trimMargin(marginPrefix = "|") ์ ๊ฐ์ ๋์
}
// ๋๋ ๊ทธ๋ฅ ๋ค์ฌ์ฐ๊ธฐ๋ก ๊น๋ํ๊ฒ ์ฐ๊ณ , trimIndent()๋ก ๋ชจ๋ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ ๊ฑฐํด๋ ๋๋ค.
val str1 = """
Hello World
var a = 10
println(a)
""".trimIndent()
๐ ๋ณ์(Variables) - var, val
์ฝํ๋ฆฐ์์๋ ๋ณ์๋ฅผ ์ ์ธํ ๋ var, val์ ์ฌ์ฉํ๋ค.
- val (Value): ์ฝ๊ธฐ์ ์ฉ immutable ๋ณ์. ์๋ฐ์ final๊ณผ ๋์ผํ๋ค.
- var (Variables): ์ผ๋ฐ์ ์ธ mutable ๋ณ์.
๐ค ํ์ ์ ์ด๋จ์ฃ ? JS, Python์ฒ๋ผ ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋์?
์๋๋ค. ์ฝํ๋ฆฐ์ ์๋ฐ์ ๋์ผํ๊ฒ ์ ์ ํ์ ์ ์ฌ์ฉํ๋ ์ธ์ด์ด๋ค. ์ปดํ์ผ ์์ ์ ํ์ ์ด ์ถ๋ก ๋๋ค.
์ค์ ๋ก ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. Int ๋ก ๊ฒฐ์ ๋ ๋ณ์์ String ์ ๋์ ํ๊ณ ์์ด์ ๊ทธ๋ ๋ค.
var string = 1 // Int๋ก ํ์
์ด ๊ฒฐ์ ๋จ
string = "abc" // Compiler error: Typemismatch inferred type is String but Int was expected
๐ค ํ์ ์ ๋ค ์๋ตํ๊ณ ์จ๋ ๋๊ฒ ๋ค์?
์๋๋ค. ๊ฐ๋ฅํ๋ฉด ํ์ ์ ๋ช ์ํด์ฃผ๋๊ฒ ์ข๋ค. ์๋์ ๊ฐ์ ์ค์๋ฅผ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- val ๋ ์๋ฐ์ final๊ณผ ๊ฐ๋ค๊ณ ํ๋ค. ๋ ํผ๋ฐ์ค ํ์ , ์ฆ ๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ๊น์ง ์์๋ก ๋ง๋ค์ด์ฃผ์ง๋ ์๋๋ค.
- ํ์ง๋ง ํ์
์ถ๋ก ์ ์ฌ์ฉํ๊ฒ๋๋ฉด, val๋ก ์ ์ธํ ๊ฐ์ [๋ถ๋ณ ํ์
]์ด ์บ์คํ
๋๋ค. ์ฆ ๊ฐ์ ์์ ํ ์ ์๋ค.
์ด๋ ๋ถ๋ณ ํ์ ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด์ง, val๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ์ด ์๋๋ค. final My myClass = new (..๋ด๋ถ๋ ๋ณ์..)
๐ ํจ์, ๋ฉ์๋ (Functions)
์ฝํ๋ฆฐ์ ํจ์๋ ์๋์ ๊ฐ์ด ์ ์ํ ์ ์๋ค. ์ธ๋ฏธ์ฝ๋ก (;)์ ์๋ต๊ฐ๋ฅํ๋ค.
- ๋ฐํ๊ฐ์ด ์๋ค๋ฉด ์๋ตํ ์ ์๊ณ , ์๋์ ๊ฐ์ด ๋๋ค์์ผ๋ก ์ฌ์ฉํ ์๋ ์๋ค.
์ฐธ๊ณ ๋ก ๋ฐํ๊ฐ์ ์๋ตํ๋ฉด ์ฝํ๋ฆฐ ์ปดํ์ผ๋ฌ๋ fun method(): Unit๋ฅผ ์์ฑํ๋ค. Unit์ ์๋ฐ์ void ์ ๊ฐ์ ์๋ฏธ.
- Python์ ์ฌ์ฉํ๋ค๋ฉด ์ต์ํ๊ฒ ์ง๋ง, ๊ธฐ๋ณธ ํ๋ผ๋ฉํ ๊ฐ๊ณผ Named argument๋ฅผ ์ง์ํ๋ค.
๋ด๋ถ์ ์ผ๋ก Java์ ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ค. ๊ทธ๋ฅ ์ฌ์ฉํ๊ธฐ ํธํ๊ฒ ๋ง๋ค์ด์ค๊ฑฐ.
- ์๋ฐ์์ ์์ฑ์๊ฐ ๋๋ฌด ๋ง์ด ๋ง๋ค์ด์ง๋๊ฒ ๊ฑฐ์ฌ๋ฆฐ๋ค๋ฉด, @JvmOverloads๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ๋ก ์ค์ผ ์ ์๋ค.
๋ค๋ง ๊ตณ์ด ์ด๋ ๊ฒ ์ฌ์ฉํ๋๊ฑธ ๊ถ์ฅํ์ง๋ ์๋๋ค. ์ฝํ๋ฆฐ์์ ์ฌ์ฉํ๊ธฐ ๋ถํธํ๊ธฐ๋ ํ๊ณ
- ์ฝํ๋ฆฐ์ ํจ์๋ฅผ ์ด๋์์๋ ์ฌ์ฉํ ์ ์๋ค. ๊ผญ ํด๋์ค ์์ ์์ฑํ ํ์๊ฐ ์๋ค.
๐ค ์ฝํ๋ฆฐ๋ ๊ฒฐ๊ตญ JVM์ ์ฌ์ฉํ๋๋ฐ, ์ด๋ป๊ฒ ํด๋์ค ์์ด ๋ฉ์๋๋ฅผ ์ธ ์๊ฐ ์์ฃ ?
- ๋ด๋ถ์ ์ผ๋ก๋ ํด๋์ค๊ฐ ์์ฑ๋๋ค. ์ด๋ static final ํจ์๋ก ์ ์ธ๋๋ฉฐ, ์๋ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
- ๋ง์ฝ ์ปดํ์ผ๋๋ ๋ฉ์๋๋ช
์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด, @JvmName("~")์ ์ด์ฉํด์ ์๊ทธ๋์ฒ๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
์๋ฐ์์ ์ฝํ๋ฆฐ์ผ๋ก ๋ง๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋, ์ ์ฉํ๊ฒ ์ธ ์ ์๋ค.
@JvmName("fooListString")
fun foo(a : List<String>) {
println("foo(a : List<String>)")
}
@JvmName("fooListInt")
fun foo(a : List<Int>) {
println("foo(a : List<Int>)")
}
์ด ์ฝํ๋ฆฐ ์ฝ๋๋ ์๋์ ์๋ฐ ์ฝ๋์ ๊ฐ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
public final class MyKotlin{ // MyKotlin.kt
public static final void fooListString(@NotNull List a) {
String var1 = "foo(a : List<String>)";
System.out.println(var1);
}
public static final void fooListInt(@NotNull List a) {
String var1 = "foo(a : List<Int>)";
System.out.println(var1);
}
}
- ๋ฌผ๋ก ๋ฉ์๋๋ฟ๋ง ์๋๋ผ, ์์ ํด๋์ค๋ช (ํ์ผ๋ช )์ ๋ค๋ฅด๊ฒ ์ง์ ํ ์๋ ์๋ค. @file:JvmName("~")์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๐ ์กฐ๊ฑด๋ฌธ(Conditionals) - if & when
- ์ฝํ๋ฆฐ์์๋ ์ผํญ์ฐ์ฐ์(? :)๊ฐ ์กด์ฌํ์ง ์๋๋ค. ์๋ํ๋ฉด if-else ๋ฌธ๋ฒ๊ณผ ๊ธฐ๋ฅ์ด ๋๊ฐ์์ ํ์์๊ธฐ ๋๋ฌธ.
- ์ฝํ๋ฆฐ์์๋ ์๋ฐ์ switch ๋์ , when์ด๋ผ๋ ๋ฌธ๋ฒ์ ์ ๊ณตํด์ค๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ JDK17์ ์๋ก์ด switch๋ฌธ๊ณผ ๊ฑฐ์ ๋น์ทํ๋ค.
- Break๋ฌธ์ ํ์์๊ณ , ๊ธฐ๋ณธ๊ฐ์ else๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ์ฌ๋ฌ ์กฐ๊ฑด์ ํ ์ผ์ด์ค์ ๋ฃ์ ์ ์๊ณ , ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ณต์กํ ์กฐ๊ฑด๋ ๋ง๋ค ์ ์๋ค.
- is (Type)์ ์ฌ์ฉํ๋ฉด, ๊ฐ์ฒด์ ํ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์บ์คํ ํด์ ์ฌ์ฉํ ์๋ ์๋ค.
- when(~) ์์๋ ํจ์๋ฅผ ๋ฐ๋ก ๋ฃ์ด๋ ๋๋ค. ๋ฐํ๊ฐ์ด ์ฌ์ฉ๋๋ค.
- when์ ๊ผญ switch์ฒ๋ผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค. ์๋์ ๊ฐ์ด ๊ทธ๋ฅ case์ ์กฐ๊ฑด์ ๋ฐ๋ก ๋ฃ์ด๋ ๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ด์ฉํด์ ๋ชจ๋ if๋ฌธ์ when์ผ๋ก ๋์ฒดํ ์ ์์ง๋ง, ๊ตณ์ด ๊ทธ๋ ๊ฒ ๋ณํ ๊ฐ์ด ์ฌ์ฉํ์ง๋ ๋ง์.
๐ค "cold" to BLUE..? ์ด๊ฒ ๋ฌด์จ ๋ฌธ๋ฒ์ด์ฃ ?
์ฐธ๊ณ ๋ก ์ฝํ๋ฆฐ์๋ ๊ฐ์ ๋ฌถ์ ์ ์๋ ํํ์ธ Pair()์ Triple()์ด ์ ๊ณต๋๋ค.
val (hello, number) = Pair("Hello", 1234)
val (hello, world, number) = Triple("Hello", "World", 1234)
var p: Pair<Int, String> = Pair(5, "Test")
p.first // 5
p.second // "Test"
// to ์ค์ํจ์๋ Pair<String, Int>๋ฅผ ๋ฐํํ๋ค.
val pair : Pair<String, Int> = "Hello" to 1234
val (hello, world) = "Hello" to "World"
์๋ง ์์ํ๊ฒ ์ง๋ง, ์ด๋ Immutableํ ํํ๋ก, ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ๋ณต์ฌํด์ ์ฌ์ฉํด์ผํ๋ค.
new = p.copy(first = 3)
val list = pair.toList() // list๋ก ๋ณ๊ฒฝํ ์๋ ์๋ค.
๋์ค์ ๋์ค๊ฒ ์ง๋ง to ๊ฐ์ ์ค์ํจ์(Infix)๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ๋ง๋ค ์๋ ์๋ค.
infix fun Int.multiply(x: Int): Int {
// infix๋ ํ์ฅํจ์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
return this * x
}
fun main(){
val ํ์ฅํจ์ = 3.multiply(10)
val ์ค์ํจ์ = 3 multiply 10
println("๊ฒฐ๊ณผ: $ํ์ฅํจ์, $์ค์ํจ์")
}
๐ ๋ฐ๋ณต๋ฌธ(Loop) - for in
์ฐธ๊ณ ๋ก while, do-while๋ ์กด์ฌํ๋๋ฐ ์ด๋ ์๋ฐ ๋ฌธ๋ฒ๊ณผ ๋์ผํ๋ค. ๊ทธ๋ฅ ์ฐ๋ฉด ๋๋ค.
- for๋ฌธ์ python๊ณผ ๋๊ฐ๋ค. ์๋ ์์ ๋ฅผ ๋ณด์
- ๋ด์ฅ ๋ฉ์๋๋ฅผ ์ ์ ํ๊ฒ ํ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. ์ด๊ฒ๋ python๊ณผ ๋น์ทํ๋ค.
- range()๋ ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋๋ค.
- infix ํจ์๋ค์ ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ๋ณต์กํ ์ธ๋ฑ์ค๋ ๋ง๋ค ์ ์๋ค.
์ฝํ๋ฆฐ์๋ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ์ด ์์ง๋ง, ์๋ฐ์ ๋ฐ๋ณต๋ฌธ๊ณผ ๊ธฐ๋ฅ์ ๊ฐ๋ค๋๊ฑธ ์ธ์งํ๋ฉด ๋ญ๋ ์ง ์ฝ๊ฒ ํ์ฉํ ์ ์๋ค.
for (c in '0' until '9'){
print(c)
}
for (char c ='0'; c <'9'; c++){
System.out.print(c);
}
๐ ์กฐ๊ฑด ๊ฒ์ฌ - in
- ์ด๊ฒ๋ python๊ณผ ๋น์ทํ๋ค. ๋ฐ๋ณต๋ฌธ์ด ์๋๋๋ผ๋ in์ผ๋ก ์กฐ๊ฑด์ ๊ฒ์ฌํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ค.
- in์ ํ์ฉํ์ฌ ํจ์๋ฅผ ์ ์ํ๊ฑฐ๋, When ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ ์๋ ์๋ค.
- ์ฐธ๊ณ ๋ก "String".."String"์ ๋จ์ด์ ์ฌ์ ์์๋ฅผ ๋น๊ตํ๋ค.
๋ง์ฝ ์ผ์นํ๋์ง ๊ฒ์ฌํ๊ณ ์ถ๋ค๋ฉด, in setOf(...)๋ฅผ ์ฌ์ฉํ์
println("Kotlin" in "Java".."Scala")// ์ฌ์ ์์๊ฐ ๋ ๋จ์ด์ ์ค๊ฐ์ธ๊ฐ? true
println("Kotlin" in setOf("Kotlin","Java")) // ํฌํจ์ฌ๋ถ true
println("Kotlin" in setOf("Scala","Java")) // ํฌํจ์ฌ๋ถ false
- ์ฐธ๊ณ ๋ก ์ด๋ ๊ฒ ์ ์ํ in ์กฐ๊ฑด์, ์๋์ ๊ฐ์ ํ์
์ผ๋ก ์์ฑ๋๋ค.
- ์ฆ, ์๋์ 3๊ฐ์ if๋ฌธ์ ๊ฐ์ ๋์์ ํ๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค.
๐ ์์ธ์ฒ๋ฆฌ (Exception)
- Exception, try-catch-finally, throw๋ ์๋ฐ์ ๋์ผํ๋ค. ์ฝํ๋ฆฐ ๋ฌธ๋ฒ์ ๋ง์ถฐ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
- try-catch๋ฅผ ์ฐ์ฐ์์ผ๋ก ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ๊ฐ์ ๋ฐ๋ก ๋์ ํ ์ ์๋ค.
fun readNumber(reader: BufferedReader) {
val number = try {
reader.readLine().toInt() // ๊ฐ ๋์
} catch (e: NumberFormatException) {
null // null ๋์
}
}
- ์๋ฐ์ method() throws Exception์ ์ฝํ๋ฆฐ์์ @Throws(Execption:class)๋ก ์์ฑํ ์ ์๋ค.
์๋ฐ์์๋ ์ฒดํฌ์์ธ(RuntimeException์ด ์๋ ์์ธ)๋ฅผ ๋ฐ๋์ ์ฒ๋ฆฌํด์ค์ผํ์ง๋ง, ์ฝํ๋ฆฐ์ ์ด๋ฅผ ๊ฐ์ ํ์ง ์๋๋ค.
๋ง์ฝ @Throws๋ฅผ ์ ์ง ์๋๋ค๋ฉด, ์๋ฌด๋ฐ ์์ธ๋ ๋ฐ์ผ๋ก ๋์ง์ง ์๊ณ ๋ฉ์๋ ๋ด์์ ์ผ์ผ๋ฒ๋ฆฐ๋ค.
๐ ํ์ฅ ํจ์(Extension Functions)์ this
์ฝํ๋ฆฐ์์๋ ํ์ฅ ํจ์๋ผ๋ ๊ธฐ๋ฅ์ด ์๋ค.
๊ธฐ์กด์ ์ ์๋ ํด๋์ค์ ํจ์๋ฅผ ์ถ๊ฐํด์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ด๋ค.
fun ๊ธฐ์กดํด๋์ค.myMethod() = ...
ํ์ฅํจ์๋ฅผ ์ ์ํ ๋์๋ this๋ฅผ ์ฌ์ฉํ ์ ์๋ค. this๋ ๊ธฐ์กด ํด๋์ค๋ฅผ ์๋ฏธํ๋ค.
๐งจ ๋น์ฐํ๊ฑฐ์ง๋ง ๊ธฐ์กดํด๋์ค์ private ๋ฉ์๋๋ ์ฌ์ฉํ ์ ์๋ค. ํ๋๊ฐ์ด private๋ผ๋ฉด this.get()์ด ๋ถ๊ฐ๋ฅํ๋ค.
์ด๋ ๊ฒ ๋ง๋ ํ์ฅํจ์๋ importํด์ ์ฌ์ฉํ ์๋ ์๋ค.
์ฐธ๊ณ ๋ก ์ฝํ๋ฆฐ์ ํ์ฅํจ์๋ ์๋ฐ์์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ static ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
์๋ฅผ ๋ค์ด ๊ธฐ๋ณธํด๋์ค String์ ์๋์ ๊ฐ์ ํ์ฅํจ์(repeat)๋ฅผ ์ถ๊ฐํ๋ฉด ์๋์ ๊ฐ์ ์๋ฐ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
fun String.repeat(n: Int): String {...}
- ํ์ฅํจ์์ ๊ฐ๋ ฅํจ์, ๊ธฐ์กด ์ฝ๋๋ฅผ ๊ฑด๋๋ฆฌ์ง์๊ณ ๋ฉ์๋ ์ฒด์ด๋(Curring)์ ๊ตฌํํ ์ ์๋ค๋ ์ ์ด๋ค.
์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ ๊ณ ์ ์ ์ธ sum()ํจ์๊ฐ ์์ ๋
fun sum(list: List<Int>): Int {
var result = 0
for (i in list) {
result += i
}
return result
}
fun main(args: Array<String>) {
val sum = sum(listOf(1, 2, 3))
}
ํ์ฅํจ์๋ฅผ ์ด์ฉํ๋ฉด ์๋์ ๊ฐ์ด ๋ฐ๊ฟ ์ ์๋ค. (์ฐธ๊ณ ๋ก IntelliJ Convert parameter to receiver๋ก ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค)
// ๋ฉ์๋ ์๊ทธ๋์ฒ๋ง ํ์ฅํจ์๋ก ๋ณ๊ฒฝํจ.
fun List<Int>.sum(): Int {
var result = 0
for (i in list) {
result += i
}
return result
}
fun main(args: Array<String>) {
val sum = listOf(1, 2, 3).sum()
}
- ๐งจ ํ์ฅํจ์๋ ๊ฐ์ฒด์ ํ์
์ผ๋ก ๋งค์นญ๋๋ค.
๋ง์ฝ ๋คํ์ฑ์ ํ์ฉํด์ val parent = Child() ์ผ๋ก ์ ์ธํ๋๋ผ๋. ํ์ฅํจ์๋ ํ์ ์ ๊ธฐ์ค์ผ๋ก ๋งค์นญ๋๋ค.
- ๊ฐ์ฒด ์์ ๊ฐ์ ํจ์ ์๊ทธ๋์ฒ๋ฅผ ๊ฐ์ง ๋ฉค๋ฒ ํจ์๊ฐ ์กด์ฌํ๋ค๋ฉด, ํ์ฅํจ์๋ณด๋ค ๋จผ์ ์คํ๋๋ค.
์ด์ฐ๋ณด๋ฉด ๋น์ฐํ ์ฌ์ค. ๋ฌผ๋ก ์ด๋ ๊ฒ ํ์ฅํจ์๊ฐ ๊ฐ๋ ค์ง๋ฉด ์ปดํ์ผ warning์ ๋์์ค๋ค.
๋ฌผ๋ก ์ด๋ฆ๋ง ๊ฐ๊ณ , ํ๋ผ๋ฉํ๋ ๋ฐํ๊ฐ์ด ๋ค๋ฅด๋ค๋ฉด ๊ฐ๋ ค์ง์ง ์๋๋ค.
๐ ์ฝํ๋ฆฐ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ฝํ๋ฆฐ์ ์๋ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ex ์ปฌ๋ ์ ํ๋ ์์ํฌ)๋ฅผ ์ ๋ถ ์ ๊ณตํ๋ค.
- ๊ฑฐ๊ธฐ์ ์ถ๊ฐ์ ์ผ๋ก ์ฝํ๋ฆฐ๋ง์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ๊ณตํ๋ค. ์ด๋ JDK๋ง ์์ผ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ ๋ก ์ฝํ๋ฆฐ ์ ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด, ์ปดํ์ผ์ ์์ JAR๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด์๋ค.
๐ infix, ์ค์ ํจ์ ( 1 until 10 , a to b)
์ฝํ๋ฆฐ์์๋ infix ํค์๋๋ฅผ ํตํด ํ์ฅ ํจ์๋ฅผ ์ค์ ํจ์๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ญ๊ฐ ํน๋ณํด์ง๋๊ฑด ์๋๊ณ , ์ ์์ ์์ ๋ณธ๊ฒ์ฒ๋ผ ํจ์๋ฅผ ํ-ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
infix fun Int.multiply(x: Int): Int {
return this * x
}
fun main() {
// ์ผ๋ฐ์ ์ธ ํจ์ ์ฌ์ฉ๋ฒ
val value = 3.multiply(10)
// ์ค์(infix) ํจ์ ์ฌ์ฉ๋ฒ
val value = 3 multiply 10
}
์์์ ๋ดค๋ Pair๋ ์ฝํ๋ฆฐ์ ํน๋ณํ ๊ธฐ๋ฅ์ด ์๋๋ผ, ์ค์ ํ์ฅํจ์๋ฅผ ํตํด ๊ตฌํํ ๊ฒ์ด๋ค.
๐ toInt(), toIntOrNull(), toRegex()
์ฝํ๋ฆฐ์ ํ์ฅํจ์ ๋๋ถ์, ์ฌ๋ฐ๋ ํ์ค๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ๋ง์ด ์กด์ฌํ๋ค.
๋ํ์ ์ผ๋ก """~""".toRegex()๋ก ์ ๊ทํํ์ Regex ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค.
Integer.toInt() ์ด๋ฐ ๊ฒ๋ค๋, ํ์ฅํจ์๋ก ์ฝ๊ฒ ์ธ ์ ์๊ฒ ๊ตฌํํด๋์๋ค.
'๐ฑBackend > Kotiln' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
#3 Nullable Type๊ณผ ํจ์, ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (0) | 2022.02.13 |
---|---|
#1 ์ฝํ๋ฆฐ(Kotlin) ์ด๋ (0) | 2022.02.12 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev