๐ข ๋ฌธ๋ฒ - ์์ฑ์ค
๐ํจ์
๊ตฌ๋ฌธ์ (Statement)
fun sum(a: Int, b: Int): Int {
return a + b
}
ํํ์ (Expresstion)
fun sum(a: Int, b: Int) = a + b
fun max(a: Int, b: Int) = if (a>b) a else b
๐์๋ฐ์์ ์ฐจ์ด์
- ๋ฉ์๋ ํ์๋ก ๋ฉ์๋๋ช
์์
fun
์ ์ ๋ ฅ - parameter ํ๊ธฐ ๊ธฐ์กด
๋ฐ์ดํฐํ์ ๊ฐ์ฒด๋ช
์์์ธ์: ๋ฐ์ดํฐ ํ์
๋ก ๋ณ๊ฒฝ - ๋ฆฌํดํ ํ๊ธฐ๊ฐ ๊ธฐ์กด
๋ฉ์๋๋ช ์ ' ๋ฆฌํดํ '
์์(ํ๋ผ๋ฉํฐ) ์ฐ์ธก ์ ' : ๋ฆฌํดํ '
์ผ๋ก ๋ณ๊ฒฝ
- ์๋ฃํ ํ๊ธฐ๊ฐ
int
์์Int
๋ก ๋ณ๊ฒฝ - void์ ๊ฒฝ์ฐ void(Unit)์๋ต ๊ฐ๋ฅ.
- ๊ธฐ๋ณธ ์ ๊ทผ์ ํ์๊ฐ ๊ธฐ์กด
defalut
์์public
๋ก ๋ณ๊ฒฝ
๐ Value, Variable(๋ณ์)์ ๋ฐ์ดํฐ ํ์
๐Value, Variable(๋ณ์)
var d: String = "์ฒ์์ด์ ๋ง์ง๋ง ์ด๊ธฐํ"
val b = 2L // L -> shortํ์
๊ณผ ๊ตฌ๋ถ ์ง๊ธฐ
val c = 3.14f // f -> Double๊ณผ ๊ตฌ๋ถ ์ง๊ธฐ
val d: String // ์ ์ธ
d = "null๊ฐ์ด ์๋๋๋ก ์ด๊ธฐํ ์งํ"
val a: Int = 1 // ์์ฑ
val e: String? // ? -> null๊ฐ ์กด์ฌ ๊ฐ๋ฅ
var ary = ArrayList<Int>(1)
ary!!.add(99)
val boolNull: boolean? = null
๐์๋ฐ์์ ์ฐจ์ด์
- final(๊ณ ์ ๊ฐ)์ val๋ก ํ์ํ๊ณ final์ด ์๋๊ฒฝ์ฐ var๋ก ํ์
- ํ์ ์ถ๋ก ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์๋ฃํ ์๋ต๊ฐ๋ฅ
- ๊ธฐ๋ณธ์ ์ผ๋ก null๊ฐ์ด ๋ค์ด๊ฐ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅ
- null๊ฐ์ ๋ฃ๊ณ ์ถ์ ๊ฒฝ์ฐ ์๋ฃํ ์ฐ์ธก์ '?'๋ฅผ ๋ถ์ด๊ธฐ
- ' ? '์ด ๋๊ฐ ์กด์ฌํ๊ธฐ๋ผ๋ฉด ๋ฐ๋๋ก ๋๊ฐ ๋ถ๊ฐ๋ฅํ๊ธฐ๋ ๋ณ์๋ช ์ฐ์ธก์' !! '๋ก ํ๊ธฐ
- ' ? '์ด ๋ถ์ผ๋ฉด null๊ฐ์ด ๋ค์ด์์๋ skip๊ฐ๋ฅ
๐๋ฐ์ดํฐ ํ์ (๊ธฐ๋ณธํ ๋ณ์)
๋ถ๋ฅ | ํค์๋ | ํฌ๊ธฐ | ์ต์ ~ ์ต๋ |
---|---|---|---|
๋ ผ๋ฆฌํ | Boolean | 1 bit | true,false |
๋ฌธ์ํ | Char | 2 byte | 0 ~ 65,535 |
์ ์ํ | Long | 8 byte | -2^63 ~ 2^63 -1 |
Int | 4 byte | -2^31 ~ 2^31 -1 | |
Short | 2 byte | -2^15 ~ 2^15 -1 (-32,768 ~ 32,767) | |
Byte | 1 byte | -2^7 ~ 2^7-1 (-128 ~ 127) | |
์ค์ํ | Float | 4 byte | ์ฝ 1.4E-45 - 3.4E+38 |
Double | 8 byte | ์ฝ 4.9E-324 - 1.7E+308 | |
๐ Template
var name = "hyo-sang"
var lastName = "Seong"
println("my name is ${name}lastName")
println("my name is ${name + lastName}.")
println("my name is ${name}\${lastName}.")
println("my name is ${name}\\lastName")
๐์๋ฐ์์ ์ฐจ์ด์
- ' + '๊ฐ ์๋ ' ${๋ด์ฉ} ' ์ ์ฌ์ฉ '{ }'๋ ๋์ด์ฐ๊ธฐ ๊ตฌ๋ถ ์ฉ๋
- ๋ณ์ ๋๊ฐ๊ฐ ์ด์ด์ง ๊ฒฝ์ฐ ' ${ } '์์์ + ์ฌ์ฉ ๊ฐ๋ฅ
- ' $๋ณ์๋ช '๋ค์ ' \ '๋ฅผ ๋ถ์ด๋ฉด ๋ณ์๋ช ๋ค๋ก๋ ๋ฌธ์์ทจ๊ธ
- ' $๋ณ์๋ช '๋ค์ ' \ '๋ฅผ ๋ฌธ์๋ก ๋ฃ๊ณ ์ถ์์, ' ์ญ์ฌ๋์ฌ ๋๋ฒ '์ ๋ ฅ
๐ ๋ฐ๋ณต๋ฌธ
๐for, while๋ฌธ
for (๋ณ์ in ์์..๋ step ์ฆ๊ฐ๋) {
}
for (๋ณ์ in ์์ until ๋){ // ๋ ๋ฏธํฌํจ
}
for (๋ณ์ in ๋ down ์์ ) {
}
for (๋ณ์ in ๋ฐฐ์ด๋ช
.indices) { //๋ฐฐ์ด์์ ํ๋ฒ์ ์ถ๋ ฅ
}
for (๋ณ์ in ๋ฐฐ์ด๋ช
) { //๋ฐฐ์ด์์ ํ๋์ฉ ์ถ๋ ฅ
}
for ((index : index, name : String) in name.indeces.withIndex()) {
}
๐์๋ฐ์์ ์ฐจ์ด์
- ํ๊ธฐ๋ณ๊ฒฝ ' .๊ธธ์ด ' ์์ ' .indices ' ๋๋ ์๋ต
๐when๋ฌธ
๊ตฌ๋ฌธ์ (Expresstion)
var jumsu : Int = (count / 10) * 10
when(jumsu) {
100 -> print("1์์")
90, 80, 70 -> print("2์์") //์ผ๋ถ ํญ๋ชฉ์ง์
in 69..60 -> print("3์์") //๋ฒ์์ง์
!in 10..0 -> print("ํต๊ณผ")
!is Int -> print("์ ์๊ฐ ์๋")
}
ํํ์ (Statement)
var b : Int = when(scope) {
1 -> 1
2 -> 2
else -> 3
}
๐์๋ฐ์์ ์ฐจ์ด์
- ํ๊ธฐ๋ณ๊ฒฝ
switch
์์when
์ผ๋ก - ํ๊ธฐ๋ณ๊ฒฝ
:
์์->
๋ก - break ์๋ต
,
๋ฅผ ์ด์ฉํด์ ์ผ๋ถ ํญ๋ชฉ์ ์ง์ ๊ฐ๋ฅin ์์์ซ์. .๋ง์ง๋ง ์ซ์
// ๋ฒ์์ง์ ๊ฐ๋ฅ!in
// ์ ํญ๋ชฉ์ ๋ถ์ !is
// ๋ ผ๋ฆฌํ๋ณ- ํํ์ ์ฌ์ฉ ๊ฐ๋ฅ
- ํํ์์ ๊ฒฝ์ฐ, ์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ก else ์ ๋ ฅ ํ์
- ํ๊ธฐ๋ณ๊ฒฝ
default
์์else
๋ก
๐ Array(๋ฐฐ์ด) and List
๐Array(๋ฐฐ์ด)
1์ฐจ์ ๋ฐฐ์ด
var one = Array<Int>(4,{0})
val array = arrayOf(1,2,3)
val arrayOf = arrayOf(1, "d", 3.14f)
one[0] = 10
one[1] = 20
2์ฐจ์ ๋ฐฐ์ด
var arr1 = Array(2){Array(3){i->(5)}} //2ํ 3์ด ์ด๊ธฐํ๊ฐ 5
var arr2 = arrayOf( arrayOf(5,5,5), arrayOf(5,5,5) ) //์์ ๋์ผ
val arr3 = Array(2){ i -> Array(3){ j ->(i*3) + (j+1)}} // [{1,2,3},{4,5,6}]
var count2 = 0
for((count1, i) in arr1.indices.withIndex()){
for(j in arr1[i]){
println("${count1}ํ ${count2}์ด์ ๊ฐ์ $j ์
๋๋ค.")
count2++
}
if(count2 == arr1[i].size){
count2 = 0;
}
}
๐์๋ฐ์์ ์ฐจ์ด์
val๋ฅผ ์ฐ๋ ์ด์ ๋ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๋ฏ๋ก
1์ฐจ์ ๋ฐฐ์ด
- var ๋ฐฐ์ด๋ช = Array<๋ฐ์ดํฐ ํ์ >(๊ฐฏ์, {์ด๊ธฐํ๊ฐ})
- var ๋ฐฐ์ด๋ช : IntArray = intArrayOf(1,2,3) //๊ฐ์ ๋ฐ๋ก ์ ๋ ฅ
- ๋ฐ์ดํฐ ํ์ ํผ์ฉ ๊ฐ๋ฅ
- ๋ฐฐ์ด๋ช [์ธ๋ฑ์ค] = ๊ฐ ์ ๋ ฅ
2์ฐจ์ ๋ฐฐ์ด
- var ๋ฐฐ์ด๋ช = Array(ํ ๊ฐฏ์){ Array(์ด ๊ฐฏ์), { _->(์ด๊ธฐํ ๊ฐ)} }
- 1์ฐจ์ ๋ฐฐ์ด์ "์ด๊ธฐํ๊ฐ"์๋ฆฌ์ " 1ํ์ ๋ํ arrayOf(๊ฐ), 2ํ์ ๋ํ arrayOf(๊ฐ) "๋ฅผ ๋ฃ์
- ์๋ฐ์ฝ๋๋ก ๋ฐ๊ฟ์ ์ดํด ํ ์์
- java์ ํ์ฅํ for๋ฌธ์ผ๋ก ๊ฐ์ ์ถ๋ ฅํ๋ ๊ฒ๊ณผ ๊ฐ์
๐List
List
val list1 = listOf(1,"d",11L)
MutableList(์์ ๊ฐ๋ฅ)
val arraList1 = arrayListOf(1,"d",3)
๐List์ mutableList์ ์ฐจ์ด์
mutableList
์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ArrayList๋mutableList
์ set๋ฉ์๋์ ์ํด์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ List์ ๋ค๋ฅด๊ฒ ์ฐ๊ธฐ๋ ๊ฐ๋ฅ
๐ Nullable / NonNull
var nullName : String? = null
val nullNameInUC = nullName.?toUpperCase()
val name = "joyce"
val lastName : String? = null
var fullName = name + (lastName ?: "Hong")
val email: String? = "tjdgytkd!naver.com"
email?.let{
println("my email is $email")
}
}
fun igonoreNulls(str: String?){
val mNotNull: String = str!!
๐์๋ฐ์์ ์ฐจ์ด์
- ์๋ฃํ๋ค์ ' ? '์ด ๋ถ์ง ์์ ๊ฒฝ์ฐ, null ์ ๋ ฅ์ด ๋ถ๊ฐ๋ฅ
- ๋ฉ์๋ ์ฌ์ฉ์์๋ ๊ฐ์ฒด๋ช ๋ค์ ' ? '์ ๋ถ์ด๋ฉด null๊ฐ์ผ์, Skip
- " ๊ฐ์ฒด๋ช ?: "๋ null๊ฐ์ผ๋ ์คํ
- " ๊ฐ์ฒด๋ช ?.let "๋ null๊ฐ์ด ์๋๋ ์คํ
- ' !! '๋ NonNull๋ก ์ ์ธ
๐ Class
๐์์ฑ์
class Human (var name : String){
init {
println("create Human class")
}
}
fun main() {
val human1 = Human( "name1" )
val human2 = Human( "name2")
}
๐์๋ฐ์์ ์ฐจ์ด์
- ํด๋์ค๋ฅผ ์์ฑํ ๋ ์์ฑ์๋ ๊ฐ์ด ์์ฑ๊ฐ๋ฅ
- ์ฃผ ์์ฑ์์ ๋ถ ์์ฑ์๋ก ๋ถ๋ฅ
- ๋ถ ์์ฑ์๋ ' constructor '๋ก ์์ฑ
- ์ฃผ ์์ฑ์์ ์ฝ๋๋ธ๋ญ์ ' init{ ๋ด์ฉ } ' ๋ก ์์ฑ
- ์ธ์คํด์ค ์์ฑ์ Expression๋ก ์์ฑ์๊ฐ ๋ฐ๋ก ์คํ
๐์ค๋ฒ๋ก๋ฉ
class Human(){
constructor(name: String, age: Int ): this() {
println("my name: $name \nmy age: $age")
}
constructor(name2: Int): this(){
}
}
fun main() {
val human3 = Human(29)
}
๐์๋ฐ์์ ์ฐจ์ด์
- ์ค๋ฒ๋ก๋ฉ์ ์ํด์๋ ํด๋์ค๋ช ์์ ๋น์์ฑ์ ๋ฃ๊ธฐ
- ์ค๋ฒ๋ก๋ฉํ ์์ฑ์ ์์
: this()
๋ฅผ ๋ถ์ฌ์ ๋ถ๋ชจ์์ฑ์ ํธ์ถ์ด ํ์
๐์ค๋ฒ๋ผ์ด๋ฉ
open class Human(){
open fun song(){
println("lalala")
}
}
class Korean : Human(){
override fun song(){
println("๋ผ๋ผ๋ผ")
}
}
๐์๋ฐ์์ ์ฐจ์ด์
Kotlin์์์ class๋ final์ด๋ฏ๋ก ์ค๋ฒ๋ผ์ด๋ฉ์ ์ํด์๋
๋ชจํฐ๋ธ ๋์์ ์์
open
์ ๊ธฐ์
๐Lamda
๊ธฐ๋ณธํ
val lamdaName = {argumentList -> codeBody}
val calculater = {number : Int -> number*number}
val nameAge = {name : String, age : Int -> "my name is $name I'm $age"}
fun main(){
println(calculater(12))
println(nameAge("hyosang", 29))
}
ํ์ฅํ
fun main(){
val a = "joyce said"
println(a.pizzaGreat())
println(extnedsString(hyo-sang, 29))
println(caculater(97))
}
val pizzaGreat : String.() -> Stirng = {
this + "Pizza is the best!"
}
val extendsString(name : String, age : Int) {
val introduceMyself : String.(Int) -> String = { "I am $this and $it years old" }
return name.introduceMyself(age)
}
val calculater((Int) -> String){
when(it){
in 0..59 : "fail"
in 60..89 : "pass"
in 90..100 : "bonus point"
else : "Error"
}
}
๋๋ค์ parameter๋ก ๋ฃ๊ธฐ
fun main(){
val lamda1 = {number : Double -> number == 4.3213}
println(invokeLamda(lamda1)) // true
println(invokeLamda { it > 3.22 }) // false
}
fun invokeLamda(lamda : (Double) -> Boolean) : Boolean {
return lamda(5.2343)
}
๐ํน์ง
- ๋ฉ์๋๋ก ์ฌ์ฉ๊ฐ๋ฅ
- ์ธ์๊ฐ ํ๋์ธ ๊ฒฝ์ฐ
it
์ผ๋ก ํ๊ธฐ ๊ฐ๋ฅ - return์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ฉ์๋ ์ธ์๋ก ์ฌ์ฉ๊ฐ๋ฅ
๐ DataClass
data class Ticket(val companyName: String, val name: String, var date: String, var seatNumber : Int)
// toString(), hashCode(), equals(), copy()
class TicketNormal(val companyName: String, val name: String, var date: String, var seatNumber : Int)
fun main(){
val ticketA = Ticket("koreanAir", "hyosang", "2020-02-16", 14)
val ticketB = TicketNormal("koreanAir", "hyosang", "2020-02-16", 14)
println(ticketA) // Ticket(companyName=koreanAir, name=hyosang, date=2020-02-16, seatNumber=14)
println(ticketB) // com.example.myapplication.TicketNormal@6fadae5d
}
๐class์ data Class ์ฐจ์ด์
- toString(), hashCode(), equals(), copy() ๋ฉ์๋๋ฅผ ์๋์์ฑ
- ํด๋์ค๋ช ์ printํ ๊ฒฝ์ฐ, haskCode๊ฐ ์๋ ์ธ์๊ฐ์ ๊ทธ๋๋ก ์ถ๋ ฅ
- ๋ด๋ถclass์ ์ฌ๋ฌ data class๋ฅผ ๋ฃ์ผ๋ฉด ๊ด๋ฆฌ๊ฐ ์ฉ์ดํจ
๐ Companion object
interface IdProvider {
fun getId(): Int
}
class Book private constructor(val id: Int, val name: String) {
companion object BookFactory : IdProvider {
override fun getId(): Int {
return 444
}
var myBook = "new book"
fun create() = Book(getId(), myBook)
}
}
fun main() {
val bookId = Book.getId()
val book = Book.create()
println("${bookId}${book.name}") // 444new book
}
๐ํน์ง
- java์ static๊ณผ ๋น์ทํ ์กด์ฌ
- ๋ชจ๋ ์ธ์คํด์ค์ ๊ณต์ ํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ถ์๋ ์ฌ์ฉ
- ํด๋์ค๋น ํ๋๋ง ์ฌ์ฉ
๐ Object
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)
var car2 = CarFactory.makeCar(200)
println(car) // Car(horsePower=10)
println(car2) // Car(horsePower=200)
println(CarFactory.cars.size.toString()) // 2
}
๐ํน์ง
- java์ SingleThon๊ณผ ๋น์ทํ ์กด์ฌ
- ๊ฐ์ฒด๊ฐ ํ๋ฒ๋ง ์์ฑ๋์ด ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์์
๐ Scope Function (apply, with, let, also, run)
๐ apply
Kotlin
val person = Person().apply{
firstname = "Fast"
lastName = "Campus"
}
Java
Person person = new Person();
person.firstname = "fast"
person.lastName = "Campus"
๐ํน์ง
- ์ธ์คํด์ค์์ฑ ํ ์ด๊ธฐํ๋ฅผ ์ํฌ๋ ์ ์ฉํจ
๐ Also
Kotlin
Random().nextInt(100).also{ //์ธ์๊ฐ ํ๋์ด๋ฏ๋ก ' it '์ผ๋ก ํ๊ธฐํ์ฌ ๋ค์ด๋ ํธ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
print("getRandomInt() generated value $it")
}
Random().nextInt(100).also{
print(value -> "getRandomInt() generated value $value")
}
Java
int value = Random().nextInt(100);
System.out.print(value);
๐ํน์ง
- ๋ฐํ๊ฐ์ ๊ฐ์ฑ์ ๋ด์์ ๋๋ค์์ผ๋ก ๊ฐ๊ณต ํ ๋ค์ ๋ฐํ
- ์ฌ์ฉ์ฒ : ์ ํจ์ฑ ํ์ธ ๋ฐ ๋๋ฒ๊น
์ ์ด์ฉ์์ง๊ฐ ์์.
๐ let
Kotlin
val number: Int?
val sumNumber = number?.let {
"${sum(10, it)}"
}.orEmpty()
Java
Integer number= null;
String sumNumberStr= null;
if (number != null){
sumNumberStr = " " + sum(10, number);
}
๐ํน์ง
- null์ด ์๋ ๊ฒฝ์ฐ ๋๋ค์์ผ๋ก ๊ฐ๊ณตํ ๋ ์ฌ์ฉ
- null์ธ ๊ฒฝ์ฐ๋ ์คํ์ ์ํ์ง๋ง
.orEmty
๋ฅผ ์ด์ฉํ๋ฉด ๋น๊ฐ์ผ๋ก ์ฒ๋ฆฌ๊ฐ๋ฅ
๐ with
Kotlin
val person = Person()
with (person) {
work()
sleep()
println(age)
}
Java
Person person = new person();
person.work();
person.sleep();
System.out.print(person.age);
๐ํน์ง
- ํด๋์ค๋ช
์
with ์ธ์๊ฐ
์ ๋ฃ์์ผ๋ก์จ ๋ฉ์๋๋ช ๋ง ๊ธฐ์ ํ์ฌ ๋ฉ์๋๋ฅผ ์คํ๊ฐ๋ฅ
๐ run
Kotlin
val result = service.run{
port = 8080
query()
}
Java
service.prot = 8000
Result result = service.query()
๐ํน์ง
- ์ด๋ค๊ฐ์ ๊ณ์ฐํ ํ์๊ฐ ์๊ฑฐ๋ ๊ฐ์ฒด๊ตฌ์ฑ(์ด๊ธฐํ)๊ณผ ๊ณ์ฐ๊ฒฐ๊ณผ๋ฅผ ํ๋ฒ์ ์ฒ๋ฆฌํ ๋
- when๊ณผ ๋ค๋ฅธ์ ์ ํ์ฅํจ์๋ก ์ฌ์ฉ๊ฐ๋ฅ
๐ lateinit, lazy init
๐ lateinit
lateinit ๋ฏธ์ฌ์ฉ
var nullableNumber : Int? = null
nullableNumber?.add()
lateinit ์ฌ์ฉ
lateinit var lateinitNumber: Int
lateinitNumber = 10
lateinitNumber.add()
๐ํน์ง
val
๋ ๊ณ ์ ๊ฐ์ด๋ผ ์์ฝ ์ ์ธ์ ํ ์ด์ ๊ฐ ์์ผ๋ฏ๋กvar
์๋ง ์ฌ์ฉnullํ์ฉ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธํ ๋ null๊ฐ์ ์ ๋ ฅํ์ง ์์ผ๋ฏ๋ก
NullSafeํ ์ฝ๋ฉ์ ์ฉ์ดํจ
๐ lazy init
val lazyNumber : Int by lazy{
100 // ์ฌ์ฉํ๊ธฐ์ ๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น์ด ๋์ง ์์
lazyNumber.add()
//100 ํ ๋น๋
}
๐ํน์ง
val
๊ฐ์ฒด์ ์ธ์ ๋๊ธฐ์ํฌ ์ ์์- ์ฌ์ฉํ๊ธฐ์ ๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น์ด ์๋
- view์์ฑ๋ค์ ๋ฏธ๋ฆฌ ๊ฑธ์ด ๋์๋ ์ฉ์ดํจ
'Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ช ์ฃผ๊ธฐ (0) | 2021.09.27 |
---|