[kotlin] 코틀린 문법 모아보기 (1)

소양·2022년 1월 20일
0

android

목록 보기
2/2
post-thumbnail

코틀린 문법 모아보기 (1)

코틀린 기초 문법

  • val vs var
  • Log: TAG
  • textView.append
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

  1. 배열
// 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] = '일'
  1. 컬렉션 (Generic)
// <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("변수명")) // 데이터 접근

내용이 길어져 다음 게시글에 이어서 작성합니다.

profile
쭈구리석사 🍀

0개의 댓글