본문 바로가기

안드로이드 프로그래밍/kotlin

[Android Studio] kotlin 기본 문법1( 변수, 조건문 )

📌 변수


▼ 변수 var

- 변수 Variable 란 : 값을 임시로 메모리 (저장 공간)에 저장하고 그 저장 공간에 이름을 부여한 것을 말한다.

- 변수는 이름과 값으로 구성되는데 변수에 이름을 부여하고 값을 입력하는 행위는 메모리의 특정 위치에 이름표를 붙이고 값을 담아두는 것과 같다.

 

- 2가지 방법으로 선언하고 사용할 수 있다.

 

   1. 변수 선언과 동시에 값 넣기

 

      - 값이 입력되는 순간 해당 값의 형태(문자, 숫자, 불린 등)로 변수의 타입이 결정된다.

var 변수명(이름) = 값

ex)  var myName = "김어나"

 

 

   2. 값으로 초기화하지 않고 선언만 하고 사용하기

 

     - 선언만 할 경우에는 반드시 먼저 변수명 옆에 콜론(:) 구분자를 붙여서 타입(자료형)을 지정해야 한다.

var 변수명 : 타입
변수명 = 값

ex)  var myAge: Int
      myAge = 26

 

 

=> 변수는 한 번 타입을 결정하면 동일한 타입의 값만 담을 수 있다!

 

 

 

 

▼ 데이터 타입

- 코틀린에서 제공되는 기본 데이터 타입

구분 데이터 타입 설명 값의 범위 및 예
숫자형 Double 64비트 실수 -1.7E+308 근사값 ~ 1.7E+308 근사값
Float 32비트 실수 - 3.4E+38 근사값 ~ 3.4E+38 근사값
Long 64비트 정수 -2E63 ~ 2E63-1
Int 32비트 정수 -2,147,483,648 ~ 2,147,483,647
Short 16비트 정수 -32,768 ~ 32,767
Byte 8비트 정수 -128 ~ 127
문자형 Char 1개의 문자 '글'(외따옴표)
String 여러 개의 문자 "여러 개의 글자" (쌍따움표)
불린형 Boolean true, false 두 가지 값 true 혹은 false

 

- 기본타입(Primitive Type) : 변수에 저장되는 값의 크기가 미리 정해져 있는 타입

 

- String 은 기본타입이 아니다. 쌍따옴표(" ") 사이에 몇 글자가 들어가도 상관없기 때문에 값의 크기를 특정할 수 없기 때문이다.

 

 

 

 

1. Double

- 소수점이 있는 값을 저장할 때 사용

var doubleValue: Double
doubleValue = 3.141592

 

 

 

2. Float

- double 과 동일한 용도이지만 더 작은 범위의 숫자를 저장할 때 사용

- Float 의 경우 숫자 끝에 'F' 를 붙여줌

var floatValue: Float
floatValue = 3.141592F

 

 

 

3. Int

- 소수점이 없는 정숫값을 저장할 때 사용

var intValue: Int
intValue = 2147483647

 

- 가독성을 높이기 위해 언더바( _ )로 자릿수를 구분해줄 수 있다. 

var intValue: Int
intValue = 2_147_483_647

 

 

 

4. Long

- Int 보다 큰 범위의 정수를 저장

- 숫자의 끝에 'L' 을 붙여줌

var longValue: Long
longValue = 2147483647L

 

 

 

5. Short 와 Byte

- Int보다 값의 크기가 작은 정숫값 저장

var shortValue: Short = 32_767
var byteValue: Byte = 127

 

* 타입을 지정하지 않은 숫자는 모두 Int 타입으로 인식한다!
var byteValue = 127   ---> 127이 int 타입으로 저장된다.

 

 

 

6.  Char

- 하나의 글자만 외따옴표(' ') 로 감싸서 저장

- char은 타입을 특정하지 않아도 외따옴표 안에 하나의 글자만 지정하기 때문에 char 로 저장됨

var charValue = 'A'

 

 

 

7. String

- 여러 개의 문자를 저장, 기본 타입 x

var stringValue: String = "ABCDE"

 

 

 

8. Boolean

- true, false 둘 중에 1개의 값을 저장

- 주로 조건문에서 의사결정을 하기 위한 용도로 많이 사용

var boolValue = true

 

 

📕 문자열 템플릿
- 문자열 내부에서 달러($) 기호를 넣으면 해당 영역에 문자가 아닌 코드라는 것을 알려준다.

var name = "유재석"
Log.d("BasicSyntax", "제 이름은 $name 입니다")       -----> 제 이름은 유재석 입니다.

 

 

 

 

▼ 읽기 전용 변수 val

- 앞의 var 와는 다르게 한 번 입력된 값은 변경할 수 없다.

- 변하지 않는 값을 미리 입력해둘 때 사용한다.

 

val 변수명(이름) = 값

* ERROR, val 은 값을 변경할 수 없다.
val language = "kotlin"
language = "java"    ----> error

 

 

 

▼ 상수 const

- 주로 기준이 되는 변하지 않는 값을 입력해둘 때 사용하며, 읽기 전용 변수인 val 앞에 const 키워드를 붙여서 만든다.

const val PI = 3.141592

 

- val 과 같이 읽기 전용인 것은 동일하지만, 컴파일 시에 값이 결정되기 때문에 Int, Long 과 같은 기본형과 문자열인 String 만 입력할 수 있다.

 

 

 

 

▼ 코딩 컨벤션 Coding Convention

 - 각 프로젝트별로 코드를 작성하는 규칙을 만든다.

 

 

1. 클래스명

- 클래스란? 코드를 알아보기 쉽게 하나의 파일에 모아 놓은 것

- 대체로 클래스의 네이밍 컨벤션(명명 규칙)은 캐멀 케이스(Camel Case) 를 사용한다

-> 단어의 첫 글자는 대문자로, 나머지 글자는 소문자로 표기, 새로운 단어가 나타나면 첫 글자를 대문자로 표기 (마치 낙타의 등처럼 높낮이가 생긴다고 해서 낙타표기법)

 

class MainActivity

 

 

2. 함수명과 변수명

- 캐멀 케이스를 따르며 첫 글자만 소문자로, 이후 새로운 단어의 첫 글자는 대문자로 표기

fun onCreateActivity( ) 


var intValue: Int

 

 

* 요즘 함수명과 변수명을 스네이크 케이스로 작성하는 경우도 많음(가독성이 좋기 때문)

  다만, 스네이크 케이스는 상수명만 대문자를 사용하고 다른 때는 소문자 사용

fun on_create_activity( )

 

 

 

3. 상수명

- 모두 대문자로 작성

const val HELLO: String = "안녕"

 

- 상수명이 2개의 단어로 이루어져 있다면 단어 사이를 언더바 ( _ ) 로 구분하는 스네이크 케이스(Snake Case) 를 사용

cont val HOW_AGE_YOU: String = "어떻게 지내?"

 

 

 

 



📌 조건문

- 조건문이란 특정 조건에 따라 실행을 달리하고자 할 때 사용

- 제어문

- 제어문 에는 크게 조건문에 해당하는 if, when / 반복문에 해당하는 for while 이 있다.


▼ 조건문 if

- 조건문이란 주어진 조건식의 결괏값이 참인지 거짓인지에 따라 코드를 실행할 것인지 혹은 다른 코드를 실행할 것인지 판단하기 위한 프로그래밍 문법이다.

 

- if 문의 조건식에는 비교 연산자(==, <,>) 와 논리 연산자(&&, ||)를 사용한 조건식만 사용 가능하며, 

조건식의 결과는 Boolean 타입인 true와 false 로 나타난다.

 

- 비교 연산자 

 

 

▒ 비교 연산자 예시

var a = 30
var b = 19
var bigger = a > b
Log.d("비교 연산자", "a는 b 보다 큽니다 : $bigger")

---> a는 b보다 큽니다 : true

 

 

- 논리 연산자 

 

 

▒ 논리 연산자 예시

var a = 30
var b = 19
var c = 37
var bigger = a > b && a > c
Log.d("비교 연산자", "a는 b보다 크고, c보다도 큽니다 : $bigger")

----> a는 b보다 크고, c보다도 큽니다 : false

 

1. if문

if (조건식)  {
   조건식이 참일 경우 실행되는 코드 영역
}

 

2.  if ~ else 문

if (조건식 )  {
   조건식이 일 경우 실행되는 코드 영역
} else {
   조건식이 거짓일 경우 실행되는 코드 영역
}

 

3.  if ~ else if ~ else 문

if (조건식1 )  {
   조건식1의 결과가 참일 경우 실행되는 코드 영역
} else if (조건식2) {
   조건식1 의 결과가 거짓이고, 조건식2의 결과가 참일 경우 실행되는 코드 영역
} else {
   조건식1과 조건식2의 결과가 모두 거짓일 경우 실행되는 코드 영역
}

 

 

- 변수에 직접 if문 사용하기

var a = 5
var b = 3
var bigger = if (a > b) a else b

 

 

- if문의 마지막 값을 반환값으로 사용하기

var a = 5
var b = 3
var bigger = if (a > b) {
   var c = 30
   a  //마지막 줄의 a 값이 변수 bigger 에 저장됨
}else {
   b
}

 

 

 

▼ 조건문 when

- 코틀린을 제외한 거의 모든 컴퓨터 언어에서는 switch 라고 사용되며 선택문이라고 불리기도 한다.

switch (변수) {
       case 비교값 :
             // 변수값이 비교값과 같다면 이 영역이 실행된다.
}

 

 

- 코틀린에서의 when 문은 특정 값을 선택할 수 있는 switch 의 사용법에 if문의 범위 비교 기능이 더해진 if문의 확장판이라고 생각하면 좋다.

when (파라미터) {   // 괄호 안에 특정 변수를 할당하는 것을 파라미터 라고 한다
      비교값 -> {   // 화살표 연산자(Arrow Operator)
           // 변수값이 비교값과 같다면 이 영역이 실행된다.
     }
}

 

 

- 여러 개의 값을 하나의 when 문에서 비교

when (파라미터) {   
      비교값1 -> { 
            // 변수값이 비교값1과 같다면 이 영역이 실행된다.
     }
      비교값2 -> {  
           // 변수값이 비교값2과 같다면 이 영역이 실행된다.
     }
      else -> {
           // 변수값이 앞에서 비교한 값들과 다르면 이 영역이 실행된다.
     } 
}

 

 

- 콤마로 구분해서 사용

package com.~~
...
import android.util.Log
...
   var now = 9
   when (now) {
        8 , 9 -> {
             Log.d("when", "현재 시간은 8시 또는 9시 이다")
       }
        else -> {
             Log.d("when", "현재 시간은 9시가 아니다")
       }
   }

 

 

- 범위 값을 비교하기 ( in 을 사용하여 범위 값 비교 )

package com.~~
...
import android.util.Log
...
   var ageOfMichael = 19
   when (ageOfMichael ) {
        in 10..19 -> {
             Log.d("when", "마이클은 10대 이다.")
       }
       ! in 10..19 -> {
             Log.d("when", "마이클은 10대 아니다.")
       }

        else -> {
             Log.d("when", "마이클의 나이를 알 수 없다.")
       }
   }

 

 

- 파라미터 없는 when 사용 (when 다음에 오는 괄호를 생략하고 마치 if문처럼 사용할 수 있다)

package com.~~
...
import android.util.Log
...
   var currentTime = 6
   when {
        currentTime == 5 -> {        
             Log.d("when", "현재 시간은 5시이다.")
       }      
        currentTime > 5 -> {
             Log.d("when", "현재 시간은 5시가 넘었다.")
       }
        else -> {
             Log.d("when", "현재 시간은 5시 이전이다.")
       }
   }

 

 

 

▒ if문과 when 문은 언제 사용할까?

더보기

연도 데이터 : 범위가 한정할 수 없고 개수가 많다   ---> if문

요일 데이터 : 값을 특정할 수 있고 개수가 7개로 한정되어 있다   -> when 문

 

범위가 넓고 값을 특정할 수 없는 경우에는 if문을 사용해서 처리하는 것이 바람직

 

 

 

 

 

 

 

 


 


 

 

728x90
반응형