1. val 과 var 및 자료형
// 변하지 않는 값
val a = 0
// 변하는 값
var b = 0
a = 10 오류 발생
b = 10
Kotlin에서는 Java와 마찬가지로 자료형을 선언해 주어야 한다.
형태는 다음과 같다.
val a : 자료형 = 값
값을 선언해 주었다면 자료형은 생략해도 상관없다.
val a : Int = 0
val b = 0
var string : String = "test"
var string = "test
2. 입·출력 및 String템플릿
입력은 readLine(), 출력은 print(), println() 메서드를 사용한다.
var name = readLine()
print("안녕? 나는 $name 이야!") // 줄 바꿈 x
println("안녕? 나는 $name 이야!") // 줄 바꿈
위의 $name 처럼 문자열 사이에 원하는 변수에 해당하는 값을 넣고 싶을 때 사용하는 것이 String템플릿이다.
사용 방법은 $변수명 (띄어쓰기), ${변수명} 으로 사용할 수 있다.
var name = readLine()
print("안녕? 나는 $name 이야!")
println("안녕? 나는 ${name}이야!")
3. 조건식
3.1 IF 문
if(조건문){
print("if")
}
else if(조건문){
print("else if")
}
else{
print("else")
}
3.2 When
Java에 switch문이 있다면 kotlin에는 when이 있다.
when (month) {
1 -> "1월"
2 -> "2월"
3, 4 -> "3월 4월"
in 7..9 -> "7~9월 중 하나"
else -> "이외 모든 것"
}
//변수에 값을 대입시킬 경우
var a = when (month) {
1 -> "1월"
2 -> "2월"
3, 4 -> "3월 4월"
in 7..9 -> "7~9월 중 하나"
else -> "이외 모든 것"
}
4. 배열과 리스트
배열에는 Array와 List가 있다.
또한 Array와 List의 차이에 대해서는 자료구조에 해당하므로 여기에서는 세세하게 다루지 않고 간단하게만 짚고 넘어가려 한다.
Array는 인덱스의 값을 변경할 수 있지만, List는 변경 불가능하다.
또한 Array는 크기가 고정, List는 가변적이다.
val array = arrayOf(1,2,3,4,5)
array[0] = 10
// array : [10,2,3,4,5]
val list = listOf(1,2,3,4,5)
list[0] = 10 // 오류 발생
list.add(6) //오류 발생
// List는 값이 고정이므로 추가, 변경 등 값을 변화시킬 수 없다.
하지만 우리에겐 두 개를 합쳐 놓은 ArrayList가 존재한다. (또는 MutableList 사용)
ArrayList는 MutableList로 Array처럼 인덱스의 값을 변경할 수 있으며, List처럼 크기가 가변적이다.
val arrayList = arrayListOf(1,2,3,4,5)
arrayList[0] = 10
arrayList.add(6)
// arrayList : [10,2,3,4,5,6]
val arrayList2 = ArrayList<Int>() // 빈 값 초기화
arrayList2.add(1)
arrayList2.add(2)
// arrayList2 : [1,2]
5. 반복문
5.1.1 for문
kotlin에서의 for문은 다른 언어의 for문과 다르다.
for(i in 0..5) {
print(i) // 0,1,2,3,4,5
}
// until : 5 이전까지
for(i in 0 until 5){
print(i) // 0,1,2,3,4
}
// step(num) : num만큼 증가
for(i in 0..5 step(2)) {
print(i) // 0,2,4
}
// downTo : 아래로 진행
for(i in 5 downTo 0){
print(i) // 5,4,3,2,1,0
}
// Array or List
val list = listOf(1,2,3,4,5)
for(i in list) {
print(i) // 1,2,3,4,5
}
5.1.2 forEach
kotlin에서는 for문 대신 forEach로 대체가 가능하다.
val list = listOf(1,2,3,4,5)
(0..5).forEach { data ->
print(data) // 0,1,2,3,4,5
}
list.forEach { data ->
print(data) // 1,2,3,4,5
}
//인덱스가
list.forEachIndexed { index, data ->
println("${index}번 인덱스의 값은 ${data} 입니다.") // 0번 인덱스의 값은 1 입니다. ...
}
5.2 While , do~while
var a = 0
while(a < 5)
{
print(a++) // 0,1,2,3,4
}
do
{
print(a++) // 0,1,2
}while(a < 3)
do~while 문은 do를 먼저 실행 후 while 조건문을 확인한다.
즉, while 조건문이 거짓이여도 do의 내용은 무조건 한 번 실행
6. 함수
Kotlin에서의 함수는 다음과 같이 사용한다.
fun 함수 이름(매개 변수) : 반환 값 {
...
return
}
만일 반환 값이 없다면 : 반환 값은 생략 가능하며, 매개 변수 또한 없으면 빈 괄호로 둘 수 있다.
fun 함수 이름() {
...
}
7. Nullable 과 NonNull
7.1 ?
Kotlin에서는 Null이 있는 곳이라면 어디든지 따라가는 ? 가 있다.
var nullTest : String = null
위의 코드를 실행하면 에러가 난다.
그 이유는 String 형태를 사용한다 하였는데 null이 들어 갔기 때문
따라서 에러가 나지 않으려면 다음과 같이 사용해야 한다.
var nullTest : String? = null
var nullTest = null // 이렇게 써도 되긴 함
이때 이 nullTest 변수를 사용하여 어떠한 메서드를 사용한다고 하면
nullTest.split(" ") // 띄어쓰기를 기준으로 문자열 분리
다음과 같이 사용하면 에러가 나며, 실제로는 . 에 빨간 밑줄이 뜬다.
따라서 Null이거나 Null일 수도 있는 변수에는 ?를 붙여주어야 한다.
var nullTest : String? = null
nullTest?.split(" ") // null
nullTestFunction(nullTest) // null
nullTest = "Null Test"
nullTest.split(" ") // [Null, Test]
nullTestFunction(nullTest) // "Null Test"
fun nullTestFunction(word : String?) {
println(word)
}
사실 개발할 때, ?가 필요한데 없으면 빨간 줄이 뜨기 때문에 편하다...ㅎ
7.2 ?:
var lastName = null
val name = "홍"+(lastName?: "!") // 홍!
var lastName = "길동"
val name = "홍"+(lastName?: "!") // 홍길동
lastName이 null이 아니면 그대로 출력, null이면 "!" 출력
7.3 !!
Null이 절대 아니라는 뜻 또는 값이 무조건 들어있다는 의미
fun nullTestFunction(number: Int?) {
val a = number!!
println(a.toString())
}
매개 변수로 넘어온 number에 !!로 null이 아니라는 확신을 주었기 때문에 toString() 메소드를 사용할 때 ?를 안써주어도 된다.
!! 썻는데 null이 넘어온다면 오류가 난다.
8. Class
class 클래스명(매개 변수A) : 상속클래스(), 인터페이스{
// 생성자
constructor (매개변수A, 매개변수B) : this(A) {
클래스 매개 변수 외 추가로 매개 변수가 필요할 때 사용
}
init{ 클래스 생성 시 실행 }
fun 함수명() : 반환형 {
...
}
override fun 함수명() {
...
}
}
클래스에서의 상속은 Java에서의 extends, implements로 나뉘지 않고 : 뒤에 적어주면 된다.
다만 클래스 상속은 뒤에 ()를 붙여주고, 인터페이스는 안붙여준다는 차이점이 있다.
오버라이드도 Java에서는 @Override 어노테이션을 사용하였다면, Kotlin에서는 override fun 으로 사용한다.
클래스 객체 생성
//java
ClassName 변수명 = new ClassName();
//Kotlin
val 변수명 = ClassName()
Kotlin에서는 new를 생략하고 작성해주면 된다.
'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
[Kotlin] 정렬 (0) | 2024.06.11 |
---|---|
[Kotlin] 배열과 리스트 복사 (0) | 2024.03.06 |
[Kotlin] 문자열 String (0) | 2023.11.03 |