์ฝํ๋ฆฐ๊ณผ ์๋ฐ์ ์ ๊ทผ ์ ์ด์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น์ทํ ๊ฐ๋ ์ ๊ณต์ ํ์ง๋ง, ์ธ๋ถ์ ์ผ๋ก๋ ์ฐจ์ด์ ์ด ์๋ค.
Kotlin ๊ณผ Java ์ ๊ทผ ์ ์ด์๊ฐ ๋น์ฐํ ๊ฐ๋ค๊ณ ์๊ฐํ์ผ๋ฉด ์ด ๊ธ์ ๋ณด๊ณ ์ฐจ์ด์ ์ ์์๋ณด์
์ ๊ทผ ์ ์ด์ | ์ฝํ๋ฆฐ | ์๋ฐ |
public | ๊ธฐ๋ณธ ์ ๊ทผ ์ ์ด์ (๋ช
์ํ์ง ์์ผ๋ฉด public) ๋ชจ๋ ๊ณณ์์ ์ ๊ทผ ๊ฐ๋ฅ |
๋ชจ๋ ๊ณณ์์ ์ ๊ทผ ๊ฐ๋ฅ |
internal | ๊ฐ์ ๋ชจ๋ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ (internal์ ์ฝํ๋ฆฐ ๊ณ ์ ) | ์์ |
protected | ์ ์ธ๋ ํด๋์ค ๋ฐ ํ์ ํด๋์ค์์ ์ ๊ทผ ๊ฐ๋ฅ | ๋์ผํ ํจํค์ง ์์์ ์ ๊ทผ์ด ๊ฐ๋ฅ (ํ์ ํด๋์ค๋ฉด ๋ค๋ฅธ ํจํค์ง์์๋ ์ ๊ทผ ๊ฐ๋ฅ) |
default | ์์ | ๊ธฐ๋ณธ ์ ๊ทผ ์ ์ด์ (๋ช
์ํ์ง ์์ผ๋ฉด default ) ๋์ผํ ํจํค์ง ์์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅ |
private | ์ ์ธ๋ ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅ | ์ ์ธ๋ ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅ |
1. ์ฝํ๋ฆฐ์ internal
internal (์ฝํ๋ฆฐ ์ ์ฉ)
- ๊ฐ์ ๋ชจ๋ ๋ด์์๋ง ์ ๊ทผํ ์ ์๋ค. ๋ชจ๋์ ์ผ๋ฐ์ ์ผ๋ก ํ๋์ ์ปดํ์ผ๋ ๋จ์(์: ํ ๊ฐ์ Gradle ๋ชจ๋)๋ค.
- ์ฝํ๋ฆฐ์์๋ ํจํค์ง ์์ค ์ ๊ทผ ์ ์ด์๊ฐ ์์ผ๋ฉฐ, ๋์ internal์ด ๊ทธ ์ญํ ์ ํ๋ค.
์ฝํ๋ฆฐ์ internal ์ ๊ทผ ์์ค์ JVM ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผํ ๋ public์ผ๋ก ๋ณํ๋ค. ํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก ํน์ํ ์ด๋ฆ ๋ณํ( Name Mangling)์ ํตํด ์๋ฐ ์ฝ๋์์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ๊ธฐ ์ด๋ ต๋ค. ์ ๋๋ค๋ ๊ฑด ์๋๋ค. ์๋ฐ์์ ์ ๊ทผ์ ๊ฐ๋ฅํ์ง๋ง ์ด๋ฆ์ด ๋งน๊ธ๋ง๋์ด ์ด๋ ต๋ค๋ ๊ฒ์ด๋ค.
์์
internal class Internal {
val publicField = "public field"
internal val internalField = "internal field"
fun publicMethod() {
println("public method")
}
internal fun internalMethod() {
println("internal method")
}
}
callee ๋ชจ๋์ ์์ ๊ฐ์ ์ฝํ๋ฆฐ ํ์ผ์ ๋ง๋ ๋ค.
๋ค๋ฅธ ๋ชจ๋(caller)์์, ์ฝํ๋ฆฐ ํ์ผ์์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ๋ชจ๋์ด ๋ค๋ฅด๋ค๋ ์ปดํ์ผ ์๋ฌ๊ฐ ์๊ธด๋ค.
๋๊ฐ์ด ์๋ฐ ์ฝ๋์์ ์ฝํ๋ฆฐ ํด๋์ค๋ฅผ ์ ๊ทผํ๊ฒ๋๋ฉด ๊ฐ์ ์ปดํ์ผ ์๋ฌ๊ฐ ์๊ธด๋ค.
ํ์ง๋ง ๋น๋ํ๊ฒ ๋๋ฉด ์ ์์ ์ผ๋ก ๋น๋๋๋ค. ๋น๋์ internal ํด๋์ค๊ฐ ๋ฐ์ดํธ ์ฝ๋๋ก ์ปดํ์ผ๋ ๋ public ํด๋์ค๋ก ๋ฐ๋์ด ๋น๋๋๊ธฐ์ ์ฐ๋์ด ๊ฐ๋ฅํ๋ค.
public ํ๋์ ๋ฉ์๋ ๋ํ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
internal field์ internal method์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์ด๋ฆ์ด ๋ฐ๋์ด์ ธ์๋ค. ์์์ ๋งํ Name Mangling ๋๋ฌธ์ด๋ค. internalMethod$callee()๋ getInernalField$callee()๋ ๋ถ๋ฅด๋๋ผ๋ ๋น๋๋ ๋๋ค.
2. ์ฝํ๋ฆฐ์์ protected ์ ์๋ฐ์์ protected
์ฝํ๋ฆฐ protected : ์ ์ธ๋ ํด๋์ค์ ํ์ ํด๋์ค์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ, ๊ฐ์ ํจํค์ง์์๋ ์ ๊ทผํ ์ ์๋ค.
์๋ฐ protected : ๊ฐ์ ํจํค์ง ๋ชจ๋ ํด๋์ค์์ ์ ๊ทผ ๊ฐ๋ฅํ๊ณ , ์๋ธ ํด๋์ค๋ผ๋ฉด ๋ค๋ฅธ ํจํค์ง์์๋ ์ ๊ทผํ ์ ์๋ค.
Kotlin
open class Parent {
protected fun greet() {
println("Hello from Parent")
}
}
class Child : Parent() {
fun childGreet() {
greet() // ๊ฐ๋ฅ
}
}
// greet()์ ์ธ๋ถ์์ ์ ๊ทผ ๋ถ๊ฐ
Java
package com.example;
public class Parent {
protected void greet() {
System.out.println("Hello from Parent");
}
}
package com.example;
public class Child extends Parent {
public void childGreet() {
greet(); // ๊ฐ๋ฅ
}
}
package com.example;
public class AnotherClass {
public void test() {
Parent parent = new Parent();
parent.greet(); // ๊ฐ์ ํจํค์ง ๋ด์์๋ ์ ๊ทผ ๊ฐ๋ฅ
}
}
'Kotlin Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฝํ๋ฆฐ ๊ณต๋ถ๋ฅผ ์์ํ๋ฉฐ... (0) | 2024.09.17 |
---|
๋๊ธ