๐ช ๋ฉ์๋ ์ค๊ณ
โถ๏ธ ๋ฉ์๋๋?
- ์์ค์ฝ๋์ ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒ
- ํน์ ํ ๋ก์ง์ ๊ฐ์ง๋ ์์ค์ฝ๋์ ๋ณ๋ช
(์ด๋ฆ)์ ๋ถ์ผ ์ ์๊ณ , ์ด ์ด๋ฆ์ด ๋ถ์ ๋ก์ง์ ๋ฉ์๋๋ผ๊ณ ๋ถ๋ฅผ ์ ์๋ค.
โถ๏ธ Kotlin์ ๋ฉ์๋ ๊ตฌ์กฐ
fun ๋ฉ์๋์ด๋ฆ(๋ณ์๋ช
:์๋ฃํ, ๋ณ์๋ช
:์๋ฃํ, ...) : ๋ฐํ์๋ฃํ {
์์ค์ฝ๋ ๋ก์ง
}
โถ๏ธ ๋ฉ์๋๋ ์ด๋์ ์ฐ์ผ๊น?
- ๋ก์ง์ ์ถ์ํํด๋๊ณ ์ํฉ์ ๋ง๊ฒ ์คํํ ์ ์๋ค.
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค.
- ์ ํด์ง ๊ฐ(ex> 3+5=8)๋ง ํธ์ถํ ์ ์๋ ๊ฒ์ด ์๋๋ผ ์ถ์ํํ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ , ํ๋ผ๋ฏธํฐ์ ์ ๋ฌํ๋ ๊ฒ์ ๋ฐ๋ผ์ ๋ก์ง์ ํ์ ๊ฒฐ๊ณผ๋ฅผ ๋ผ ์ ์๋ค.
- ์ถ์ํ(Abstraction) : ๊ณตํต์ ์์ฑ์ด๋ ๊ธฐ๋ฅ์ ๋ฌถ์ด ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒ์ผ๋ก ๊ฐ์ฒด ์งํฅ์ ๊ด์ ์์ ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ฒ, ๋ณต์กํ ๊ตฌ์กฐ ยท ์๋ฆฌ ยท ์ค๋ช
์ ๊ฐ์ถ๋ฆฌ๊ณ ํต์ฌ๋ง ๋งํ๋ ๊ฒ
ex) ๋งค์ผ ์ค์ 10์์ 5๋ง์์ด์์ ์ฃผ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ณ ๋ฉ์ผ๋ก ์ ์ก
- fun main() {}๋ ๋ฉ์๋์ด๋ค. Kotlin์์๋ ํญ์ ํ๋ก๊ทธ๋จ์ ์์์ ์ main ํจ์๋ผ๊ณ ์ ํด์ ธ ์๊ธฐ ๋๋ฌธ์ mainํจ์๋ ํธ์ถํ์ง ์์๋ ์คํํ ๋ ์์์ ์คํํ๋ค.
โถ๏ธ ์์ ์ฝ๋
fun main() {
var num1 = readLine()!!.toInt()
var num2 = readLine()!!.toInt()
sum(num1, num2)
}
fun sum(num1:Int, num2:Int) {
var result = num1 + num2
println("num1๊ณผ num2์ ๋ง์
๊ฒฐ๊ณผ๋ ${result}์
๋๋ค.")
}
}
- ์ค๋์ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ๋ ๋ฉ์๋ ๋ง๋ค๊ธฐ
fun main() {
displayInfo()
}
fun displayInfo() : Unit {
println("์ค๋์ ๋ ์จ๋ ํ์ฐฝํฉ๋๋ค")
println("์ค๋์ ๊ฒ์ ์์ ์กฐ์ฌํ์ธ์")
}
- ์ํ์ ์๋ฅผ ์
๋ ฅ๋ฐ์ ๋ฑ๊ธ์ ์ถ๋ ฅํด์ฃผ๋ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
fun main() {
var mathScore = readLine()!!.toInt()
var myRank = checkRank(mathScore)
println("๋น์ ์ ์ํ ์ ์ ๋ฑ๊ธ์ ${myRank}๋ฑ๊ธ์
๋๋ค.")
}
fun checkRank(score: Int): String {
return when(score) {
in 91 .. 100 -> "A"
in 81 .. 90 -> "B"
in 71 .. 80 -> "C"
else -> "D"
}
}
๐ช ํด๋์ค ์ค๊ณ
โถ๏ธ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋?
- Object Oriented Programming (OOP)
- ์ฝํ๋ฆฐ์ ๋ชจ๋ ๊ฒ์ด ํด๋์คํํ์ด๋ฏ๋ก ๊ฐ์ฒดํํ ์ ์๋ค.
- ํ๋ก๊ทธ๋จ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ํ์์ผ ์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
- ๊ฐ์ฒด๋ค๊ฐ์ ์ ์ ํ ๊ฒฐํฉ์ ํตํด ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ๋ค.
- 5๋ ํค์๋
- ํด๋์ค
- ์ถ์ํ
- ์บก์ํ
- ์์
- ๋คํ์ฑ
- ์๋ฃ
โถ๏ธ ํด๋์ค๋?
- ํ๋ก๊ทธ๋จ์ ๊ฐ ์์๋ณ ์ค๊ณ๋๋ผ๊ณ ํด์ํ ์ ์๋ค.
- ์ฝํ๋ฆฐ์์๋ ์ค๊ณ๋๋ฅผ class๋ผ๋ ํค์๋๋ก ๋ง๋ ๋ค.
- ํด๋์ค๋ผ๋ ์ค๊ณ๋์๋ ์ ๋ณด(ํ๋กํผํฐ)์ ํ์(๋ฉ์๋)๋ฅผ ์์ฑํ๋ค.
- ๋ณดํต ํ๋์ ํ์ผ์ ํ๊ฐ์ ํด๋์ค๋ฅผ ์๋ฏธํ์ง๋ง, ํ๋์ ํ์ผ์์ ์ฌ๋ฌ๊ฐ์ ํด๋์ค๊ฐ ์กด์ฌํ ์๋ ์๋ค.
[ Kotlin์ ํด๋์ค ๊ตฌ์กฐ ]
class ํด๋์ค์ด๋ฆ {
์ ๋ณด(ํ๋กํผํฐ)1
์ ๋ณด(ํ๋กํผํฐ)2
ํ์(๋ฉ์๋)1
ํ์(๋ฉ์๋)2
}
[ ํน๋ณํ ํด๋์ค๋ค ] โญ๏ธโญ๏ธโญ๏ธโญ๏ธโญ๏ธ
1. ๋ฐ์ดํฐ ํด๋์ค (data class)
data class ํด๋์ค์ด๋ฆ {
์ ๋ณด1
์ ๋ณด2
}
- ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ์ ๋ณด(ํ๋กํผํฐ)๋ง ๊ฐ์ง๊ณ ์๋ ํด๋์ค๊ฐ ํ์ํ ๋๊ฐ ์๋ค.
- ์ ๋ณด๋ง ๊ฐ์ง๊ณ ์์ผ๋ฉด์ ์ค๊ณํ๋ ค๋ฉด ์๊ฐ๋ณด๋ค ๊ท์ฐฎ์๋ฐ, ์ด๋ด ๋ data class ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค์ฐ ๊ฐํธํด์ง๋ค.
- ๊ธฐ๋ณธ ์์ฑ์์ 1๊ฐ ์ด์์ ๋งค๊ฐ๋ณ์๊ฐ ๋ณ์๋ ์์๋ก ์กด์ฌํด์ผ ํ๋ค.
- ์ ์ฉํ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค.
- hashCode(): ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ๊ณ ์ ๊ฐ์ ๋ฆฌํดํด์ค
- eqauals(): ๋์ผํ ๊ฐ์ฒด์ธ์ง ๋น๊ตํด์ true ๋๋ false๋ฅผ ๋ฆฌํดํด์ค
- copy(): ํ์ฌ ๊ฐ์ฒด์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํด์ค
- toString(): ํ์ฌ ๊ฐ์ฒด์ ๋ชจ๋ ์ ๋ณด(ํ๋กํผํฐ)๋ฅผ ์์๊ฒ ์ถ๋ ฅํด์ค
- getXXX()/setXXX(๋งค๊ฐ๋ณ์): ๋ณ์์ ๊ฐ์ ๋ฆฌํดํ๊ฑฐ๋ ์ค์ ํด์ค
2. ์ค๋ ํด๋์ค (sealed class)
sealed class ๋ถ๋ชจํด๋์ค {
class ์์ํด๋์ค1 : ๋ถ๋ชจํด๋์ค์์ฑ์
class ์์ํด๋์ค2 : ๋ถ๋ชจํด๋์ค์์ฑ์
}
- ํด๋์ค ์์๊ณผ ๊ด๋ จ๋ ๊ฐ๋
- ์์๋ฐ์ ์ ์๋ ์์ํด๋์ค๋ค์ ๋ฏธ๋ฆฌ ์ ์ํ ์ ์๋ค.
- ๋ฌด๋ถ๋ณํ ์์์ ๋ฐฉ์งํ ์ ์๋ค.
- ์ปดํ์ผ ์์ ์ ์์ฑํ ์ ์๋ ์์์ ์ ์ ์๊ธฐ๋๋ฌธ์ ํจ์จ์ ์ผ๋ก ๋คํ์ฑ์ ๊ตฌํํ๋ค.
3. ์ค๋ธ์ ํธ ํด๋์ค (object class)
- Java์ static ๋์ ์ฌ์ฉํ๋ ํค์๋
- ์๋ class๋ผ๋ ์ค๊ณ๋๋ฅผ ๋ง๋ค์๋ค๊ณ ํด์ ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ก ์ฌ๋ผ๊ฐ๋ ๊ฒ ์๋๋ฐ, ์ค๋ธ์ ํธ ํด๋์ค๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ก ์ฌ๋ผ๊ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. (ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๋์์ ์ธ์คํด์คํ)
- (์์ธํ ๋ด์ฉ์ ๊ณ ๊ธ๋ฌธ๋ฒ ์๊ฐ์..)
4. ์ด๊ฑฐ ํด๋์ค (enum class) ??
enum class ํด๋์ค1 {
C, JAVA, KOTLIN
}
enum class ํด๋์ค2(val code: Int) {
C(10),
JAVA(20),
KOTLIN(30)
}
fun main() {
println(ํด๋์ค1.C.toString())
println(ํด๋์ค2.KOTLIN.code)
println(ํด๋์ค2.KOTLIN.name)
}
- ์ฌ๋ฌ ๊ณณ์ ๋์ผํ ์์๋ฅผ ์ ์ํ๊ฑฐ๋, ์์ ์ธ๋ถ์ ๊ด๋ จ๋ ๋ณ์๋ ํจ์๋ฅผ ์ ์ํ๊ฒ ๋๋ฉด ์ฝ๋๊ฐ ์ฆ๊ฐํ ์๋ก ๊ด๋ฆฌ๊ฐ ์ด๋ ค์์ง๋ค. ์ด ๋ enum class๋ฅผ ์ด์ฉํด์ ์์๊ฐ์ ๋ํ ๊ด๋ฆฌ ์ง์ ์ ์ค์ผ ์ ์๋ค.
- Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์ถ์ ํด๋์ค์ด๋ค.
(์๊ฐ ํ ๋ค์ ์ดํดํด ๋ณด์..)
[ ํด๋์ค ์ฌ์ฉ ์์น ]
- ์ด๋ค ์์์ ๋ํด ์ค๊ณ๋ฅผ ํ ๋
ex) ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋ ํน์ ์บ๋ฆญํฐ๋ค์ ์ค๊ณ๋๋ฅผ ์์ฑ
fun main() {
}
class Character {
var name:String = ""
var hairColor:String = ""
var height:Double = 0.0
fun fireBall() {
println("ํ์ด์ด๋ณผ!")
}
fun compositing(device1:String, device2:String): String {
var device3 = device1 + device2
println("์๋ก์ด ๋ฌด๊ธฐ์ธ ${device3}์
๋๋ค")
return device3
}
}