์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Android
- CS
- ์ค๋ธ์
- MySQL
- ํผ๊ณต์ฑ๋ฆฐ์ง
- ๊ธฐ์ ๋ฉด์
- ์๋ฐ
- SQL
- ์๊ณ ๋ฆฌ์ฆ
- ์ธํ๋ฐ
- ์ฝํ๋ฆฐ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- groupby
- doitandroid
- ์๋ฃ๊ตฌ์กฐ
- ์คํฐ๋
- Til
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
- select
- ์ฝํ
- ํผ๊ณต๋จ
- java
- Kotlin
- ์๋๋ก์ด๋์คํ๋์ค
- join
- ์นด์นด์ค์ฝํ
- ์ ์ฒ๊ธฐ
- ์๋๋ก์ด๋
- ํ๋ก๊ทธ๋๋จธ์ค
- ํผ๊ณตํ
- Today
- Total
Welcome! Everything is fine.
[TIL] 220130 ๋ณธ๋ฌธ
๐ป Today I Leaned...
๐ ์ฝํ๋ฆฐ 3๊ฐ์ผ๋ก ๋๋ด๊ธฐ - 2ํธ ๊ณ ๊ธ๋ฌธ๋ฒ
1. ๋๋ค
1) ๋๋ค์์ด๋?
๋๋ค์์ ์ฐ๋ฆฌ๊ฐ ๋ง์น value์ฒ๋ผ ๋ค๋ฃฐ ์ ์๋ ์ต๋ช ํจ์์ด๋ค.
- ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ค ์ ์๋ค.
- return ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋๋ค์ ๊ธฐ๋ณธ์ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
val lambdaName : Type = {argumentList -> codeBody}
๊ฐ๋จํ ์๋ก, Int๋ฅผ ๋ฃ์ด ๊ทธ๊ฒ์ ์ ๊ณฑ์ ๋ฆฌํดํ๋ ๋๋ค์์ ์ ์ด๋ณด์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. square๋ผ๋ ์ด๋ฆ์ ์ ํ๊ณ , Int๋ฅผ ๋ฃ๊ณ Int๊ฐ ๋์ฌ ๊ฒ์ด๋ผ๊ณ ์ ๊ณ , number๋ฅผ ๋ฃ๊ณ number์ ์ ๊ณฑ์ ๋ฆฌํด๋ฐ์ ๊ฒ์ด๋ผ๊ณ ์ ๋๋ค. number๋ฅผ Int๋ผ๊ณ ์ ์ธํ์ง ์์๋ ์์์ ์ธํ/์์ํ์ด Int๋ผ๊ณ ์ ์ํ๊ธฐ ๋๋ฌธ์ ํ์ ์ ์ถ๋ก ํ๋ค.
val square :(Int) -> (Int) = {number -> number*number}
fun main(){
println(square(12))
}
์ด๋ ๊ฒ ์ถ๋ ฅํด๋ณด๋ฉด 12์ ์ ๊ณฑ์ธ 144๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
๋ ๋ฒ์งธ๋ ์ด๋ฆ๊ณผ ๋์ด๊ฐ ๊ฐ์ด ์ถ๋ ฅ๋๋ ์์์ธ๋ฐ, ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ๊ฐ๊ฐ String๊ณผ Int๋ก ๋ฐ๊ณ String์ผ๋ก ๋ฆฌํดํ๋ ๋๋ค์์ด๋ค. ๋๋ค์์์๋ ํญ์ ๋ง์ง๋ง์ ์๋ ์ฝ๋ ์ค์ด ๋ฆฌํด๊ฐ์ด๋ค.
val nameAge : (String, Int) -> String = {name : String, age : Int ->
"my name is ${name} I'm ${age}"}
fun main(){
println(nameAge("gom",2))
}
์ถ๋ ฅํด๋ณด๋ฉด ์ ์์ ์ผ๋ก my name is gom I'm 2 ๊ฐ ๋์ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
2) ๋๋ค์๊ณผ ํ์ฅํจ์
ํ์ฅํจ์๋ "์ด ํด๋์ค๋ ์ฐธ ์ข์๋ฐ, ๋ช ๊ฐ๋ง ํ์ฅํ๊ณ ์ถ๋ค!" ๋ผ๋ ์๊ฐ์ด ๋ค ๋ ์ฌ์ฉํ๋ ํจ์์ด๋ค. ๋ค์ ์์๋ String ํด๋์ค์ ํ์ฅํจ์๋ฅผ ์ฌ์ฉํ ๋ชจ์ต์ด๋ค.
val pizzaIsGreat : String.() -> String = {this + "Pizza is the best."}
fun main(){
val a = "gom said "
val b = "joice said "
println(a.pizzaIsGreat())
println(b.pizzaIsGreat())
}
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
gom said Pizza is the best.
joice said Pizza is the best.
introduveMyself์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ด์ค์ผํ๋๋ฐ, ํ๋ผ๋ฏธํฐ๊ฐ Int๋ก ๋ฑ ํ ๊ฐ๋ค. ํ๋ผ๋ฏธํฐ๊ฐ ํ ๊ฐ ์ผ ๋๋ it์ด๋ผ๋ ์์ฝ์ด๋ก ์๋ต์ด ๊ฐ๋ฅํ๋ค.
fun extendString(name : String, age : Int) : String {
val introduceMySelf : String.(Int) -> String = {"I'm ${this} and ${it} years old."}
return name.introduceMySelf(age)
}
fun main(){
println(extendString("min", 27))
}
3) ๋๋ค์ ๋ฆฌํด
๋๋ค๋ ๋ง์ง๋ง ํํ์์ด ๋ฆฌํด๊ฐ์ ์๋ฏธํ๋ค.
๋ค์์ ์ฑ์ ์ ์ฐ์ถํ๋ ๋๋ค์์ด๋ค. ์ธํํ๋ผ๋ฏธํฐ๋ ์ฌ๋ฌ๊ฐ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ํญ์ ์๊ดํธ๋ฅผ ์จ์ค์ผํ๊ณ , ๋ฆฌํดํ๋ ๊ฐ์ ํ์ ์ด ํ๊ฐ๋ผ์ ์๊ดํธ๊ฐ ํ์์๋ค.
val calculateGrade : (Int) -> String = {
when(it){
in 0..40 -> "fail"
in 41..70 -> "pass"
in 71..100 -> "perfect"
else -> "Error"
}
}
fun main(){
println(calculateGrade(97))
}
4) ๋๋ค๋ฅผ ํํํ๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ
์๋ ์ฝ๋์์ invokeLambda๋ผ๋ ํจ์๋ Boolean์ ๋ฆฌํดํ๋ค. ํ๋ผ๋ฏธํฐ๋ก ๋ฃ๋ ๋๋ค์์ ์ฌ์ฉํ์ฌ ๊ทธ ๋๋ค์ 5.234๋ฅผ ๋ฃ์ด์ ๋ฆฌํด์ด ๋๋ Boolean๊ฐ์ invokeLambda์ ๋ฆฌํด๊ฐ์ผ๋ก ์ผ๊ฒ ๋ค๋ ๋ป์ด๋ค.
fun invokeLambda(lambda : (Double) -> Boolean) : Boolean {
return lambda(5.234)
}
fun main(){
val lambda = {number : Double ->
number == 4.3213
}
println(invokeLambda(lambda))
println(invokeLambda({it > 3.22}))
println(invokeLambda{it > 3.22})
}
2. ๋ฐ์ดํฐ ํด๋์ค
- pojo ํด๋์ค : ๋ฉ์๋๊ฐ ์์ด์ ํน์ ํ๋์ ํ๋ ํด๋์ค๋ผ๊ธฐ ๋ณด๋จ ๋น์ด์๋ ํ ์ญํ ์ ํ๋ ํด๋์ค.
- ์ด pojo ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์๋ฐ์์ ์ง์ ์ผ์ผํ ์จ์ค์ผ ํ์ง๋ง ์ฝํ๋ฆฐ์์ ์ธ๋ฐ์๋ ์ฝ๋๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ฐ์ดํฐ ํด๋์ค๋ฅผ ์ด๋ค. ๋ฐ์ดํฐ ํด๋์ค๋ ๋ง ๊ทธ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ํด๋์ค์ด๋ค.
๊ฐ๋จํ ์์๋ก ๋ฐ์ดํฐ ํด๋์ค๋ฅผ ์ดํดํด๋ณด์!
data class Ticket(val companyName : String, val name : String, var date : String, var seatNumber : Int)
๋นํ๊ธฐ ํฐ์ผ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๋ ๋ฐ์ดํฐ ํด๋์ค๋ ํญ๊ณต์ฌ, ์ด๋ฆ, ๋ ์ง, ์ข์ ๋ฒํธ๋ฅผ ๋ด์ ์ด๋ ๊ฒ ๋ง๋ค ์ ์๋ค. ๊ฐ๊ฐ์ ๋ณ์๋ ๋ง์น ํด๋์ค์ property์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ณ , constructor๋ ๋ง๋ค์ด์ก๋ค. ๋ฟ๋ง ์๋๋ผ ๋ฐ์ดํฐ ํด๋์ค๋ฅผ ์ด์ฉํ๋ฉด toString(), hashCode(), equals(), copy() ๋ฑ์ด ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ค.
class TicketNomal(val companyName : String, val name : String, var date : String, var seatNumber : Int)
๊ทธ๋ฅ ํด๋์ค๋ ์ด๋ ๊ฒ ๋ง๋ค ์ ์๋ค. ๋ฐ์ดํฐ ํด๋์ค์ ๊ทธ๋ฅ ํด๋์ค์ ๋๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ์ถ๋ ฅํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
fun main(){
val ticketA = Ticket("KoreanAir", "gom", "2022-01-31", 3)
val ticketB = TicketNomal("KoreanAir", "gom", "2022-01-31", 3)
println(ticketA)
println(ticketB)
}
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค. ๋ฐ์ดํฐ ํด๋์ค๋ฅผ ์ถ๋ ฅํ๋ฉด ๊ฐ์ฒด์ ๋ด์ฉ์ด ๋์ค๊ณ , ๊ทธ๋ฅ ํด๋์ค๋ฅผ ์ถ๋ ฅํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ด ๋์จ๋ค. ์ด์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ๋ฃ์ผ๋ฉด ๋ฐ๋ก ์ถ๋ ฅํด์ฃผ๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํ๋ค.
Ticket(companyName=KoreanAir, name=gom, date=2022-01-31, seatNumber=3)
com.example.kotlin_1.TicketNomal@6fadae5d
3. ๋๋ฐ์ ๊ฐ์ฒด
- Companion object ๊ฐ ํ๋ ๊ฒ์ ์๋ฐ์ static ๋์ ์ ์ฌ์ฉ๋๋๊ฒ์ผ๋ก, ์ ์ ๋ฉ์๋๋ ์ ์ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋ ์ด๋ค.
- private property๋ method๋ฅผ ์ฝ์ด์ฌ ์ ์๊ฒ ํ๋ ์ญํ ์ ํ๋ค.
์ฑ ์ ์ผ๋ จ๋ฒํธ์ ์ ๋ชฉ์ ๊ฐ์ง Book ํจ์๋ฅผ private๋ก ๋ง๋ค์๋ค. ๋ง์ฝ ๊ทธ๋ฅ val book = Book()์ผ๋ก ์ ๊ทผํ๋ค๋ฉด Cannot access '<init>': it is private in 'Book' ์ด๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋จ๊ณ , ์๋ฌ๊ฐ ์๊ธด๋ค. ์์ companion object๋ฅผ ๋ง๋ค๋ฉด ์ ์์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ค. ์ฆ, ์๋ฐ์ static ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
class Book private constructor(val id : Int, val name : String){
companion object{
fun create() = Book(0, " animal farm")
}
}
fun main(){
val book = Book.create()
println("${book.id} ${book.name}")
}
Companion object๋ ์ด๋ฆ์ ์ง์ ์์๊ณ , ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๋ ๊ฒ ์ญ์ ๊ฐ๋ฅํ๋ค.
class Book private constructor(val id : Int, val name : String){
companion object BookFactory : IdProvider{
override fun getId() : Int{
return 444
}
val myBook = "new book"
fun create() = Book(getId(), myBook)
}
}
interface IdProvider{
fun getId() : Int
}
fun main(){
val book = Book.create()
val bookId = Book.BookFactory.getId()
println("${book.id} ${book.name}")
}
4. ๋ชฉ์ ์ด
object์ ๋ค๋ฅธ ํด๋์ค์์ ๋ค๋ฅธ ์ ์ ๋ฑ ํ ๋ฒ ๋ง๋ค์ด์ง๋ค๋ ์ ์ด๋ค. ์ฆ, Singleton Pattern์ ์ ์ฉํ ๊ฒ์ด๋ค. ์๋ ์์์์ CarFactory๋ ํ ๋ฒ ์คํ๋ ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ค์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ถํ์ํ๊ฒ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ฉ๋์ง ์๋๋ค.
object CarFactory{
val cars = mutableListOf<Car>()
fun makeCar(horsePower: Int) : Car {
val car = Car(horsePower)
cars.add(car)
return car
}
}
data class Car(val horsePower : Int)
fun main(){
val car = CarFactory.makeCar(10)
val car2 = CarFactory.makeCar(200)
println(car)
println(car2)
println(CarFactory.cars.size.toString())
}
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Car(horsePower=10)
Car(horsePower=200)
2
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 220204 (0) | 2022.02.04 |
---|---|
[TIL] 220203 (0) | 2022.02.03 |
[TIL] 220128 (0) | 2022.01.28 |
[TIL] 220127 (0) | 2022.01.27 |
[TIL] 220125 (0) | 2022.01.25 |