이 포스팅은 고돈호 님의 이것이 안드로이드다 with 코틀린(한빛미디어)을 기반으로 작성되었습니다.

1.1 if 문

다음의 예시를 살펴보자

package kr.co.kibeom.basicsyntax

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() { // 새로운 블록의 시작
    override fun onCreate(savedInstanceState: Bundle?) { // 4 칸 공백
        super.onCreate(savedInstanceState) // 이전 4칸의 공백에 추가로 4칸의 공백 즉 8칸 공백
        setContentView(R.layout.activity_main)

        var myNumber = "1, 2, 3, 4, 5, 6"
        var yourNumber = "1, 2, 3, 4, 5, 6"

        if(myNumber == yourNumber) {
            Log.d("checkIf", "myNumber와 yourNumber가 일치합니다.")
        }
        else {
            Log.d("checkIf", "myNumber와 yourNumber가 다릅니다.")
        }
    }
}

myNumber와 yourNumber가 일치하므로 if문이 실행되어 myNumber와 yourNumber가 일치한다는 메시지가 뜨는 것을 확인할 수 있다. 이는 다음의 Log를 통해 알 수 있다.

반대로 일치하지 않다면 else문 안의 Log가 출력이 되는것을 알 수 있다.


1.2 if문 & else if문

이번에는 if문과 else if문의 차이점을 알아보자.

package kr.co.kibeom.controlflow1

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var a = "abc"
        var b = "abcde"
        var c = "abcdefg"

        // if 문 두번 사용
        if (a.length < b.length) {
            Log.d("ControlFlow", "1: a는 b보다 길이가 작습니다.")
        }
        if (a.length < c.length) {
            Log.d("ControlFlow", "1: a는 c보다 길이가 작습니다.")
        }

        // else if문 사용
        if (a.length < b.length) {
            Log.d("ControlFlow", "2: a는 b보다 길이가 작습니다.")
        } else if (a.length < c.length) {
            Log.d("ControlFlow", "2: a는 c보다 길이가 작습니다.")
        }
    }
}

이 코드를 실행하면 다음의 결과가 나오는 것을 확인할 수 있다.

즉 이 결과를 통해 if문의 경우 2개의 if문이 모두 실행된것을 확인할 수 있고 if문 else if문의 경우 if문이 실행되면 else if문이 실행이 안되는 것을 확인할 수 있다.


1.3 그 밖의 if문 활용

if문의 조건식 결과를 변수에 대입할 수 있다. 예시는 다음과 같다.

package kr.co.kibeom.controlflow1

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var goalOfSon = 3
        var goalOfKim = 5

        var winner = if (goalOfSon < goalOfKim) {
            Log.d("SCORE_Result", "Kim이 Son보다 많은 골을 넣었습니다.")
            goalOfKim
        } else {
            Log.d("SCORE_Result", "Son이 Kim보다 많은 골을 넣었습니다.")
            goalOfSon
        }

        Log.d("SCORE_Result", "가장 많은 골을 넣은 사람이 넣은 goal은 ${winner} 입니다.")
    }
}

이를 실행하면 다음의 Log를 확인할 수 있다. 즉 if문의 결과가 변수 winner에 대입이 되는것을 확인할 수 있다.


2.1 When 조건문

when 조건문은 다른 언어에서의 switch문과 비슷하다. 구조는 다음과 같다.

when (파라미터) {
    비교값 -> {
        // 변숫값이 비교 값과 같다면 이 영역이 실행됩니다.
    }
}

이것을 예시로 보면 다음과 같다.

package kr.co.kibeom.controlflow1

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var age = 25
        when (age) {
            23 -> {
                Log.d("when", "나이가 23살 입니다.")
            }
            24 -> {
                Log.d("when", "나이가 24살 입니다.")
            }
            25 -> {
                Log.d("when", "나이가 25살 입니다.")
            }
            26 -> {
                Log.d("when", "나이가 26살 입니다.")
            }
        }
    }
}

실행 결과의 Log를 확인해보면 다음과 같다.

위의 예시에서 콤마를 통해 범위를 비교할 수 있다. 이를 예시로 확인하면 다음과 같다.

package kr.co.kibeom.controlflow1

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var age = 25
        when (age) {
            23, 24 -> {
                Log.d("when", "나이가 23살 또는 24살 입니다.")
            }
            25, 26 -> {
                Log.d("when", "나이가 25살 또는 26살 입니다.")
            }
            26, 27 -> {
                Log.d("when", "나이가 26살 또는 27살 입니다.")
            }
        }
    }
}

역시 실행 후 Log를 확인하면 다음과 같다.

in을 통해 범위값을 비교할 수도 있다. 이는 다음과 같다.

package kr.co.kibeom.controlflow1

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var age = 25
        when (age) {
            in 10..19 -> {
                Log.d("when", "당신의 나이는 10대 입니다.")
            }
            !in 10..19 -> {
                Log.d("when", "당신의 나이는 10대가 아닙니다.")
            }
        }
    }
}

실행한 후 Log를 확인해보면 다음과 같다.


 

'안드로이드 앱 개발' 카테고리의 다른 글

6. 함수  (0) 2021.12.20
5. 반복문  (0) 2021.12.19
4. 배열과 컬렉션  (0) 2021.12.14
2. 변수  (0) 2021.12.12
1. 코틀린의 기본적인 문법  (0) 2021.12.12
이 포스팅은 고돈호 님의 이것이 안드로이드다 with 코틀린(한빛미디어)을 기반으로 작성되었습니다.

1.1 변수 var

변수(variable)란 값을 임시로 메모리에 저장하고 그 저장공간에 이름을 부여한 것을 의미한다. 변수는 다음 그림과 같이 이름과 값으로 구성된다.

변수의 구성

변수는 변수의 이름앞에 var을 붙여서 선언할 수 있는데 변수 선언과 동시에 값 넣기, 값으로 초기화하지 않고 선언만 하고 사용하기로 나뉠 수 있다. 각각 알아보면 다음과 같다.


1. 변수 선언과 동시에 값 넣기 - 입력되는 값으로 타입을 추론할 수 있다. 

var 변수명(이름) = 값

ex) 변수명 mySubject에 문자열 "안드로이드"를 입력하는 예시

var mySubject = "안드로이드"

2. 값으로 초기화하지 않고 선언만 하고 사용하기 (반드시 변수명 옆에 : 붙여서 자료형 지정하기)

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

ex) 변수명 myHeight에를 Int 타입으로 선언하고 다음 줄에서 정수형 180을 입력하는 예시

var myHeight: Int
myHeight = 180

1.2 결론

위의 1, 2 예시를 통해 변수는 최초 선언 시 타입이 결정된다는 것을 알 수 있다. 또한 변수는 한번 타입이 결정되면 결정된 타입과 동일한 타입의 값만 넣을 수 있다. 즉 다시 말하면 위의 mySubject 변수에 180을 넣을 수는 없다.


2.1 데이터 타입

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

var doubleValue: Double
doubleValue = 3.14

 

Float : Double과 동일하지만 Double에 비해 범위가 작다

var floatValue: Float
floatValue = 3.14F // Double과 구분하기 위해 F를 붙이는 것을 확인할 수 있다.

 

Int : 정수를 저장할 때 사용

var intValue: Int
intValue = 123456789

 

Long : Int보다 큰 범위

var longValue: Long
longValue = 123456789

 

Short, Byte : 두 경우 모두 정숫값을 저장하는 데 사용하지만 Int 보다 작은 범위

var byteValue: Byte = 123
var shortValue: Byte = 123

 

Char : 하나의 글자만 ' '로 감싸 지정

var charValue = 'A'

 

String : 여러 개의 문자를 지정할 수 있음

var stringValue: String = "Android"


Boolean : true, false 둘 중 1개의 값 지정 가능

var boolValue = true

2.2 출력 예시

package kr.co.kibeom.basicsyntax

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var mySubject = "안드로이드"
        var myHeight: Int
        myHeight = 180
        myHeight += 1
        Log.d("BasicSyntax", "mySubject = $mySubject, myHeight = $myHeight")
    }
}

 

로그 창


3.1 읽기 전용 변수 val

var과 다르기 읽기 전용인 val이 있다. 이 val은 var과 다르게 값을 변경할 수 없다. 선언하는 방법은 다음과 같이 변수와 동일하다.

val 변수명(이름) = 값

변하지 않는 값을 미리 지정해두고 필요에 따라 다른 값과 조합하여 사용할 수 있다.

val familyName = "김"
var fatherName = familyName + "아빠"
var sonName = familyName + "아들"

따라서 val로 지정한 값을 바꾸려 하면 에러가 발생한다.


3.2 const 상수

상수는 주로 기준이 되는 변하지 않는 값을 입력할때 사용, 읽기 전용 변수인 val 앞에 const를 붙여 사용한다.

const val PI = 3.14

val과 변경할 수 없다는 점에서 일치하지만 컴파일 시에 값이 결정되기 때문에 Int, Long과 같은 기본형과 문자열인 String만 입력할 수 있다.


4.1 코딩 컨벤션

코딩시에 지켜야 할 일종의 규칙

 

1. 클래스명 camel case로 작성

class MainActivity // 첫 글자는 대문자 새로운 단어의 첫 글자 대문자

2. 함수명

fun onCreateActivity() // 첫 글자는 소문자, 새로운 단어의 첫 글자만 대문자

3. 변수명

var intValue: Int // 첫 글자는 소문자, 새로운 단어의 첫 글자만 대문자

4. 상수명

const val PI = 3.14 // 모두 대문자
const val PI_VALUE = 3.14 // 두 개의 단어로 이루어져 있다면 단어 사이를 '_' 로 연결

5. 들여쓰기

package kr.co.kibeom.basicsyntax

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() { // 새로운 블록의 시작
    override fun onCreate(savedInstanceState: Bundle?) { // 4 칸 공백
        super.onCreate(savedInstanceState) // 이전 4칸의 공백에 추가로 4칸의 공백 즉 8칸 공백
        setContentView(R.layout.activity_main)
    
        var mySubject = "안드로이드"
        var myHeight: Int
        myHeight = 180
        myHeight += 1
        Log.d("BasicSyntax", "mySubject = $mySubject, myHeight = $myHeight")
    }
}

'안드로이드 앱 개발' 카테고리의 다른 글

6. 함수  (0) 2021.12.20
5. 반복문  (0) 2021.12.19
4. 배열과 컬렉션  (0) 2021.12.14
3. 조건문  (0) 2021.12.12
1. 코틀린의 기본적인 문법  (0) 2021.12.12
이 포스팅은 고돈호님의 이것이 안드로이드다 with 코틀린(한빛미디어)을 기반으로 작성되었습니다.

1.1 새 프로젝트 생성

[Create New Project] - [Empty Activity] - [NEXT] 새로운 프로젝트 생성


1.2 로그의 활용 

(d는 debug를 의미, 첫 번째 매개변수는 검색 용도로 사용되는 태그, 두 번째 매개변수는 출력할 메시지 입력)

1
Log.d("태그", "출력 메시지");
cs

MainActivity.kt을 다음과 같이 수정 단 import android.util.Log는 직접 import 해주기

package kr.co.kibeom.basicsyntax

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.d("BasicSyntax", "로그를 출력합니다. method = Log.d")
    }
}

이를 실행시키면 다음과 같다.

 

MainAcivity.kt

이 후 안드로이드 스튜디오 하단의 [Logcat] 탭을 클릭해서 창을 연 후 Log.d의 태그로 입력했던 BasicSyntax를 검색하면 여러 로그 중 BasicSyntax에 해당하는 로그만 볼 수 있다.

Logcat에 BasicSyntax를 검색해서 본 모습


1.3 결론

따라서 우리는 다음의 정보들을 알 수 있다.

Log : 코딩 시 코드의 흐름을 파악하기 위해 앱 외부에 출력하는 정보. 

Logcat : 출력되는 로그를 모아서 보는 도구

 

여러 로그들은 다음과 같다. (외울 필요는 없다.)

함수 의미 내용
Log.v() verbose 상세한 로그 내용을 출력하기 위해 사용
Log.d() debug 개발에 필요한 내용을 출력하기 위해 사용
Log.i() information 정보성의 일반적인 메시지 전달하기 위해 사용
Log.w() warning 에러는 아나지만 경고성 메시지 전달하기 위해 사용
Log.e() error 실제 에러 메시지를 출력하기 위해 사용

 

 

'안드로이드 앱 개발' 카테고리의 다른 글

6. 함수  (0) 2021.12.20
5. 반복문  (0) 2021.12.19
4. 배열과 컬렉션  (0) 2021.12.14
3. 조건문  (0) 2021.12.12
2. 변수  (0) 2021.12.12

+ Recent posts