코틀린이란 JVM(Java Virtual Machine) 위에서 올라가는 2011년도에 출시한 언어
코틀린이 왜 필요한가?
- 자바는 1995년생
- 약 20년이 흐르면서 언어 트랜드가 바뀌었다.
- 개발 작성 패턴을 바꾸고 싶다.
- 2011년을 기점으로 코틀린 개발이 늘고 있다.
자바와 비교해 보자
자바 | 코틀린 | |
Null로 부터 안전한가 | 기본 NULL 허용 오노테이션으로 조정 가능 |
NULL 허용 여부 결정 가능 Null Point Exception 문제 컴파일 단계서 확인 가능 |
선언 | 타입 항상 명시 final을 붙여 강제성 추가 기능 |
타임 추론 가능 가변, 불변 선언 가능 |
데이터 클래스 | Getter/Setter 추가 필요 초기화 함수 설정 가능 |
Data class 선언을 통해 생략 가능 |
변수
변수이름 쓰는 방법
- 카멜 케이스 (testName)
- 스네이크 케이스 (test_name)
변수 형태
- var (일반적 변수, 언제든 읽거나 쓰기 가능)
- val (선언시에만 초기화 가능, 이후 읽기만 가능) - 상수형 변수
변수 타입
8bits | 16bits | 32bits | 64bits | |
정수 | Byte | Short | Int | Long |
실수 | Float | Double | ||
문자 | Char | |||
부울값 | Boolean |
- 문자열 : String
조건문
var test = 2
if (test == 2) {
println("success")
} else {
println("fail")
}
var test = if (분기 조건 추가) {
조건 만족시의 결과 값 반환
} else {
조건 불만족시의 결과 값 반환
}
When -> switcd 이다.
val test = 95
When (test){
95->println("95")
94->println("94")
else->println("fail")
}
or
val test = 95
When (test) {
in 90 .. 100 -> println("90~100")
in 80 .. 90-> println("80~90")
else->println("fail")
}
배열과 컬렉션
Mutable : 가변
기본 : 불변
Colletion 하위에 -> List , Set, Map 이 중요함
List
val test1 = listOf<String>("1","2") //listOf 는 불변
println(test1.size)
val test2 = mutableListOf<String>("1","2") //mutableListOf 는 가변
test2.remove("1")
test2.add("3")
println(test2)
Map
val test1 = mapOf<String, String>(
"1" to "bug", "2" to "must be removed"
)
println(test1.get("1") //"bug"
val test2 = mutableMapOf<String>(
"1" to "bug", "2" to "must be removed"
)
test2.put("3","!")
println(test2.get("1")) // "bug"
Set - 집합, list 와 비슷해 보이지만, 삽입 순서를 보장하지 않는다. 집합간의 교집합, 여집합 등을 구할때 용이하다.
val test1 = setOf<Int>(1,2,3,4,5)
println(test1.size) //5
val test2 = mutableSetOf<Int>(1,2,3,4,5)
test2.add(10)
println(test2.contains(10)) //true
반복문
//for
var test = listOf(1,2,3)
for (index in test) {
println(index)
}
//while
var test = 3
while (test != 0) {
test = test -1
}
함수
//함수 구현
fun sum(a:int, b:int):int = {
return a+b
}
//줄여 쓰기 1단계
fun sum(a:int,b:int):int = a+b
//줄여 쓰기 2단계
fun sum(a:int, b:int) = a+b
클래스
//init을 사용한 초기화 방식
class Dog(name:String, age:Int) {
var name: String
var age: Int
init {
this.name = name
this.age = age
}
}
// constructor() 를 사용한 초기화 방식
class Dog(name:String, age:Int) {
var name: String
var age: Int
constructor(name:String, age:Int) {
this.name = name
this.age = age
}
}
classs 종류
Data class : 데이터 전달 용도로 활용 가능
Enum: 타입 구분 용도로 활용 가능. i.e. 성별 남녀
Abstract : 추상 클래스
Interface : Abstract와 비슷한 용도. 다수의 interface 상속 가능
접근 제한
Public: 전체 접근 가능
Private : 하당 .kt 파일 내에서 접근 가능
Internal : 같은 모듈 내리면 접근 가능
Proteted : Private + ㅏ상속받은 클래스 접근 가능
람다 함수 고차 함수
람다 함수
익명함수라고도함 -> 익명이란 이름이 없다는 것
인터페이스 함수를 간단하게 구현하기 위한 장치
고차 함수
함수를 인자로 받거나, 함수를 결과로 변환하는 함수
//람다 함수, 고차 함수
fun sweet(x: (int,int)->int, value:int):int {
return x(value,value+1)
}
fun main() {
val candy = {x:int, y:int->x+y}
val chocolate = {x:Int, y:Int->x*y}
print(sweet(candy,2).toString()+"\n")
print(sweet(chocolate,2))
}
list/collection 에서 처리 축출 삭제시 람다 함수를 자주 사용할 것이다.
람다함수, 고차함수를 남용하는 것은, 나중에 코드 이해하는데 시간이 소요되어, 왠만하면 안쓴느 것을 추천한다.
'other_program_languages > 코틀린, 안드로이드' 카테고리의 다른 글
코틀린 실습 1 : Project, Application and Activity 생성 (0) | 2022.04.03 |
---|---|
코틀린 개발을 위한 환경 설정 (0) | 2022.04.02 |
안드로이드 기초 (0) | 2022.04.02 |