오늘은 Kotlin 언어를 사용하여 안드로이드 앱 개발을 위해 공부를 시작한 첫째 날이다.
Java를 사용해서 작은 어플을 개발한 경험은 있지만 Kotlin을 사용해 본 건 처음이라 신세계였다
C언어를 쓰다가 Python을 만났을 때의 기분을 그대로 느꼈다.
먼저 xml 코딩을 통해 UI를 구성하고 이후에 Activity 기능 구현을 Kotlin 코딩으로 마무리한다.
[ UI 구현 - XML ]
[ BMI 계산기 UI - MainActivity ]
=> Main 화면을 구성하기 위해서 TextView, Button, EditText 사용
: TextView - 'BMI 계산기', '신장', '체중', 'cm', 'kg'
: EditText - 신장과 체중을 입력하는 칸
: Button - '확인하러 가기'
=> Result 화면을 구성하기 위해서 TextView, Button, ImageView 사용
: TextView - '당신의 BMI 계산 결과는?', '19.2', '정상 체중'
: Button - '돌아가기'
: ImageView - 무표정의 이모지
=> 또한 각각 Common에게 id를 부여하여 기능과 타입을 분류해서 코딩의 효율성을 높일 수 있다.
=> 위 이미지의 android:id="@+id/tv_main_title" 부분이 id를 부여하는 부분이다. tv_main_title은 TextView 타입의 메인 제목을 축약해서 알기 쉽게 적은 것이다.
[ 기능 구현 (Activity) - Kotlin ]
먼저 BMI 계산기 기능을 구현하려면 BMI 수치를 구하는 공식을 알아야 한다.
BMI 수치를 구하는 공식은 아래와 같다
* 유의점: 체중을 신장으로 나눌 때 신장의 단위가 cm가 아닌 m라는 점이다.
import kotlin.math.* // math 라이브러리 메소드 전체 사용
import kotlin.math.pow // math 라이브러리 메소드 중 pow 함수만 사용
ㄴ> 먼저 BMI 수치를 구하는 공식에는 제곱식이 있기 때문에 제곱을 표현할 수 있는 kotlin의 math 라이브러리를 사용해야 한다. 따라서 math 라이브러리를 import 한다.
// BMI 계산 (체중 / 신장(m) 제곱)
var value = weight / (height/100.0).pow(2.0)
value = round(value * 10)/10 // 소수점 첫째 자리까지 출력
ㄴ> 위 코드가 BMI 수치를 계산하는 코드이다. 제곱을 표현하기 위해 pow() 함수를 사용한다.
또한 신장 단위가 cm가 아닌 m라는 점을 생각하여 height를 100으로 나눈다.
// 결과창 출력 형태 설정
var resultText = ""
var resultImage = 0
var resColor = 0
// 조건문을 통해 BMI 수치 범위에 알맞은 결과 출력
if(value < 18.5) {
resultText = "저체중"
resultImage = R.drawable.img_lv1
resColor = Color.YELLOW
} else if(value >= 18.5 && value < 23.0) {
resultText = "정상 체중"
resultImage = R.drawable.img_lv2
resColor = Color.GREEN
} else if(value >= 23.0 && value < 25.0) {
resultText = "과체중"
resultImage = R.drawable.img_lv3
resColor = Color.BLACK
} else if(value >= 25.0 && value < 30.0) {
resultText = "경도 비만"
resultImage = R.drawable.img_lv4
resColor = Color.CYAN
} else if(value >= 30.0 && value < 35.0) {
resultText = "중정도 비만"
resultImage = R.drawable.img_lv5
resColor = Color.MAGENTA
} else {
resultText = "고도 비만"
resultImage = R.drawable.img_lv6
resColor = Color.RED
}
ㄴ> if문을 사용하여 각 범위에 맞게 텍스트와 이미지가 알맞게 나오도록 제어한다. (이미지 파일은 drawable이라는 폴더에 저장하여 불러와 사용한다.)
[ 사용된 Kotlin 문법 간단 정리 (기억해 둘 만한 것 위주) ]
1. val 변수와 var 변수
// 변수 선언
val heightEditText = findViewById<EditText>(R.id.et_height)
val weightEditText = findViewById<EditText>(R.id.et_weight)
val submitButton = findViewById<Button>(R.id.btn_check)
// 변수 선언, 신장과 체중
val height: Int = heightEditText.text.toString().toInt()
val weight: Int = weightEditText.text.toString().toInt()
ㄴ> 위 코드는 val 타입으로 선언된 변수이며 val 변수는 Value로 불변 변수이며 값이 할당된 이후로 변경할 수 없다. (단, 특정 클래스의 매개변수 타입이 var 변수이고 클래스 내부에 선언된 멤버 변수는 val 변수로 선언해도 변경 가능하다.)
// BMI 계산 (체중 / 신장(m) 제곱)
var value = weight / (height/100.0).pow(2.0)
value = round(value * 10)/10 // 소수점 첫째 자리까지 출력
// 결과창 출력 형태 설정
var resultText = ""
var resultImage = 0
var resColor = 0
ㄴ> 위 코드는 var 타입으로 선언된 변수이며 var 변수는 Variable로 가변 변수이다. var 변수는 값이 할당된 이후에도 값을 변경할 수 있다.
=> 따라서 가변되는 값을 담을 변수는 var로 선언하고 값이 변경되면 안 되는 경우엔 val로 변수를 선언하여 버그 발생 가능성을 낮추면 된다.
2. Intent 를 통한 Activity 간 값 전달
// MainActivity 에서 입력된 정보를 보냄 (Intent, intent.putExtra)
val intent = Intent(this, ResultActivity::class.java)
intent.putExtra("height", height)
intent.putExtra("weight", weight)
startActivity(intent)
ㄴ> 위 코드는 MainActivity에서 입력된 정보를 보내기 위해 작성된 코드다. 정보를 보내기 위해서는 putExtra() 메소드를 사용하면 된다.
// MainActivity 에서 보낸 값을 ResultActivity로 가져옴
val height = intent.getIntExtra("height", 0)
val weight = intent.getIntExtra("weight", 0)
ㄴ> 위 코드는 MainActivity에서 보낸 값을 ResultActivity로 가져오기 위한 코드이다. 정보를 가져오기 위해서는 getInExtra() 메소드를 사용하면 된다.
'Android' 카테고리의 다른 글
(Android Studio) - 레이아웃 종류와 쓰임새 (0) | 2024.03.19 |
---|---|
(Android Studio) 프로젝트 구조 (1) | 2024.03.18 |
(Android Studio) Activity 와 Fragment 의 차이점 (0) | 2024.02.29 |
(Kotlin) 개발 공부 3일차 - MBTI 테스트 (0) | 2024.02.28 |
(Kotlin) 개발 공부 2일차 - 로또 번호 생성기 (0) | 2024.02.27 |