728x90
[1강. 코틀린 기본 문법]
1. 함수
[함수 선언] : fun 키워드 -함수 매개변수에는 val 자동 적용되므로 따로 키워드 선언 X -함수 안에서 매개변숫값 변경 불가능 -함수의 매개변수에 기본값 선언 가능 ex. fun some(data1: Int, data2: Int = 10) : Int { ... } 로 선언한 경우 이후, 해당 함수 호출할 때 data2에 해당하는 인수 안줘도 기본값 적용된다. -매개변수가 여러개일 경우 호출 방법 1) 순서대로 인자 전달 -some(10, 20) 2) 매개변수명 지정하여 호출 : 명명된 매개변수 -이 경우 순서 안지켜도 됨 -some(data2 = 20, data1 = 10) 으로 호출 가능 |
//1. 함수
fun helloWorld() : Unit { //반환값 없는 함수 (Unit 생략O)
println("hello world")
}
fun add(a :Int, b: Int) : Int { // 반환 타입 Int인 함수
return a+b
}
2. 변수 선언 : val /var 차이
[변수 선언]
-선언 키워드 : val , var
val : 최초 할당된 초기값 변경 불가 변수. (불변)
var: 최초 할당된 초기값 변경 가능 변수. (가변)
val 변수명:타입 = 값 var 변수명:타입 = 값 |
//2. val vs var 변수 키워드 차이
//val = value
//var = variable
fun h1() {
val a : Int = 10 //최초 할당된 초기값 변경 불가
var b : Int = 9 // 최초 할당된 초기값 변경 가능
b = 100
val c = 100
var d = 100
}
3. String 템플릿 ${ }
<문자열 템플릿> -String 타입 데이터에 변수값 or 어떤 연산식의 결과값 포함해야 할 경우. 즉, 문자열로 출력할 경우, 내부에 연산 결과값 넣거나 할 때 형식지정자 대신 $ {}기호 사용함 val name : String = “kkang” println(“name : $name, sum: ${sum(10)}, plus: ${10+20}”) |
//3. Sting 템플릿 ${ } : 변수 or 연산 결과를 ""문자열로 출력하고 싶을 때. <형식지정자>
fun h2() {
val name = "Joyce"
val lastName = "SEO"
println("my name is ${name + lastName}")
}
4. 조건식
(1) if-else 문
[if-else문]
-표현식으로도 사용 O (결과 반환하는 식)
-각 영역의 마지막 줄에 해당한느 결괏값을 반환
//4. [조건식]
// (1) if-else 문
fun max(a:Int, b: Int) : Int {
if(a>b) {
return a
}else{
return b
}
}
fun amxBy2(a:Int, b:Int):Int = if(a>b) a else b
(2) when 문
[when 문]
-표현식으로도 사용 O (결과 반환하는 식)
// (2) when 문
fun checkNum(score:Int) {
when(score) { //기본 when 문
0 -> println("this is 0")
1 -> println("this is 1")
2, 3->println("this is 2 or 3")
}
var b = when(score) { //표현식으로 사용한 when문
1->1
2->2
else -> 3
}
when(score){ //범위로 score값 조건 나누기
in 90..100 -> println("You are genius")
in 10..80 -> println("not bad")
else -> println("okay")
}
}
5. 컬렉션 타입 : Array 와 List
-초기화는 _Of() 함수 사용
-List/Map/Set의 경우 : 불변/가변 나뉨
//5. Array 와 List : 초기화는 _Of() 함수로 할 수 있음
// Array = 기본 할당된 크기가 정해져 있음
// List 1.List 2.MutableList 불변/가변 나뉨
fun array() {
val array:Array<Int> = arrayOf(1,2,3)
val list:List<Int> = listOf(1,2,3)
val array2: Array<Any> = arrayOf(1,"d",3.4f )
val list2 : List<Any> = listOf(1, "d", 11L)
}
6. 반복문
(1) for문
[for 문]
for(i in 1..10) { sum += I } |
-for(i in 1..10) {...} : 1부터 10까지 1씩 증가하며 반복
-for(i in 1 until 10) {...} : 1부터 9까지 1씩 증가하며 반복
-for(i in 2..10 step 2) {...} : 2부터 10까지 2씩 증가하며 반복
-for(i in 10 downTo 1) {...} : 10부터 1까지 1씩 감소하며 반복
- [indices] : 증감 조건에 컬렉션 타입 데이터 개수만큼 반복하게 설정도 가능
fun main() { var data = arrayOf<Int>(10. 20, 30) for(i in data.indices) { print(data[i]) if(i !== data.size – 1) printf(“,”) } } |
[withIndex() 함수 ] : 컬렉션 타입 인덱스 + 데이터 함께 가져옴
fun main() { var data = arrayOf<Int>(10,20,30) for((index, value) in data.withIndex()) { print(value) if(index !== data.size –1) print(“,”) } } |
//6. [반복문]
fun forAndWhile() {
val students : ArrayList<String> = arrayListOf("joyce", "james", "jenny", "jennifer")
// (1) for문
for(name :String in students) { //students 타입 컬렉션 내부의 String값들 차례로 가져옴
println("${name}")
}
for((index:Int, name:String) in students.withIndex()){
//withIndex() 사용 시, 컬렉션 내부 인덱스와 데이터 함께 불러올 수 있음
println("${index+1}번째 학생 이름 : ${name}이다.")
}
var sum : Int = 0
for(i:Int in 1..10) {
sum += i
}
// (2) while문
var index = 0
while(index <10){
println("current index : ${index}")
index++ //증감식 작성안하면 계속 index값 머물러 있어서 무한반복
}
}
7. 널 허용/불 허용
//7. [NonNull과 Nullable] : 널 허용 / 널 불허용 : ?붙임 여부
fun nullcheck(){
//자바 Null pointer Exception 널 포인터 익셉션 발생을 막기 위해 구분
var name:String = "joyce" //널 불허용 : 변수 선언 시 타입 뒤 ? 안붙음
var nullName :String? = null //널 허용 : 변수 선언 시 타입 뒤 ? 붙임
//(1) 엘비스 연산자 ( ?: 연산자 )// 널일 경우의 반환해줄 기본값을 지정 O
val lastName :String? = null
val fullName:String = name + "" + (lastName ?: "No lastName")
//만약 해당 변수가 null일 경우 반환할 기본 값 지정
}
//(2) 예외발생 연산자 ( !! 연상자) : 컴파일러에게 NUll아님을 확실하게 알리는 역할
fun ignoreNulls(str:String?) {
val mNotNull : String = str!! //!!붙여주면 절대 널값아니라는 표시
}
8. 클래스
//8. 클래스 개념
//코틀린은 자바와 다르게 클래스 이름이 꼭 파일 이름과 일치하지 않아도 됨
//여러 클래스를 한 타입 안에 넣을 수 도 O
open class Human constructor(val name:String = "Anomymous"){ //기본(주) 생성자를 클래스 선언 시 작성
init{ //주 생성자를 클래스 선언 시 작성하기 때문에 본문 내용을 init{ }안에 작성
println("No human")
}
// 보조 생성자
constructor(name: String, age:Int) :this(name) { //this()로 주 생성자와 연결 반드시 필요
println("my name is ${name}, ${age} ")
}
open fun eatingCake(){
println("This is so 얌얌 ")
}
open fun singASong(){
println("lalala")
}
}
9. 상속 + 오버라이딩
//9. 상속 (클래스 상속) + 오버라이딩(재정의)
class Korean:Human() { //상위 클래스 Human을 상속 받은 Korean 클래스
override fun singASong() {
super.singASong()
println("아리랑")
println("My name is : ${name}")
}
//코틀린은 오버라이딩은 상위클래스의 open 멤버 대상에 한해서만 가능함
}
[참고] : Joyce - 코틀린 3강으로 끝내기 |
728x90
'App(앱)_관련 공부 모음 > [문법]_Kotlin(코틀린)' 카테고리의 다른 글
Android를 위한 Kotlin 문법 [최종편] (0) | 2022.05.07 |
---|---|
Android를 위한 Kotlin 문법 [심화편] (0) | 2022.05.07 |
Android를 위한 Kotlin 문법 [기본편 2] (0) | 2022.05.07 |
Android 를 위한 Kotlin문법 [기본편 1] (0) | 2022.05.07 |
2강. [코틀린 고급 문법] (0) | 2022.03.05 |