안드로이드 스튜디오에서 사용되는 언어는 자바, 코틀린 언어다.
나는 모바일 앱프로그래밍 수업시간에는 자바를 사용하여 한 학기 구현하고 공부했으며, 구루2에서는 코틀린 언어를 사용하여 실행했다. 개인적인 경험으로는 자바는 저학년부터 실행을 해왔기에 익숙하다면, 코틀린은 자바와 비슷한 점이 많아서 그렇게 어렵지는 않았다(다만 습관적으로 ;를 남겨 코틀린에서 종종 오류를 범했다.. 주의하다록 하자) 요즘 안드로이드 스튜디오는 코틀린이 대세이고 공식 언어로 지정되었다고 하여 수업시간에 자바로 배웠던 내용을 코틀린으로 구현하여 복습하고자 한다.
코틀린 변수& 데이터 형식
우선 코틀린의 기본 문법 - 변수, 데이터 형식에 대해 알아보자(안드로이드 스튜디오에서 실행)
자바에서는 int VAR1 = 10; 이렇게 변수를 선언했다면 코틀린 변수 선언은 읽기 전용인 val(재 할당 불가),
var(초기화 이후 변경 가능)을 이용한다.
이런 식으로 사용하면 된다.
val myVar : Int = 10 //읽기 전용 변수로, 이름은 myVar 이고 유형은 Int이며 값은 10으로 할당.
var myVar : Int = 10 //변수 값을 변경할 수 있는 변수로, 이름은 myVar이고 유형은 Int로 값은 10으로 할당.
//위의 var의 경우는 필요에 따라 값을 바꿀 수 있음.
코틀린의 데이터 형식의 종류는 자바와 거의 유사하다. 다만, 유형을 선언할 때 자바에서는 int a =10; 과 같이 소문자였다면, 코틀린은 대문자다.
분류 | 데이터 형식 | 설명 |
문자형 | Char | 2Byte 사용하며 한글 또는 영문 1개만 입력 |
String | 여러 글자의 문자열을 입력 | |
정수형 | Byte | 1Byte를 사용함 |
Short | 2Byte를 사용함 | |
Int | 4Byte를 사용함. | |
Long | 8Byte를 사용함. | |
실수형 | Float | 4Byte를 사용함. |
Double | 8Byte를 사용함. float보다 정밀도가 높음 | |
불리언형 | Boolean | true or false |
만약 데이터 형식을 변환하고 싶다면, 캐스팅 연산자를 사용하면 된다 코틀린에서는 toInt() 또는 toDouble()등 정적 메소드를 사용하게 한다. 자세한 활용하는 방법은 뒤에서 더 알아보도록 하자.
- 참고로 정적 메소드는 클래스로, 객체를 생성하지 않아도 호출이 가능한 메소드다. 정적 메소드는 해당 헤소드가 정의되어 있는 클래스의 이름이나 생성된 객체를 통해 호출할 수 있다. 자세한 점은 뒤에서 알아보도록 하자.
- 코틀린은 기본적으로 변수에 null를 넣지 못한다.
//캐스팅 연산자
var a : Int = "100"to.Int() //코틀린 제공 캐스팅 연산자(정적 메소드)
var b : Double = "100.123".toDouble() //코틀린 제공 캐스팅 연산자(정적 메소드)
//(null 사용)
var c : Int = null //오류
var okNull : Intf? = null //변수를 선언할 떄, 데이터 형식 뒤에 ?를 붙여야 null 대입 가능
//(null 값이 아님을 표시)
var d : Int = 10
d!!.add(100) //!!으로 널 값이 아님을 나타냄. 만약 이 경우 널이 들어가면 오류.
- 그렇다면 여기까지 배운 내용을 바탕으로 안드로이드 스튜디오를 한 번 구현을 해보자.
Q 본인 이름, 학번, 나이를 저장하고 출력하는 안드로이드 스튜디오 프로그램을 구현해라
1) 우선 xml에 대해서는 아직 본격적으로 배우지 않았으므로, 우선 xml에서는 아주 간단하게 TextView를 이용해서 구현해보도록 하겠다. 해당 xml 이름은 print.xml 이다. (참고로 나는 미적 감각이 처참할정도로 아예 없다.. 그냥 출력에 의의를 두겠다..)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_marginTop="20dp"
android:layout_height="match_parent">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_marginTop="20dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:textSize="34sp" />
<TextView
android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_marginTop="20dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:textSize="34sp" />
<TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_gravity="center"
android:textSize="34sp" />
</LinearLayout>
2) printAcvtivity.kt 코틀린 코드 구현(핵심)
- lateinit는 클래스 내 변수 사용이 가능하고, 널 값은 허용하지 않음, 나중에 초기화 가능하게 하는 기능이다.
- 이 방식은 앞으로 구현하고 코드를 깔끔하게? 사용하기에 좋은 구성이다.
- toString()은 int형을 string으로 변환하는 메서드로 이는 해당 객체의 값을 문자열로 변환함.(캐스팅 연산자x)
- 캐스팅 연산자는 "객체의 타입 자체"를 변환할 때, 사용하므로 as 연산자를 사용함.
- as : 명시적 캐스팅(실패시 예외 발생), as? : 안전한 캐스팅(실패시 널 반환) -> 밑의 코드 참고
//참고 : 모든 유형(int, string 등)이 any에 상속됨. 여기서는 캐스팅 연산자의 예시 차원에서 활용
//명시적 캐스팅
val obj: Any = "Hello, Kotlin!"
val str: String = obj as String // Any 타입을 String으로 캐스팅
//안전한 캐스팅
val obj: Any = 123
val str: String? = obj as? String // 실패 시 null 반환
println(str) // 출력: null
package com.cookandroid.a0211
import android.os.Bundle
import android.widget.TextView
import androidx.activity.ComponentActivity
class PrintActivity : ComponentActivity() {
lateinit var name: TextView //lateinit는 클래스 전체에서 해당 변수를 사용할 수 있도록 함. null 허용 x, 나중에 초기화o,
lateinit var number: TextView
lateinit var age: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.print) // 레이아웃 연결
// 레이아웃이 로드된 후 findViewById 호출
name = findViewById(R.id.name)
number = findViewById(R.id.number)
age = findViewById(R.id.age)
val studentName = "사브리나 카펜터" // 학생 이름
val studentNumber = "19990511" // 학번
val studentAge = 25 // 나이
name.text = studentName
number.text = studentNumber
age.text = studentAge.toString() // Int를 String으로 변환
}
}
2-1) printAcvtivity.kt 코틀린 코드 구현
- 위의 문제는 아주 단순하기에 위의 방식을 굳이 따를 필요는 없다.
- 다만, 이 방식은 아주~ 간단한 코드에만 사용할 수 있으므로 권장 X
import android.os.Bundle
import android.widget.TextView
import androidx.activity.ComponentActivity
class PrintActivity : ComponentActivity() {
//lateinit var name: TextView
//lateinit var number: TextView
//lateinit var age: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.print) // 레이아웃 연결
// 레이아웃이 로드된 후 findViewById 호출
val name = findViewById<TextView>(R.id.name)
val number = findViewById<TextView>(R.id.number)
val age = findViewById<TextView>(R.id.age)
val studentName = "사브리나 카펜터" // 학생 이름
val studentNumber = "19990511" // 학번
val studentAge = 25 // 나이
name.text = studentName
number.text = studentNumber
age.text = studentAge.toString() // Int를 String으로 변환
}
}
3) 실행결과
이렇게 문제를 해결했다!
'안드로이드 프로그래밍📱 > Kotlin📲 개념' 카테고리의 다른 글
[Kotlin] 클래스와 인스턴스 (0) | 2025.02.13 |
---|---|
[Kotlin] 함수 (0) | 2025.02.13 |
[Kotlin] 배열 (0) | 2025.02.11 |
[Kotlin] 조건문:if, when (0) | 2025.02.11 |