New Score :0
High Score :0
Run Best
NICE BUSINESS TYPE INDICATOR
3. ๊ธ์ ์ ์น๊ตฌ์๊ฒ ๋น๋ ธ๋๋ฐ ์ค๋์ด ๋์ ์ฃผ๊ธฐ๋ก ํ๋ .. ๊ทธ๋ฐ๋ฐ ์นด๋๊ฐ์ ๋ด์ผํ๋ ๋ ๋ ์ค๋์ธ๋ฐ... ์ด๊ฑธ ์ด์ฉ๋...
4. ์ฐ๋ฆฌ ํ์ฌ๋ ์ค์ํ ์์ฌ ๊ฒฐ์ ์ ํ ๋?
5. ์ด์ฌํ ์ผํ ๋๋ฅผ ์ํ ์ ๋ฌผ์ ์ฃผ๊ณ ์ถ๋ค. ์ด๋ค๊ฒ ์ข์๊น?
6. ์ํ์์ ํฌ์์ํ์ ์ถ์ฒ๋ฐ์๋ค. ์ด๋ค๊ฑธ ๊ฐ์ ํ์ง?
7. ํ์ฌ์์์ ๋๋?
8. ๊ฟ์์ ๊นจ์ด๋๋ 20๋ ์ ์ผ๋ก ๋์๊ฐ๋ค. ๋น์ ์ด ์ ์ผ ๋จผ์ ํ๋์ผ์?
9. ๋ด๊ฐ ์ธ์ฌ ๋ด๋น์๋ผ๋ฉด ์ ๊ท ์ ์ฌ์ ์ฑ์ฉ ์ ์ ์ผ ์ค์ํ๊ฒ ๋ณด๋๊ฒ์?
10. ํ์ฌ์ ์ ๋ง ์ซ์ดํ๋ ๋๋ฃ๊ฐ ์๋ค๋ฉด?
11. ๊ฐ๋ํ ์ง์ ๊ฐ์ฅ์ด ๋์๋ค.. ์๋ ์ ์์ผ ๋ ์ ๋ฌผ์?
12. ํ์ ํ์ฌ ์ถ๊ทผ ์คํ์ผ์?
13.ํ์ฌ ์ฒด์ก๋ํ ํ๋ ๋ ์ด๋ค. ์ค๋ ๋ญํ์ง?
14. ๋์ ์ ๋ฌด ์คํ์ผ์?
Kotlin ํด๋์ค ์ ๊ทผ ์ ์ด์์ ์์ ์์ ์ฌ์ธต ๋ถ์
๊ฐ์
Kotlin์ ํ๋์ ์ด๊ณ ํํ๋ ฅ ๋์ ์ธ์ด ์ค๊ณ๋ฅผ ์ํด ํด๋์ค์ ๋ฉค๋ฒ์ ๊ฐ์์ฑ ๋ฐ ํ์ฅ์ฑ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์๋ ๋ค์ํ ํค์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ณธ ๋ณด๊ณ ์๋ protected
, inner
, private
, open
์ ํต์ฌ ๊ฐ๋
์ ํด๋ถํ๊ณ , ๊ฐ ํค์๋์ ๋์ ๋ฉ์ปค๋์ฆ, ์ํธ ์ฐจ์ด์ , ์ค์ ๊ฐ๋ฐ ์๋๋ฆฌ์ค์์์ ์ต์ ํ์ฉ ์ ๋ต์ ์ฒด๊ณ์ ์ผ๋ก ๋ถ์ํฉ๋๋ค. ํนํ Java์์ ๋น๊ต๋ฅผ ํตํด Kotlin์ ์ค๊ณ ์ฒ ํ์ ๋ช
ํํ ์ดํดํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ๋ชจ๋ํ, ์บก์ํ ์ธก๋ฉด์์์ ๊ณ ๋ ค์ฌํญ์ ์ข
ํฉ์ ์ผ๋ก ๋
ผ์ํฉ๋๋ค.
1. private: ์๊ฒฉํ ์บก์ํ์ ๊ตฌํ
1.1 ๊ฐ๋ ์ ์ ์
- ํด๋์ค ์์ค: ์ ์ธ๋ ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผ ํ์ฉ.
- ์ต์์ ์ ์ธ: ๋์ผ ํ์ผ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ.
- Java ๋๋น: ํจํค์ง ๊ฐ์์ฑ ์์. Kotlin์
private
์ Java์private
๋ณด๋ค ๋ ์๊ฒฉํ ์ค์ฝํ ์ ์ฉ.
class DatabaseConfig {
private val connectionString = "jdbc:mysql://localhost:3306/mydb" // ์ธ๋ถ ์ ๊ทผ ๋ถ๊ฐ
fun connect() = println(connectionString)
}
1.2 ํ์ฉ ์๋๋ฆฌ์ค
- ๋ด๋ถ ๊ตฌํ ์ธ๋ถ์ฌํญ ์๋: ํด๋์ค์ ๋ด๋ถ ์ํ(์: DB ์ฐ๊ฒฐ ๋ฌธ์์ด) ๋ ธ์ถ ๋ฐฉ์ง.
- ์ฝ๋ ์์ ์ฑ ๊ฐํ: ์๋์น ์์ ์ธ๋ถ ์์ ์ฐจ๋จ์ผ๋ก ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ ๊ฐ์.
- ๋ฆฌํฉํ ๋ง ์ฉ์ด์ฑ: private ๋ฉค๋ฒ ์์ ์ด ์ธ๋ถ ์ฝ๋์ ๋ฏธ์น๋ ์ํฅ ์ต์ํ.
2. protected: ์ ํ๋ ์์ ๊ณ์ธต ๋ด ๊ณต์
2.1 ๊ฐ๋ ์ ํน์ฑ
- ํด๋์ค ๊ณ์ธต ์ ํ: ์ ์ธ ํด๋์ค์ ํ์ ํด๋์ค์์๋ง ์ ๊ทผ ํ์ฉ.
- Java์์ ์ฐจ์ด์ : ๋์ผ ํจํค์ง ๊ฐ์์ฑ ์์. ์์ ์์ ๊ด๊ณ์๋ง ์์กด.
- ์ต์์ ์ ์ธ ๋ถ๊ฐ: ํด๋์ค ๋ฉค๋ฒ๋ก๋ง ์ฌ์ฉ ๊ฐ๋ฅ.
open class Animal {
protected val sound = "Generic animal sound" // ํ์ ํด๋์ค ์ ์ฉ
}
class Cat : Animal() {
fun makeSound() = println(sound) // ์ ์ ์ ๊ทผ
}
2.2 ์ ์ฉ ์ ๋ต
- ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด: ์ถ์ ๋ฉ์๋์ ๋ณดํธ๋ ๊ตฌํ ์ ๊ณต.
- ์์ ์ ์ด: ํ๋ ์์ํฌ ๊ฐ๋ฐ ์ ํ์ฅ ํฌ์ธํธ ๋ช ์์ ํ์.
- API ์ค๊ณ: ๋ด๋ถ ์ฌ์ฉ์ ์ํ ๋ฉ์๋์ ์ธ๋ถ ๊ณต๊ฐ API ๋ถ๋ฆฌ.
3. internal: ๋ชจ๋ ๋จ์ ์บก์ํ
3.1 ํต์ฌ ๋ฉ์ปค๋์ฆ
- ๋ชจ๋ ์ ์: ํจ๊ป ์ปดํ์ผ๋๋ Kotlin ํ์ผ ์งํฉ(Gradle ์์ค์ , IDEA ๋ชจ๋ ๋ฑ).
- Java ํธํ์ฑ: JVM์์
public
์ผ๋ก ์ปดํ์ผ๋๋, Kotlin ์ปดํ์ผ๋ฌ๊ฐ ์ ๊ทผ ์ ์ด. - ์ฌ์ฉ์ฒ: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ API, ๋ชจ๋๊ฐ ์์กด์ฑ ๊ด๋ฆฌ.
internal class AnalyticsTracker { // ๋ชจ๋ ๋ด๋ถ ์ ์ฉ
fun trackEvent(event: String) = println("Logging: $event")
}
3.2 ์ค๋ฌด ์ ์ฉ
- ๋ชจ๋ ๊ฒฝ๊ณ ๊ฐํ: ๋ชจ๋ ๊ฐ ์ฐ๋ฐ์ ์์กด์ฑ ๋ฐฉ์ง.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ: ์ธ๋ถ ๋ ธ์ถ ๋ถํ์ํ ๋ด๋ถ ํด๋์ค ์๋.
- ๋๊ท๋ชจ ํ๋ก์ ํธ: ๊ธฐ๋ฅ ๋ชจ๋ํ๋ฅผ ํตํ ๋น๋ ์ต์ ํ.
4. open: ํ์ฅ ๊ฐ๋ฅ์ฑ์ ๋ช ์์ ํ์ฉ
4.1 ์ค๊ณ ์ฒ ํ
- ๊ธฐ๋ณธ final ์์น: ๋ชจ๋ ํด๋์ค/๋ฉ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๋ถ๊ฐ. ์๋์ ๊ฐ๋ฐฉ ํ์.
- Java ์์ ๋ชจ๋ธ ๋๋น: ์ทจ์ฝ ๊ธฐ๋ฐ ํด๋์ค ๋ฌธ์ (Fragile Base Class) ํด๊ฒฐ.
- ์ด์ค ์ ์ด: ํด๋์ค
open
์ ์ธ + ๊ฐ๋ณ ๋ฉค๋ฒopen
ํ์.
open class Shape {
open fun draw() = println("Drawing generic shape") // ์ฌ์ ์ ํ์ฉ
fun calculateArea() = println("Area calculation") // final
}
class Circle : Shape() {
override fun draw() = println("Drawing circle") // ์ ์ ์ฌ์ ์
}
4.2 ํ์ฉ ๊ฐ์ด๋๋ผ์ธ
- ํ๋ ์์ํฌ ํ์ฅ์ : ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ ์ค๊ณ ์ ํต์ฌ ํด๋์ค ๊ฐ๋ฐฉ.
- ์๋ ๋ฌธ์ํ:
open
์ ํตํด ํ์ฅ ์๋๋ฅผ ๊ฐ๋ฐ์์๊ฒ ๋ช ์. - ๋ณด์ ์ค์ ์ฝ๋ ๋ณดํธ: ํต์ฌ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ final ์ ์ง.
5. inner: ์ธ๋ถ ํด๋์ค ์ปจํ ์คํธ ๊ณต์
5.1 ๋์ ์๋ฆฌ
- ์์์ ์ฐธ์กฐ ๋ณด์ : ์ธ๋ถ ํด๋์ค ์ธ์คํด์ค์ ๋ํ
this@Outer
์ฐธ์กฐ. - ๋ฉ๋ชจ๋ฆฌ ์ํฅ: ์ฐธ์กฐ ์ ์ง๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์ ๊ฐ๋ฅ์ฑ ์ฃผ์.
- Java ๋๋น: ๋ช
์์
inner
ํค์๋ ํ์. ๊ธฐ๋ณธ ์ค์ฒฉ ํด๋์ค๋ ์ ์ .
class Outer {
private val secret = 42
inner class Inner {
fun revealSecret() = println("The secret is $secret") // ์ธ๋ถ ์ฐธ์กฐ ์ ๊ทผ
}
}
// ์ฌ์ฉ: Outer().Inner().revealSecret()
5.2 ์ฌ์ฉ ๊ถ์ฅ ์ฌ๋ก
- ์ด๋ฒคํธ ํธ๋ค๋ฌ: ์ธ๋ถ ์ํ์ ๋ฐ์ ํ ์ฐ๊ด์ฑ ์๋ ํธ๋ค๋ฌ ๊ตฌํ.
- UI ์ปดํฌ๋ํธ: RecyclerView.ViewHolder์ ๊ฐ์ ํจํด.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ํ์: ๋ผ์ดํ์ฌ์ดํด์ด ์งง์ ๊ฐ์ฒด์ ํํด ์ฌ์ฉ.
6. ๋น๊ต ๋ถ์: ์ํฉ๋ณ ํค์๋ ์ ํ ๋งคํธ๋ฆญ์ค
ํค์๋ | ๊ฐ์์ฑ ๋ฒ์ | ์์ ์ํฅ | ๋ฉ๋ชจ๋ฆฌ ๊ณ ๋ ค์ฌํญ | ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก |
private | ํด๋์ค/ํ์ผ ๋ด๋ถ | ๋ฌด๊ด | ์์ | ๋ด๋ถ ๊ตฌํ ์๋ |
protected | ํด๋์ค + ํ์ ํด๋์ค | ์ง์ ์ ์ํฅ | ์์ | ํ์ฅ ๊ฐ๋ฅ ์ปดํฌ๋ํธ ์ค๊ณ |
internal | ๋์ผ ๋ชจ๋ | ๋ฌด๊ด | ์์ | ๋ชจ๋ํ ์ํคํ ์ฒ ๊ตฌํ |
open | ๊ฐ์์ฑ๊ณผ ๋ ๋ฆฝ์ | ์์ ํ์ฉ | ์์ | ํ๋ ์์ํฌ ํ์ฅ์ ์ ๊ณต |
inner | ์ธ๋ถ ํด๋์ค ์ธ์คํด์ค ํ์ | ๋ฌด๊ด | ์ฐธ์กฐ ์ ์ง ๊ฐ๋ฅ์ฑ | ๋ฐ์ ํ ์ปดํฌ๋ํธ ์ฐ๋ |
7. ๊ณ ๊ธ ํ์ฉ ์๋๋ฆฌ์ค ๋ฐ ์ฃผ์์ฌํญ
7.1 ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ต
- inner ํด๋์ค ์ฌ์ฉ ์: ์ฝํ ์ฐธ์กฐ(WeakReference) ๋๋ ๋ผ์ดํ์ฌ์ดํด ๊ด์ฐฐ์ ํจํด ์ ์ฉ.
- ๋ฆฌ์ค๋ ํด์ :
inner
ํด๋์ค๊ฐ ์ธ๋ถ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํ ๋ ๋ช ์์ null ํ ๋น ํ์.
7.2 ๋ชจ๋ ์ค๊ณ ์ต์ ํ
- internal API ๋ฌธ์ํ: KDoc์
@InternalAPI
ํ๊ทธ ์ฌ์ฉ์ผ๋ก ๊ฐ๋ฐ์ ์ฃผ์ ํ๊ธฐ. - ๋ชจ๋ ๊ฒฝ๊ณ ํ ์คํธ: ๋ค๋ฅธ ๋ชจ๋์์ internal ํด๋์ค ์ ๊ทผ ์๋ ๊ฒ์ฆ.
7.3 ์์ ๊ณ์ธต ์ค๊ณ
- open ํด๋์ค ๊ณ์ฝ: ํ์ ํด๋์ค๊ฐ ์ง์ผ์ผ ํ ๋ถ๋ณ์(invariant) ๋ฌธ์ํ.
- ์์ ๊ธ์ง ํ์ ์:
final
์ฌ์ ์ธ ๋๋ sealed ํด๋์ค ํ์ฉ.
8. ๊ฒฐ๋ก : Kotlin์ ์๋์ ์ค๊ณ ์ฒ ํ
Kotlin์ ์ ๊ทผ ์ ์ด์์ ์์ ์๋ ์ธ์ด ์ค๊ณ์๋ค์ด ์ถ๊ตฌํ๋ ๋ช
์์ฑ๊ณผ ์์ ์ฑ์ ๋ฐ์ํฉ๋๋ค. Java์ ์๋ฌต์ ํ์ฉ(๊ธฐ๋ณธ ํจํค์ง ๊ฐ์์ฑ, ๋ฌด์ ํ ์์)์์ ๋ฒ์ด๋, ๊ฐ๋ฐ์๋ก ํ์ฌ๊ธ ์์คํ
์ ํ์ฅ์ ๊ณผ ์บก์ํ ๊ฒฝ๊ณ๋ฅผ ์์์ ์ผ๋ก ์ ํํ๋๋ก ์ ๋ํฉ๋๋ค. inner
์ ์ฐธ์กฐ ๊ด๋ฆฌ, internal
์ ํตํ ๋ชจ๋ ๊ฒฝ๊ณ ๊ฐํ, open
์ ์ ํ์ ์์ ํ์ฉ์ ๋๊ท๋ชจ ์์คํ
๊ฐ๋ฐ์์ ๋ฐ์ํ๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ค(๋ชจ๋ ๊ฐ ๊ฒฐํฉ๋, ์๊ธฐ์น ์์ ์์ ์ค๋ฅ, ๋ฉ๋ชจ๋ฆฌ ๋์)์ ๋ํ Kotlin์ ์ฒด๊ณ์ ์ธ ํด๋ฒ์
๋๋ค. ํ๋์ ์ํํธ์จ์ด ์ํคํ
์ฒ ์ค๊ณ์ ์์ด ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ์ ๋ต์ ์ผ๋ก ํ์ฉํ๋ฉด ์ ์ง๋ณด์์ฑ๊ณผ ์์คํ
์์ ์ฑ์ ๋์์ ํ๋ณดํ ์ ์์ต๋๋ค.