- [kotlin] 코틀린 기초 문법 다지기 - 12022년 06월 06일 17시 13분 40초에 업로드 된 글입니다.작성자: 핀수728x90반응형
해당 강의를 들으며 작성된 것 입니다.
[무료] 코틀린 3강으로 끝내기 feat. 안드로이드 개발 - 인프런 | 강의
3강으로 짧게 끝내는 코틀린 문법! 코틀린 기초 문법과 안드로이드 기초 프로그래밍은 물론, 직접 안드로이드 앱도 만들어보세요!, - 강의 소개 | 인프런...
www.inflearn.com
함수
파라미터와 리턴 타입이 없을 때
fun helloWorld(){ println("hello world!") }
자바의 void 와 같다.
아무것도 리턴하지 않는 것처럼 보이지만 사실은 Unit을 리턴하고 있다.
위에 쓰인 것 처럼 생략해도 무방하다.
fun helloWorld() : Unit { println("hello world!") }
파라미터와 리턴 타입이 있을 때
'변수 이름 : 변수 타입' 과 같은 형태로 작성한다.
fun add(a: Int, b: Int): Int { return a + b }
변수
val
👉🏻 value
👉🏻 바뀌지 않는 것을 의미한다. (final)
var
👉🏻 variable
fun variable() { // 타입 생략해주어도 무방함 val a = 10 var b = 9 // 선언만 먼저 할 경우에는 타입을 지정해주어야함 val c : Int c = 10 }
String Template
"my name is $name" 처럼 변수 뒤에 공백이 있는 경우
{} 괄호를 생략해도 무방하지만
띄어쓰기를 할 수 없는 경우는 {}를 붙여줘야 한다.
"내 나이는 ${age}살 입니다." 같은 경우 말이다.
val name = "spin" val lastName = "Kim" println("My name is ${name + lastName}. I'm 23.") // My name is spin Kim. I'm 23.
$ 기호를 출력문 내에서 사용하고 싶다면
\를 사용하면 됨 (이스케이프 문자)println("This is \$a")
조건문
if
우리가 아는 기존의 if문
또 코틀린에는 삼항 연산자가 없으므로 다음과 같이 사용할 수 있다.
fun maxBy(a: Int, b: Int) = if (a > b) a else b
when
자바의 switch 와 비슷한 친구
else 는 없어도 문제 없다.
when (score) { 0 -> println("this is 0") 1 -> println("this is 1") 2, 3 -> println("this is 2 or 3") else -> println("this is what") }
복수 지정과 범위 지정도 가능하다.
when (score) { in 90..100 -> println("you are genius") in 10..80 -> println("not bad") else -> println("okay") }
리턴값으로도 가능하다.
이때는 반드시 else 를 지정해주어야 한다.
var b = when (score) { 1 -> 1 2 -> 2 else -> 3 }
Expression 과 Statement
👉🏻 무언가를 뚱땅뚱땅 해서 만들면 expression
👉🏻 실행하도록 지시하는 것은 statement (명령을 내리는 것)
👉🏻 코틀린의 모든 함수는 expression 의 성격을 가진다.
(위에서 말했듯 리턴 값이 없는게 아니라 unit을 리턴함)
👉🏻 자바의 void 는 statement
자바에서는 statement 로 사용되었던 if문이 코틀린에서는 expression 으로 사용될 수 있다.
Array
배열은 기본적으로 mutable
👉🏻 변경이 가능하다.
배열 생성 및 초기화
val array = arrayOf(1, 2, 3)
타입이 달라도 상관없다.
타입이 Any로 변경된다.
Array<Any>
val array2 = arrayOf(1, 2, "apple")
선언만 먼저 할 경우
크기가 10인 배열을 생성한다.
val arr = arrayOfNulls<Int>(10)
List
👉🏻 immutable
👉🏻 mutable
로 나뉜다.
immutable
get 으로 읽어올 수는 있지만 변경은 할 수 없다.
val list = listOf(1, 2, 3) //list[0] = 4 (x)
mutable
val mutableList = mutableListOf<Int>() mutableList.add(2) val arrayList = arrayListOf<Int>() arrayList.add(10) arrayList.add(20)
반복문
for
val students = arrayListOf("joyce", "james", "jenny", "jane") for (name in students){ println("$name") } for((index, name) in students.withIndex()){ println("${index+1}번째 학생 $name") }
var sum : Int = 0 for (i in 1..10) {// 1부터 10까지 sum += i }
step n : n 씩 증가
downTo n : n씩 감소
in 1..10 : int i = 1 ; i <= 10 과 같음
until 10 : int i = 1 ; i < 10 과 같음
while
은 우리가 아는 while 과 같다
Nullable 과 NonNull
자바의 Null Pointer Exception(NPE) 은 런타임에 일어나서 개발자가 잡아주기 쉽지 않다.
잡아주기 위해서 일정 노력이 필요하다..수많은 if문들
코틀린은 컴파일 시점에 이를 잡아낸다.
타입을 생략하면 기본적으로 NonNull 이다.
var name = "joyce" // var age : String = null (x)
따라서 해당 작업에는 무리가 없다.
var nameInUpperCase = name.uppercase(Locale.KOREA)
?
Nullable 변수를 보자
val nullName : String? = null
같은 작업을 하려고 하면 아래와 같이 바꿔주라고 에러가 뜬다.
nullName 이 null 이면 nullNameUpperCase 도 null이 된다.
var nullNameInUpperCase = nullName?.uppercase(Locale.KOREA)
?:
앨비스 연산자라고도 한다. (90도 돌려서 보면 ㅋㅋㅋㅋㅋ)
디폴트 값을 주고자 할 때 사용한다.
val lastName : String? = "jung" val fullName = name + " " + (lastName?: "No lastName") // null : joyce No lastName // not null : joyce jung
!!
하늘이 두쪽나도 null이 아닐 경우 사용
null 이 아님을 보장하는 것
근데 null이면 NPE를 일으키기 때문에
확실한게 아니면 사용하는 것을 자제하는 것이 좋다고 한다.
fun ignoreNull(str: String?){ val mNotNull : String = str!! val upper = mNotNull.uppercase() }
let
자신의 리시버 객체를 람다식 내부로 옮겨서 사용하는 것
val email : String? = null val email : String? = pin@gmail.com email?.let{ println("my email is $it") // not null : my email is pin@gmail.com // null : nothing }
728x90반응형'Android > Android' 카테고리의 다른 글
안드로이드 애플리케이션 설계 패턴 (0) 2022.06.18 [kotlin] 코틀린 기초 문법 다지기 - 2. class (0) 2022.06.12 [Android] SharedPreferences 와 KeyStore (0) 2022.05.11 [Android] Google Play Developer API으로 앱 출시하기 (2) 2022.05.10 [Android] 앱 서명 (0) 2022.04.18 다음글이 없습니다.이전글이 없습니다.댓글