์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- ์๋๋ก์ด๋
- SQL
- MySQL
- ๊ธฐ์ ๋ฉด์
- ์๋ฃ๊ตฌ์กฐ
- Android
- ์นด์นด์ค์ฝํ
- ์คํฐ๋
- ํผ๊ณต๋จ
- doitandroid
- ์ค๋ธ์
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ํผ๊ณต์ฑ๋ฆฐ์ง
- ์ ์ฒ๊ธฐ
- CS
- Til
- groupby
- ์ธํ๋ฐ
- ํผ๊ณตํ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๋ฐ
- select
- java
- Kotlin
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
- ์ฝํ๋ฆฐ
- ์๋๋ก์ด๋์คํ๋์ค
- join
- ์๊ณ ๋ฆฌ์ฆ
- ์ฝํ
- Today
- Total
Welcome! Everything is fine.
[TIL] 220128 ๋ณธ๋ฌธ
๐ป Today I Leaned...
๐ ์ฝํ๋ฆฐ 3๊ฐ์ผ๋ก ๋๋ด๊ธฐ - 1ํธ ๊ธฐ๋ณธ๋ฌธ๋ฒ
์ด์ ๊ณผ ์ด์ด์ง๋ ์ ๋ฆฌ๊ธ๐
5. ๋ฐฐ์ด(Array)๊ณผ ๋ฆฌ์คํธ(list)
1) Array
array๋ ๊ธฐ๋ณธ์ ์ผ๋ก Mutable์ด๋ฉฐ, ์ ํด์ ธ ์๋ ์ฌ์ด์ฆ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ด์ฆ๋ง ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค. ์๋ ์ฝ๋๋ array์ 0๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ 3์ผ๋ก ๋ณ๊ฒฝํ ๊ฒ์ด๋ค. array๋ arrayOf๋ก ์ด๊ธฐํ ํ๋ค.
fun array(){
val array = arrayOf(1, 2, 3)
val array2 = arrayOf(1, "a", 3.4f)
array[0] = 3
}
2) list
list๋ ์์ ์ด ๋ถ๊ฐ๋ฅํ (immutable) list์ ์์ ์ด ๊ฐ๋ฅํ Mutable list ๋ก ๋๋๋ค. list๋ listOf๋ก ์ด๊ธฐํ ํ๋ค. list๋ array์ ๋ค๋ฅด๊ฒ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ์์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. get์ ์ด์ฉํ์ฌ ๊ฐ์ ๊ฐ์ ธ์จ ๋ค ๋ค๋ฅธ ๋ณ์์ ๋ฃ์ ์ ์์ง๋ง ์ง์ ์ ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.
fun array(){
// list
val list = listOf(1, 2, 3)
val list2 = listOf(1, "a", 3.4f)
list[0] = 3 // ์๋ฌ
var result = list.get(0)
}
Mutable list๋ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์๊ณ , ๊ฐ์ ๋ณ๊ฒฝ ํ ์๋ ์๋ค. ์๋ ์ฝ๋๋ Mutable list์ ๊ฐ์ฅ ๋ํ์ ์ธ arrayList๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ์ถ๊ฐํ ๋ชจ์ต์ด๋ค. var์ val๋ก ๋ฐ๊ฟ๋ ๋๋๋ฐ, ๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ฉด val๋ก ํ๋ฉด ์๋๋ค๊ณ ์๊ฐํ ์๋ ์๋ค. ๊ทธ๋ฌ๋ arrayList์ ์ฃผ์๊ฐ์ ๋ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ val์ ์ฌ์ฉํด๋ ์๊ด์๋ค. ๋จ, ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํด์ ์ฃผ์๊ฐ์ด ๋ฐ๋ ๊ฒฝ์ฐ์๋ val์ ์ฌ์ฉํ ์ ์๋ค.
fun array(){
// Mutable list
var arrayList = arrayListOf<Int>()
arrayList.add(10)
arrayList.add(20)
}
6. For / While
1) For
in ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ๋ฐ๋ณต ์กฐ๊ฑด๋ฌธ์ ์ด๋ค. ์ฒซ ๋ฒ์งธ for๋ฌธ์ ๋ณด๋ฉด students ์์ ์๋ ์์๋ค์ ํ๋์ฉ ๋ฐ๋ณตํ์ฌ ์ถ๋ ฅํ๋ค. ๋ ๋ฒ์งธ for๋ฌธ์ 1๋ถํฐ 10๊น์ง 2๊ฐ์ฉ ๊ฑด๋๋ฐ๋ฉฐ(step) ๋ํ ํ ๊ทธ ํฉ๊ณ๋ฅผ ์ถ๋ ฅํ๋ค.
fun forAndWhile(){
val students = arrayListOf("gom", "cong", "rang", "bam")
for (name in students){
println("${name}")
}
var sum : Int = 0
for (i in 1..100 step 2){
sum += i
}
println(sum)
}
ํน์ until์ ์ด์ฉํ์ฌ ์ถ๋ ฅํ ์ ์๋๋ฐ, 1..100์ ์ผ์ ๋์ ๋ค๋ฅธ ์ ์ 100์ ํฌํจํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
var sum : Int = 0
for (i in 1 until 100){ //1..100๊ณผ ๋ค๋ฅธ์ ? 100์ ํฌํจํ์ง ์๋๋ค.
sum += i
}
println(sum)
downTo๋ฅผ ์ด์ฉํ์ฌ 10๋ถํฐ 1๊น์ง ์ญ์์ผ๋ก ์ถ๋ ฅํ ์๋ ์๋ค.
for (i in 10 downTo 1){
println(i)
}
index์ name์ ํจ๊ป ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ, withIndex()๋ฅผ ๋ค์ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค.
var index = 0
for ((index, name) in students.withIndex()){
println("${index + 1}๋ฒ์งธ ํ์ : ${name}")
index++
}
2) While
while๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ค.
var index = 0
while(index < 10){
println("current index : ${index}")
index++
}
7. Nullable / NonNull
์ฝํ๋ฆฐ์๋ Nullable์ NonNull ํ์ ์ด ์๋๋ฐ, ์๋ฐ์ ๋ค๋ฅธ ์ ์ค ํ๋๋ค. ์๋ฐ์์ NPE(Null Pointer Exception)๋ ์ปดํ์ผ ์์ ์์ ์ก์ ์ ์๊ณ , ๋ฐํ์์์๋ง ์กํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ฉ์ ๋ถํธํจ์ด ์์๋ค. ๋ฐ๋ผ์ ์ฝํ๋ฆฐ์์๋ ์ปดํ์ผ ์์ ์ ์ก์์ฃผ๋๋ฐ ?๋ฅผ ์ฌ์ฉํ๋ค.
์๋ ์ฝ๋์์ name์ ๊ธฐ๋ณธ์ ์ผ๋ก NonNull ํ์ ์ผ๋ก, ํ์ ์ ์๋ตํด๋ ๋๋ค.
nullName์ ? ์์ด ๊ทธ๋ฅ ์ฐ๋ฉด ์๋ฌ๊ฐ ๋์ง๋ง ?๋ฅผ ๋ถ์ด๋ฉด Nullable ํ์ ์ด ๋๊ธฐ ๋๋ฌธ์ null์ ๋ฃ๊ณ ์ถ๋ค๋ฉด ํ์ ๋ค์ ? ํ๋๋ง ์จ์ฃผ๋ฉด ๋๋ค.
fun nullcheck(){
var name : String = "gom" // NonNUll type
var nullName : String? = null // ? ํ๋๊ฐ ๋ถ์ฌ์ง๋ฉด Nullable type
}
์ด๋ค function์ ์ฌ์ฉํ๊ณ ์ถ์ ๋, ๋ณ์๊ฐ null์ด๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ์ฒดํฌ๋ฅผ ํด์ผํ๋ค. uppercase()ํจ์๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ์ ๋, nullNameInUpperCase ์์ ?๋ฅผ ๋ถ์ด๋ฉด nullName์ด Null์ผ ๋ Null์ ๋ฐํํ๊ณ , ์๋๋ฉด uppercase()๋ฅผ ์คํํ๋ค.
fun nullcheck(){
var name : String = "gom"
var nullName : String? = null
var nameInUpperCase : String = name.uppercase()
var nullNameInUpperCase : String? = nullName?.uppercase()
//Null์ด๋ฉด Null์ ๋ฐํํ๊ณ , ์๋๋ฉด uppercase() ์คํ
}
?: ๋ ์๋น์ค ์ฐ์ฐ์์ด๋ค. ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋ง์ฝ lastName์ด ์์ผ๋ฉด(Null์ด ์๋๋ฉด) ์ถ๋ ฅํ๊ณ , Null์ด๋ฉด "No lastName"์ ์ถ๋ ฅํ ์ ์๋ค. ๋ํดํธ ๊ฐ์ ์ค ๊ฒ์ด๋ค.
fun nullcheck(){
var name : String = "gom"
// ?: ์๋น์ค ์ฐ์ฐ์
val lastName : String? = null
val fullName = name + " " + (lastName?: "No lastName")
println(fullName)
}
? ์ ?: ๋งํผ์ด๋ ๋ง์ด ์ฐ์ด๋ !!๋ ์ปดํ์ผ๋ฌ์๊ฒ "์ด๊ฑฐ Null ์๋์ผ!!"๋ผ๊ณ ๋งํ๋ ๊ฒ์ด๋ค. ๋ง์ฝ null์ด ๋ค์ด๊ฐ๊ฒ ๋๋ฉด Null type Exception์ ๋ง๋ค์ด๋ด๊ธฐ ๋๋ฌธ์ ํ์คํ์ง ์์ ์ด์ ์ง์ํ๋ค. ์๋ ์ฝ๋์์ str์ด null์ด ์๋์ ํ์ ์์ผฐ๊ธฐ ๋๋ฌธ์ ๋ค์์ค์์ uppercase()๋ฅผ ์ธ ๋๋ ?๋ฅผ ๋ถ์ด์ง ์์๋ ๋๋ค.
fun ignoreNulls(str : String?){
val mNotNull : String = str!!
val upper :String = mNotNull.uppercase()
}
๋ง์ง๋ง์ผ๋ก let ํจ์๋ฅผ ์ด์ฉํ๋ฉด Not null์ธ ๊ฒฝ์ฐ, ํน์ ๊ตฌ๋ฌธ์ ์ด์ฉํ ์ ์๋ค. let์ ์์ ์ receiver ๊ฐ์ฒด๋ฅผ ๋๋ค์ ๋ด๋ถ๋ก ์ฎ๊ฒจ์ ์คํํ๋ ๊ตฌ๋ฌธ์ด๋ค. ์๋ ์ฝ๋์์ receiver ๊ฐ์ฒด์ธ email์ด null์ด ์๋๋ผ๋ฉด ๋๋ค์ ๋ด๋ถ๋ก ์ฎ๊ฒจ ์คํํ๋ค๋ ์๋ฆฌ๋ค.
fun ignoreNulls(str : String?){
val email : String? = "gom12@naver.com"
// email์ด Null์ด ์๋๋ฉด {}์์ ์๋ ๊ฑธ ํจ.
email?.let{
println("My email is ${email}")
}
}
8. Class
โ ์ฝํ๋ฆฐ์ด ์๋ฐ์ ๋ค๋ฅธ ์
- ๊ผญ ํ์ผ ์ด๋ฆ๊ณผ ํด๋์ค ์ด๋ฆ์ด ์ผ์นํ์ง ์์๋ ๋จ.
- ์ฌ๋ฌ ํด๋์ค๋ ํ ํ์ผ ์์ ๋ฃ์ ์ ์์.
์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด ํด๋์ค๋ฅผ ์ฐ๋ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ์ ์ ์๋ค. ์๋ฐ์์๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋ new ํค์๋๋ฅผ ์ด์ฉํ์ฌ ๋ง๋ค์์ง๋ง, ์ฝํ๋ฆฐ์์๋ ๊ทธ๋ฅ ์ฐ๋ฉด ๋๋ค.
class Human{
val name = "gom"
fun eatingCake(){
println("This is so YUMMMYYY!!!")
}
}
fun main(){
val human = Human()
human.eatingCake()
println("this human's name is ${human.name}")
}
๋ง์ฝ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ด๋ฆ์ ์ ์ํ๊ณ ์ถ๋ค๋ฉด ์์ฑ์๋ฅผ ์ด์ฉํ๋ฉด ๋๋๋ฐ, ์์ฑ์ ๋ธ๋ก์ ๋ฐ๋ก ๋ง๋๋ ์๋ฐ์ ๋ฌ๋ฆฌ ์ฝํ๋ฆฐ์์๋ ํด๋์ค ์ด๋ฆ ์์ constructor๋ฅผ ์ด์ฉํด ์ ์ด์ค๋ค. constructor๋ ์๋ต๊ฐ๋ฅํ๋ฉฐ, ์๋ ์์์ฒ๋ผ ๋ํดํธ ๊ฐ(์์์์ "Anonymous")๋ ์ค ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฃ์ง ์์๋ ๋๋ค.
class Human constructor(val name : String = "Anonymous"){
fun eatingCake(){
println("This is so YUMMMYYY!!!")
}
}
fun main(){
val human = Human("gom")
human.eatingCake()
println("this human's name is ${human.name}")
}
๋ํ ์์ฑ์์์ ์ฝ๋๋ธ๋ก์ ์คํํ๊ณ ์ถ๋ค๋ฉด init์ ์ฌ์ฉํ๋ค. init ์ญ์ ์ฃผ์์ฑ์์ ์ผ๋ถ๋ผ์ ์ ์ผ ๋จผ์ ์คํ๋๋ค. ์ฃผ ์์ฑ์๋ฟ๋ง ์๋๋ผ ๋ถ์์ฑ์๋ ์ฌ๋ฌ๊ฐ ๋ง๋ค ์ ์๋ค. (์๋ฐ์ ๊ฒฝ์ฐ ์ค๋ฒ๋ก๋ฉ์ ํด๋น) ๋ถ์์ฑ์๋ ํญ์ this๋ฅผ ์ฌ์ฉํด์ ์ฃผ์์ฑ์์ ์์์ ๋ฐ์์ผ ํ๋ค.
class Human constructor(val name : String = "Anonymous"){
// ๋ถ์์ฑ์
constructor(name : String, age : Int) : this(name){ // ์ฃผ์์ฑ์๊ฐ ์์ผ๋ฉด this(name)๊ฐ ํ์X
println("My name is ${name}, ${age}year's old.")
}
// ์์ฑ์์์ ์ฝ๋๋ธ๋ก์ ์คํํ๊ณ ์ถ๋ค๋ฉด init
init {
println("New Human has been born!!")
}
fun eatingCake(){
println("This is so YUMMMYYY!!!")
}
}
fun main(){
val human = Human("gom")
val human2 = Human("gom", 2)
human.eatingCake()
println("this human's name is ${human.name}")
}
์์์ ํด์ผํ๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊น? ์ฝํ๋ฆฐ์ ํด๋์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก final ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ class ์์ open ํค์๋๋ฅผ ๋ถ์ฌ์ฃผ์ด์ผ ์์์ ๋ฐ์ ์ ์๋ค. ์์์ ์๋ฐ์ ๊ฐ์ด ํ ๊ฐ๋ฐ์ ๋ชปํ๊ณ , ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ ๋๋ fun ์์ open ํค์๋๋ฅผ ๋ถ์ฌ์ฃผ์ด์ผ ํ๋ค.
open class Human constructor(val name : String = "Anonymous"){
init {
println("New Human has been born!!")
}
open fun singASong(){ // ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ ๋๋ open ์ ์ด์ค์ผ ํจ.
println("lalala")
}
}
class Korean : Human(){
override fun singASong(){
println("๋ผ๋ผ๋ผ")
}
}
fun main(){
korean.singASong()
}
๋ง์ฝ Human ํด๋์ค์ Korean ํด๋์ค์ singAsong()์ ๋ ๋ค ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด super.singAsong() ์ฒ๋ผ super๋ฅผ ์ด์ฉํด ์ฌ์ฉํ ์ ์๋ค.
open class Human constructor(val name : String = "Anonymous"){
init {
println("New Human has been born!!")
}
open fun singASong(){
println("lalala")
}
}
class Korean : Human(){
override fun singASong(){
super.singASong()
println("๋ผ๋ผ๋ผ")
println("My name is : ${name}")
}
}
fun main(){
val korean = Korean()
korean.singASong()
}
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 220203 (0) | 2022.02.03 |
---|---|
[TIL] 220130 (0) | 2022.01.30 |
[TIL] 220127 (0) | 2022.01.27 |
[TIL] 220125 (0) | 2022.01.25 |
[TIL] 220122 (0) | 2022.01.22 |