Kotlin 시작하기 | Android 공식 언어 완벽 입문
이 글의 핵심
Kotlin 시작하기: Android 공식 언어 완벽 입문. 개발 환경 설정·첫 Kotlin 프로그램.
시리즈 안내
#01 | 📋 전체 목차 | 다음: #02 변수와 타입
들어가며
Kotlin이란?
Kotlin은 JetBrains가 만든 JVM(자바 바이트코드를 실행하는 가상 머신)·Android에서 널리 쓰이는 언어로, 2017년 이후 Android 공식 언어로 자리 잡았습니다. Java와 상호 운용되며, 문법이 더 간결한 편입니다. 특징
- ✅ 간결함: Java보다 코드가 짧음
- ✅ 안전성: Null 안정성 내장
- ✅ 상호운용성: Java와 100% 호환
- ✅ 함수형: 함수형 프로그래밍 지원
- ✅ 멀티플랫폼: Android, iOS, 웹, 서버 Kotlin vs Java: | 특징 | Kotlin | Java | |------|--------|------| | 코드 길이 | 짧음 | 김 | | Null 안정성 | 내장 | 별도 처리 | | 함수형 | 지원 | 제한적 | | 확장 함수 | 지원 | 미지원 | | 데이터 클래스 | 자동 | 수동 |
1. 개발 환경 설정
IntelliJ IDEA 설치
- IntelliJ IDEA 다운로드
- Community Edition (무료) 또는 Ultimate Edition
- Kotlin 플러그인 자동 포함
Android Studio 설치
- Android Studio 다운로드
- Kotlin 기본 지원
- Android 앱 개발에 최적화
온라인 실행
- Kotlin Playground
- 설치 없이 바로 실행 가능
2. 첫 Kotlin 프로그램
Hello World
fun main() {
println("Hello, Kotlin!")
}
실행 결과:
Hello, Kotlin!
Java와 비교
Java:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
Kotlin:
fun main() {
println("Hello, Kotlin!")
}
차이점
- 클래스 불필요
public static불필요- 세미콜론 선택적
System.out대신println
3. 기본 문법
변수 선언
// 읽기 전용 (val = value)
val name = "홍길동"
val age = 25
// 변경 가능 (var = variable)
var score = 90
score = 95 // OK
// 타입 명시
val name: String = "홍길동"
val age: Int = 25
타입 추론
// 실행 예제
val number = 10 // Int
val text = "Hello" // String
val pi = 3.14 // Double
val isActive = true // Boolean
함수 정의
// 기본 함수
fun greet(name: String) {
println("안녕하세요, $name님!")
}
// 반환값이 있는 함수
fun add(a: Int, b: Int): Int {
return a + b
}
// 표현식 함수
fun add(a: Int, b: Int) = a + b
// 기본 매개변수
fun greet(name: String = "Guest") {
println("안녕하세요, $name님!")
}
greet() // 안녕하세요, Guest님!
greet("홍길동") // 안녕하세요, 홍길동님!
4. Null 안정성
Nullable 타입
Kotlin의 가장 강력한 기능 중 하나는 Null 안정성입니다. Java의 NullPointerException을 컴파일 타임에 방지합니다:
// Non-null (기본) - null을 허용하지 않음
var name: String = "홍길동"
// name = null // 컴파일 에러! "Null can not be a value of a non-null type String"
// Kotlin은 기본적으로 모든 타입이 non-null
// Nullable - null을 허용하는 타입
// 타입 뒤에 ? 를 연결하여서 nullable 타입으로 만듦
var name: String? = "홍길동"
name = null // ✅ OK - nullable 타입이므로 null 할당 가능
// Safe Call (?.) - null이면 null 반환, 아니면 프로퍼티/메서드 호출
val length = name?.length
// name이 null이면 length도 null
// name이 "홍길동"이면 length는 3
// Java의 if (name != null) name.length() 를 간결하게 표현
// Elvis 연산자 (?:) - null일 때 기본값 제공
val length = name?.length ?: 0
// name이 null이면 0 반환
// name이 "홍길동"이면 3 반환
// Java의 name != null ? name.length() : 0 과 동일
// Not-null 단언 (!!) - "이 값은 절대 null이 아니다"라고 단언
val length = name!!.length
// name이 null이면 KotlinNullPointerException 발생
// name이 "홍길동"이면 3 반환
// 주의: !!는 가능한 피하고 ?. 또는 ?: 사용 권장
Null 안정성의 장점:
- Java의 NullPointerException을 컴파일 타임에 방지
- 코드가 더 안전하고 예측 가능
- null 체크 코드가 간결해짐 실전 예시:
// Java 스타일 (장황함)
String name = user.getName();
if (name != null) {
int length = name.length();
System.out.println(length);
}
// Kotlin 스타일 (간결함)
val length = user.name?.length
println(length)
5. 문자열 템플릿
kotlin 예제 코드입니다.
val name = "홍길동"
val age = 25
// 문자열 템플릿
println("이름: $name, 나이: $age")
// 표현식
println("내년 나이: ${age + 1}")
// 여러 줄 문자열
val text = """
안녕하세요!
Kotlin 입니다.
여러 줄 작성 가능
""".trimIndent()
6. 조건문
if 표현식
// if-else
val max = if (a > b) a else b
// 블록
val max = if (a > b) {
println("a가 더 큼")
a
} else {
println("b가 더 크거나 같음")
b
}
when 표현식
val grade = when (score) {
in 90..100 -> "A"
in 80..89 -> "B"
in 70..79 -> "C"
else -> "F"
}
// 조건 없는 when
when {
score >= 90 -> println("A")
score >= 80 -> println("B")
else -> println("C")
}
7. 반복문
for 루프
// 범위
for (i in 1..5) {
println(i) // 1, 2, 3, 4, 5
}
// until (끝 제외)
for (i in 1 until 5) {
println(i) // 1, 2, 3, 4
}
// step
for (i in 1..10 step 2) {
println(i) // 1, 3, 5, 7, 9
}
// 역순
for (i in 5 downTo 1) {
println(i) // 5, 4, 3, 2, 1
}
// 배열/리스트
val fruits = listOf("사과", "바나나", "오렌지")
for (fruit in fruits) {
println(fruit)
}
// 인덱스와 함께
for ((index, fruit) in fruits.withIndex()) {
println("$index: $fruit")
}
while 루프
var count = 0
while (count < 5) {
println(count)
count++
}
// do-while
do {
println(count)
count++
} while (count < 5)
8. 컬렉션
List
// 읽기 전용
val fruits = listOf("사과", "바나나", "오렌지")
// 변경 가능
val mutableFruits = mutableListOf("사과", "바나나")
mutableFruits.add("오렌지")
// 접근
println(fruits[0]) // 사과
println(fruits.first())
println(fruits.last())
Set
// 실행 예제
val numbers = setOf(1, 2, 3, 2, 1) // 중복 제거
println(numbers) // [1, 2, 3]
val mutableNumbers = mutableSetOf(1, 2, 3)
mutableNumbers.add(4)
Map
val ages = mapOf(
"홍길동" to 25,
"김철수" to 30,
"이영희" to 28
)
println(ages[홍길동]) // 25
val mutableAges = mutableMapOf("홍길동" to 25)
mutableAges[김철수] = 30
9. 실전 예제
예제 1: 간단한 계산기
fun main() {
println("=== 계산기 ===")
val a = 10
val b = 5
println("$a + $b = ${add(a, b)}")
println("$a - $b = ${subtract(a, b)}")
println("$a * $b = ${multiply(a, b)}")
println("$a / $b = ${divide(a, b)}")
}
fun add(a: Int, b: Int) = a + b
fun subtract(a: Int, b: Int) = a - b
fun multiply(a: Int, b: Int) = a * b
fun divide(a: Int, b: Int) = if (b != 0) a / b else 0
예제 2: 성적 처리
fun main() {
val scores = listOf(85, 92, 78, 95, 88)
println("점수: $scores")
println("평균: ${scores.average()}")
println("최고점: ${scores.maxOrNull()}")
println("최저점: ${scores.minOrNull()}")
val passed = scores.filter { it >= 80 }
println("80점 이상: $passed")
}
예제 3: 사용자 정보
data class User(
val name: String,
val age: Int,
val email: String
)
fun main() {
val users = listOf(
User("홍길동", 25, "hong@example.com"),
User("김철수", 30, "kim@example.com"),
User("이영희", 28, "lee@example.com")
)
// 이름 출력
users.forEach { println(it.name) }
// 30세 이상 필터링
val adults = users.filter { it.age >= 30 }
println("30세 이상: $adults")
// 이름 리스트
val names = users.map { it.name }
println("이름: $names")
}
10. Kotlin vs Java 비교
데이터 클래스
Java:
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// getter, setter, equals, hashCode, toString...
}
Kotlin:
data class User(val name: String, val age: Int)
Null 처리
Java:
String name = getName();
if (name != null) {
int length = name.length();
}
Kotlin:
val length = name?.length ?: 0
정리
핵심 요약
- Kotlin: JVM 기반, Android 공식 언어
- 간결함: Java보다 코드가 짧음
- Null 안정성:
?,?.,?:,!! - 함수:
fun, 표현식 함수, 기본 매개변수 - 컬렉션: List, Set, Map
- 상호운용성: Java와 100% 호환
다음 단계
다른 언어와 비교
관련 글
- Kotlin Android 개발 | Activity, ViewModel, Jetpack
- C++ 초보자가 자주 하는 실수 Top 15 | 컴파일 에러부터 런타임 크래시까지
- HTML/CSS 시작하기 | 웹 개발 첫걸음
- Java 시작하기 | JDK 설치부터 Hello World까지
- JavaScript 시작하기 | 웹 개발의 필수 언어 완벽 입문
자주 묻는 질문 (FAQ)
Q. 이 내용을 실무에서 언제 쓰나요?
A. Kotlin 시작하기: Android 공식 언어 완벽 입문. 개발 환경 설정·첫 Kotlin 프로그램로 흐름을 잡고 원리·코드·실무 적용을 한글로 정리합니다. Kotlin·코틀린·Android 중심으로 설명합니다. … 실무에서는 위 본문의 예제와 선택 가이드를 참고해 적용하면 됩니다.
Q. 선행으로 읽으면 좋은 글은?
A. 각 글 하단의 이전 글 또는 관련 글 링크를 따라가면 순서대로 배울 수 있습니다. Kotlin 시리즈 목차에서 전체 흐름을 확인할 수 있습니다.
Q. 더 깊이 공부하려면?
A. cppreference와 해당 라이브러리 공식 문서를 참고하세요. 글 말미의 참고 자료 링크도 활용하면 좋습니다.
같이 보면 좋은 글 (내부 링크)
이 주제와 연결되는 다른 글입니다.
이 글에서 다루는 키워드 (관련 검색어)
Kotlin, 코틀린, Android, JVM, 입문 등으로 검색하시면 이 글이 도움이 됩니다.