728x90
반응형
<main>
3) String Template
package com.example.bmkpractice
fun main(){
//3. String Template
//변수를 사용하고 싶으면 $표시를 사용해야 함
val name = "BMK"
val lastName = "Kim"
println("my name is ${name + lastName} I'm 23")
//주의사항 - 띄워쓰기 혹은 대괄호를 사용해서 변수를 구분해야됨
// println("my name is $nameI'm 23") -> $nameI까지 읽어버림
// println("my name is ${name}I'm 23")
// println("my name is $name I'm 23")
println("is this true? ${1==0}")
println("this is 2\$a")
}
<결과값>
1) 함수
//1.함수
fun helloWorld() : Unit{ // void = Unit 같은 개념, 굳이 사용안해도 됨
println("Hello World")
}
//아무것도 리턴하지 않는 경우에는 생략가능하지만, 리턴하는 경우 생략하면 안된다.
fun add(a: Int, b : Int) : Int{ //변수타입은 대문자로 사용해야 되고, 항상 뒤에 적어야 함
return a+b
}
2) var vs val
//2. val vs var
//val = value
fun hi(){
val a : Int = 10
var b : Int = 9
// a = 100 사용 불가
b = 100 // 사용 가능
val c = 100
var d = 100
var name : String = "BMK"
var name2 = "BMK" //: String 생략 가능
}
<main>
package com.example.bmkpractice
fun main(){
checkNum(1)
forAndWhile()
nullcheck()
}
4) 조건식
//4. 조건식
fun maxBy(a : Int, b : Int) : Int {
if(a>b){
return a
} else{
return b
}
}
fun maxBy2(a : Int, b : Int) = if(a>b) a else b
fun checkNum(score : Int) : Unit {
//Statment로 사용
when(score){
0 -> println("this is 0")
1 -> println("this is 1")
2,3 -> println("this is 2 or 3")
}
var b = when(score){
1 -> 1
2 -> 2
else -> 3
}
println("b : ${b}")
//Expression으로 사용, 모든 when은 Expression으로 사용됨
when(score){
in 90..100 -> println("you ar genius")
in 10..80 -> println("not bad")
else -> println("okay")
}
}
<결과값>
5) Array & List
// Expression vs Statement
//5. Array와 List
// Array => 기본적으로 사이즈가 정해져 있음, 메모리가 할당되어 있음
// List => 1. List, 2. MutableList(수정 가능)
fun array() {
val array: Array<Int> = arrayOf(1, 2, 3)
val list = listOf(1, 2, 3)
val array2: Array<Any> = arrayOf(1, "d", 3.4f)
val list2: List<Any> = listOf(1, "d", 11L)
array[0] = 3
var result = list.get(0)
val arrayList = arrayListOf<Int>()
arrayList.add(10)
arrayList.add(20)
// arrayList = arrayListOf() -> 새로운 객체를 생성하는 경우, 다시 할당될 수 없음
}
<결과값>
6) 반복문
//6. 반복문 => For / While
fun forAndWhile(){
val students = arrayListOf("a","b","c","d")
for (name in students){
println("${name}")
}
for((index, name) in students.withIndex()){
println("${index+1}번째 학생 : ${name}")
}
//1부터 10까지 반복
var sum : Int = 0
for(i in 1..10){
sum += i
}
println(sum)
//두 칸씩
var sum2 : Int = 0
for(i in 1..10 step 2){
sum += i
}
println(sum2)
//10부터 1까지
var sum3 : Int = 0
for(i in 10 downTo 1){
sum3 += i
}
println(sum3)
//1부터 99까지
var sum4 : Int = 0
for(i in 1 until 100){
sum4 += i
}
println(sum4)
//while
var index = 0
while (index < 10){
println("current index : ${index}")
index ++
}
}
<결과값>
7) Nullable/NonNull
//7. Nullable / NonNull
fun nullcheck(){
//NPE : Null Point Exception
var name : String = "a"
//null을 넣고 싶으면 타입에 ?를 넣어야 함
var nullName : String? = null
var nameInUpperCase : String = name.toUpperCase()
var nullNameInUpperCase :String? = nullName?.toUpperCase()
// 엘비스 연산자 => ?:
// default 값을 주고 싶을 때 사용
val lastName : String? = null
val fullName : String = name+" " + (lastName?: "No lastName")
println(fullName)
}
//!!연산자 => null 아닌 거 보증할 때
fun ignoreNulls(str : String?){
val mNotNull : String = str!!
//?를 넣지 않아도 null이 아니라고 나타냄
//NPE 일으키기 때문에 사용을 지양해야 함..
val upper : String = mNotNull.toUpperCase()
//let 함수
//자신의 receiver 객체를 람다식 내부로 옮겨 실행시키는 함수
var email : String? = "email@gmail.com"
email?.let {
println("my email is ${email}")
}
}
<결과값>
8. class
package com.example.bmkpractice
/*
@author BMK
@email BMK@gmail.com
@created 2022-02-01
@desc
*/
open class Human (){
//1
fun eatingCake(){
println("this is so Yummy~~")
}
//2
val name = "BMK"
//7-1
fun singASong(){
println("lalala")
}
//7-2
open fun singSong(){
println("lalala2")
}
}
//3 - constructor 생략 가능
class Human2 constructor(val name : String){
fun star(){
println("OH~~!!")
}
}
//4 - default 값을 주어서 오류가 안생김
class Human3(val name : String = "Anonymous"){
//5 - 코드블럭을 넣고 싶을 땐, init 함수를 사용(주생성자)
//init 먼저 실행
init {
println("new human has been born!!")
}
//6 - 부생성자 : constructor 이용
constructor(name : String, age : Int): this(name){
println("my name is ${name}, ${age} years old")
}
fun star2(){
println("OH~~!!")
}
}
//7 - 코틀린은 final class 개념을 가져서 같은 파일 내에 있어도 함
// open을 통해서 상속을 진행해야 함
// overriding 개념(java)
// 상속은 java와 마찬가지로 하나 밖에 못함
class Korean : Human(){
//7-2 -> 메서드에서도 open을 해줘야 함
override fun singSong(){
super.singSong()
println("라라라")
//Human에서 name을 받아옴
println("my name is : ${name}")
}
}
fun main(){
//1
val human = Human()
human.eatingCake()
//2
println("this human's name is ${human.name}")
//3
val human2 = Human2( "minsoo")
human2.star()
println("this human's name is ${human2.name}")
//4
val stranger = Human3()
println("${stranger.name}")
//6
val mom = Human3("Yang", 52)
//7-1 -> lalala 출력
val korean = Korean()
korean.singASong()
//7-2 -> 라라라 출력
val korean2 = Korean()
korean.singSong()
//super 사용하면 lalala2, 라라라 둘다 출력 가능
}
<결과값>
728x90
반응형
'App > Android Kotlin' 카테고리의 다른 글
Kotlin(6) - UI (0) | 2022.02.09 |
---|---|
Kotlin(5) - 심리테스트 앱 만들기 (0) | 2022.02.08 |
Kotlin(4) - 고급 문법_예시 (0) | 2022.02.07 |
Kotlin(2) - 기본구문 (0) | 2022.02.04 |
Kotlin(1) - 안드로이드 스튜디오 설치 및 환경설정 (0) | 2022.02.04 |
댓글