import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.yeong.gitdog.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding // 지연 초기화
val TAG = "MainActivity" // Tag는 바뀌지 않으므로 한 번 선언해서 계속 재사용
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root // layout xml이 들어있다고 생각하면 됨
setContentView(view)
var myName = "김소영" // var: 값을 바꿀 수 있음
myName = "소영킴"
val PI = 3.141592 // val: 값이 바뀌지 않음 -> 주로 대문자로 선언
var myNumbers = "1,2,3,4,5,6"
var thisWeekNumbers = "1,2,3,4,5,6"
if(myNumbers == thisWeekNumbers){
binding.textLog.text = "당첨되었습니다."
} else {
binding.textLog.text = "당첨되지 않았습니다."
}
for(index in 1..10){
binding.textLog.append("\n현재 숫자는 ${index}입니다.") // String 추가
Log.d(TAG, "현재 숫자는 ${index}입니다.") // Logcat에서 확인 가능한 Log
}
}
}
// 코틀린의 기본타입
// 실수형
var doubleValue: Double = 35.6
var floatValue: Float = 123.7f // double보다 작은 범위, f를 붙여 double과 구분
// 정수형 (보통 다 int, long으로 써도 문제 없음)
var intValue:Int = 1234568
var longValue:Long = 32_147_483_647 // _로 끊어서 표기 가능
var shortValue:Short = 123 // 작은 수
var byteValue:Byte = 127 // 작은 수
// 문자형
var charValue:Char = 'a' // character는 '작은따옴표' 사용
var stringValue:String = "문자형 길이에 상관없이 값을 입력할 수 있다. = 크기를 특정할 수 없다는 의미"
// 불린형
var booleanValue:Boolean = true
// 상수 (개발자들의 약속: 상수 선언은 대문자로!)
val VALVALUE:Boolean = true
VALVALUE = false // 불가능: 오류 발생
// 변수 이름 작성 규칙
var helloWorld = "안녕 세상아!" // 낙타표기법: camel case
var hello_world = "안녕 세상!" // 뱀표기법: snake case
// 어떤 표기법을 사용하던 하나로 통일할 것 (일관성)
override fun onCreate(savedInstanceState: Bundle?) {
...
var value = 400
// 비교연산자 <, >, >=, <=, ==, !=
var result1 = 1 > 2 // 1 > 2의 결과가 boolean으로 전달
var result2 = value < 500
// 논리연산자 &&, || (비교식 조합에 사용), !(부정)
var logic1 = result1 && result2 // 둘다 true인지
var logic2 = result1 || result2 // 둘 중 하나 true인지
var logic3 = !result1 // 단항 부정연산자
// if
if(조건식 = 비교연산 + 논리연산){
// scope: {} 내부에서만 코드가 처리
process1()
} else if (조건식2){
// 또다른 조건을 비교하고 실행하는 코드 블럭
}
else {
// 위 조건을 모두 만족하지 않았을 때 실행되는 코드 블럭
process2()
}
// when - 거의 대부분의 언어에서 switch
// 코틀린 when - if문의 확장판
when(비교할 대상){
값 -> {
// 코드블럭
}
}
// ex)
when(month){
in 3..5 -> println("봄입니다.")
6 -> println("6월입니다.")
9 -> println("9월입입니다.")
10, 11 -> {
println("가을입니다.")
}
else -> println("그 외의 월입니다.")
}
// 분기가 많을 경우, when문이 if문보다 가독성이 좋다.
}
fun process1(){ }
fun process2(){ }
하나의 변수에 여러 값을 저장할 수 있는 data type
// Int -> IntArray
var intArr:IntArray = IntArray(10) // 개수
// index = 0부터 시작 ~ (size - 1)
intArr[0] = 10
intArr[9] = 90
// Char -> CharArray
var weekArray:CharArray = CharArray(7)
weekArray[0] = '월'
// ...
weekArray[6] = '일'
// <Generic(제네릭)>
// 리스트, 뮤터블리스트
// (뮤터블: 배열과 달리 개수를 특정하지 않음; 동적)
var mutableList = mutableListOf<Int>()
// 값 넣기
mutableList.add(5) // index 0 자동생성
mutableList.add(16) // index 1
// 접근: 배열과 동일
println(mutableList[0])
// 맵 ( 키, 밸류 )
var mutableMap = mutableMapOf<String, String>() // Generic(제네릭) 2가지 type
mutableMap.put("변수명", "변수값") // 데이터 추가
println(mutableMap.get("변수명")) // 데이터 접근
내용이 길어져 다음 게시글에 이어서 작성합니다.