전공수업/Kotlin

[Kotlin] 모바일프로그래밍 2-3주차(1)

aaahyunseo 2024. 10. 12. 03:48

 

2024-1 모바일프로그래밍 수업

교재 - 이것이 안드로이드다 whit 코틀린 (개정 3판)

개발 환경 - android studio


Chapter 3 - (1) 로그의 활용

로그(Log)

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

로그캣(Logcat)

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

▷로그를 통해 애플리케이션의 실행 중 상태를 모니터링하고, 오류 식별, 디버깅에 도움이 된다.

import android.util.Log

Log.d("tag","message")

tag 로그캣에서 검색용도로 사용하는 태그 이름

message 로그캣을 통해 실제 출력할 메세지

📍로그 함수

Log.v()

(verbose) 상세한 로그 내용 출력

Log.d()

(debug) 개발에 필요한 내용 출력 - 개발자용

Log.i()

(information) 정보성의 일반적인 메세지를 전달

Log.w()

(warning) 에러는 아니지만 경고성 메세지를 전달

Log.e()

(error) 실제 에러 메세지를 출력

*로깅(logging) : 소프트웨어 실행 중에 발생하는 이벤트나 상태를 기록하는 것.


Chapter3 - (2) 변수

변수(variable)

: 임시로 메모리(저장공간)에 저장하고 그 저장 공간에 이름을 부여한 것.

*변수는 최초 선언 시 타입 결정.

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

var 변수명 = 값

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

var 변수명: 타입

변수명 = 값

데이터 타입의 종류는 다른 언어들과 동일한데,

안드로이드 스튜디오에서 주의해야 할 점은

Float의 경우 숫자 끝에 'F'를 붙여주고,

Long 타입의 경우 숫자 끝에 'L'을 붙여줌.

var floatValue = 3.141592F
var longValue = 21545676L

char의 경우 ''(작은따옴표) 사용,

string의 경우 ""(큰따옴표) 사용.

문자열 내부에서 달러($) 기호를 넣으면 해당 영역이 문자가 아닌 코드로 인식.

Log.d("tag","제 이름은 $name 입니다.")

읽기 전용 변수 val

: var과 다르게 한 번 입력된 값은 변경할 수 없음.

*상수와 비슷하지만 상수는 아님.

val 변수명 = 값

*val로 정의된 변수는 값을 변경할 수 없으므로 변경 시 에러 발생.

상수 const

: 변하지 않는 값을 입력해둘 때 사용.

읽기 전용 변수인 val 앞에 const 키워드를 붙임.

const val PI = 3.141592

🛠️

val vs. const

상수컴파일 시간에 결정되고 변경 불가능,

val실행 시간에 결정되고 변경 불가능.

즉 val은 클래스나 생성자 호출로 초기화 가능하지만

const val 은 컴파일 시간에 결정되기 때문에 기본 자료형, 문자열만

입력할 수 있음.

*컴파일(Compile) : 프로그래밍 언어로 작성된 소스 코드를

컴퓨터가 실행 가능한 형태인 기계 코드로 변환하는 과정.


코딩 컨벤션(Coding Convention)

: 각 프로젝트별로 코드를 작성하는 규칙.

클래스명

-첫 글자는 대문자

-새로운 단어의 첫 글자도 대문자

(즉, Camel Case 적용)

함수명과 변수명

-첫 글자는 소문자

-새로운 단어의 첫 글자만 대문자

(Camel Case 적용된 것)

상수명

-모두 대문자로

-2개 이상의 단어일 시 언더바(_)로 구분

(즉, Snake Case 적용)


Chapter3 - (3) 조건문

if문

( if - else if - else )

구조는 다른 문법들과 동일하므로

따로 설명 X.

단, 변수에 직접 if문을 사용할 때는

if문 마지막 줄에 있는 값이 변수 값으로 지정됨.

var bigger = if(a>b){ var c = 30 a //해당 값이 변수 bigger에 저장. }else{ b //해당 값이 변수 bigger에 저장. }

*문자열 템플릿: 문자열 안에서 수식 사용하기

변수가 하나인 경우에는 $변수 의 형태로 사용,

추가적인 연산식이 필요한 경우에는 ${코드 블록} 안에 수식 입력

"문자열은 ${변수 + 1} 이다."

when

코틀린에서는 다른 언어에서 사용되는 switch문과 같은

선택문이 when 구문 역할을 한다.

코틀린에서 when 문은 특정 값을 선택할 수 있는 switch의 사용법에

if문의 범위 비교 기능이 더해진 if문 확장판 느낌임.

when(파라미터){ 비교값1->{ } 비교값2->{ } else->{ } }

▷특정 값의 결과 처리가 동일하다면 비교값은 ',' 를 사용해서 한 번에 비교할 수 있음.

▷in으로 범위 값을 비교할 수도 있음. ( 예를 들어, 10..19 )

▷파라미터 없이 if문을 사용할 수 있음. ( 예를 들어, a==5->{ } )


Chapter3 - (4) 배열과 컬렉션

배열(Array)

: 여러 개의 값을 담을 수 있는 대표적인 자료형.

▷먼저 개수를 정해 놓고 사용해야 함.

var 변수 = Array(개수)

▷배열 객체는 Int, Long, Char 등과 같은 기본 타입 뒤에 Array를 붙여서 만듦.

IntArray(), LongArray(),DoubleArray()...

1) 문자 배열에 빈 공간 할당하기

: String은 기본 타입이 아니므로

다음과 같이 숫자 만큼의 빈 문자열로 된 배열 공간을 할당.

var stringArray = Array(10, {item->" "})

2) 값으로 배열 공간 할당하기

: arrayOf 함수를 사용해서 String 값을 직접 할당.

var dayArray = arrayOf("Mon","Tue","Wed","Thu")

3) 배열에 값 입력하기

배열명[인덱스] = or

배열명.set(인덱스, 값)

4) 배열에 있는 값 꺼내기

배열명[인덱스] or

배열명.get(인덱스)

*배열의 인덱스 범위를 벗어났을 경우 Exception 발생 후 프로그램 종료.

java.lang.ArrayIndexOutOfBoundsException; //에러발생

컬렉션(Collection)

: 여러 개의 값을 넣을 수 있는 자료형이면서

다른 이름으로는 동적 배열이라고함.

▷배열과 달리 공간의 크기를 처음 크기로 고정하지 않고 임의의 개수를 담을 수 있음.

컬렉션은 크게 List, Map, Set 이 있음.

▷코틀린에서는 동적 자료형을 사용할 때 뮤터블(Mutable)이라는 접두어를 붙임.

mutableList, mutableMap, mutableSet

🪄코틀린은 컬렉션 데이터 타입을 설계할 때

모두 이뮤터블(변할 수 없는 데이터 타입)로 설계되어

원래 용도인 동적배열로 사용하기 위해 뮤터블 접두어를 붙여 사용해야 함.


리스트(list)

: 저장되는 데이터에 인덱스를 부여한 컬렉션이며 중복 값을 입력할 수 있음.

var list = mutableListOf("mon","tue","wed")

add() 변수 추가하기

list.add("tue")

*입력 순서대로 인덱스 지정.

get() 리스트에 입력된 값 사용하기

list.get(1)

set() 리스트 값 수정하기

list.set(1,"수정할 값")

removeAt() 리스트에 입력된 값 제거하기

list.removeAt(1)

<> 빈 리스트 사용하기

var 변수명 = mutableListOf<컬렉션에 입력될 값의 타입>()

*제네릭(Generic)

: <> 컬렉션이 사용하는 값의 타입을 지정하기 위한 도구.

size() 컬렉션 개수 가져오기

list.size

🪄괄호의 유무에 따라 함수와 프로퍼티 구분

괄호가 있으면 함수(set, get 등),

괄호가 없으면 프로퍼티(size 등)


(set)

: 중복을 허용하지 않는 리스트.

▷리스트와 유사하지만 인덱스로 조회할 수 없고,

get 함수 지원X.

String 타입으로 값 입력받기(빈 셋으로 초기화)

var set = mutableSetOf<String>()

셋 사용하기

▷인덱스로 조회하는 함수가 없으므로

특정 위치의 값을 직접 사용할 수 없음.

Log.d("tad","set 전체 출력 = ${set}") //set에 있는 전체 값 출력.

remove() 셋 삭제하기

set.remove("mon")

*셋은 값이 중복되지 않으므로 직접 조회해서 삭제 가능.


(map)

: 키(key)값(value)의 쌍으로 입력되는 컬렉션.

맵 생성하기(빈 맵 생성)

var map = mutableMapOf<String, String>()

*맵은 제네릭으로 키와 값의 데이터 타입을 지정해줘야 함.

put() 맵에 값 추가하기

map.put("key1","value1")

get() 맵 사용하기(value 꺼내기)

map.get("key1") //키를 입력해서 값을 꺼냄.

put() 맵 수정하기

map.put("key1","change msg") //put 함수를 사용할 때 동일한 키를 가진 값이 있으면 키는 유지된 채로 그 값만 수정.

remove() 맵 삭제하기

map.remove("key1") //키를 입력해서 값 삭제.

▷리스트와 다르게 인덱스에 해당하는 키의 값이 변경되지 않고 그대로 유지됨.

→key를 직접 지정해주기 때문, 리스트는 자동 지정이라 삭제 시 인덱스 값이 하나씩 당겨짐.

*컬렉션 값의 단위 = 엘리먼트

컬렉션에 입력되는 값은 각각 엘리먼트라고 지칭.

(맵의 값과 혼동될 수 있기 때문)

list 엘리먼트 → 리스트의 값

map 엘리먼트 → 맵의 키와 값


이뮤터블 컬렉션(Immutable Collection)

: 크기를 변경할 수 없으면서 값 또한 변경할 수 없는 컬렉션.

▷입력 값을 변경할 수 없으므로 add나 set 함수는 지원하지 않음.

최초 입력된 값을 사용만 할 수 있음.(배열과 달리 값의 변경도 불가능)

기존 컬렉션에서 mutable 접두어를 제거하면 됨.

mutableListOf() → listOf()

*이뮤테이블 컬렉션을 저장할 때는 val로 선언하고 변수명을 대문자로 표시.


Chapter3 - (5) 반복문

for문

for(반복할 범위){ //실행 코드 }

for(변수 in 시작값..종료값){ //실행 코드 }

: 시작값부터 종료값까지 반복.

for(변수 in 시작값 until 종료값){ //실행 코드 }

: until은 종료값 이전까지만 반복.

for(변수 in 시작값..종료값 step 3){ //실행 코드 }

: 3씩 증가.(건너뛰기)

for(변수 in 시작값 downTo 종료값){ //실행 코드 }

: 시작값부터 종료값까지 감소시키기

for(변수 in 배열 또는 컬렉션){ //실행 코드 }

: 배열이나 컬렉션을 엘리먼트의 개수만큼 반복.


while문

while(조건식){ //실행 코드 }

다른 언어들과 동일함.

do{ //실행 코드 }while(조건식)

do-while문은 조건과 상관없이 처음 한 번 로그 무조건 출력.


반복문 제어

이것도 다른 언어들과 동일함.

break 반복문 탈출.

(반복문을 완전히 벗어나기 위해 사용)

continue 다음 반복문으로 이동.

(반복문 도중에 다음 반복문으로 넘어가기 위해 사용)

🪄for문 vs. while문

for문

정해진 범위만큼 코드를 반복하기 위해 사용.

while문

for문과 달리 정해진 범위가 아닌,

특정 조건을 만족할 때까지 코드를 반복하기 위해 사용.


Chapter3 - (6) 함수

: 함수는 fun으로 정의하고, 반환값이 있는 함수는 내부에서 return으로 값을 반환함.

*함수는 코드를 사용할 수 있는 최소 단위.

fun 함수명(파라미터 이름: 타입): 반환 타입{ return}

*파라미터와 반환값이 없을 경우에는 둘 다 작성하지 않음.

▷코틀린에서 함수 파라미터를 통해 입력되는 모든 값은 변하지 않는 이뮤터블임.

∴코틀린에서의 함수 파라미터는 모두 읽기 전용 키워드 val이 생략된 형태.

fun 함수명(name1: String, name2: Int=12, name3: Double){ } //파라미터의 기본값 정의와 호출