[새싹] 현대IT&E 240110 기록 - Kotlin

최정윤·2024년 1월 10일
0

새싹

목록 보기
50/67
post-custom-banner

00. 개발 환경 구축

0.2 안드로이드 스튜디오 설치하기

0.2.2 맥 OS

https://developer.android.com/studio?hl=ko

0.4 깃허브에서 예제 코드 내려받기

https://github.com/code-with-joyce/must_have_android

01. 안드로이드 코틀린 앱개발 입문

1.1 안드로이드와 코틀린

1.1.1 안드로이드

  • 안드로이드는 구글이 만든 모바일 운영체제이다.
  • 리눅스 기반이다.
  • 안드로이드 장점 중 하나는 오픈 소스라는 점이다.
  • 누구든 코드를 볼 수 있고 접근 가능하기 때문에, 개발자나 단말기를 생산하는 사람들은 기기의 호환성에 맞게 다양한 변화를 줄 수 있다.
  • 개발자들이 직접 오류를 발견하거나, 새로운 제안을 할 수도 있어서 안드로이드 플랫폼은 끊임없이 변화하고 있다.

1.1.2 코틀린

  • 코틀린은 자바처럼 JVM에서 동작하는 프로그래밍 언어이다.
  • 최근에 만들어진 언어로서 다른 프로그래밍 언어에서 검증된 해법과 기능을 포함하고 있다.
  • 자바에서 발생하는 수많은 문제를 해결할 목적으로 만들어졌기 때문에 매우 실용적이고 간결하다.
  • 안드로이드 초기에는 자바로 앱을 개발했으나 코틀린이 구글 안드로이드 정식 언어로 지정된 후, 구글이 안드로이드 개발에서 Kotlin First를 표방하면서 메인 언어로 자리매김하였다.
  • 간결함: 기능이 다양한 표준 라이브러리를 제공해 상용구 코드를 적게 작성하면서도 아이디어를 풍부하게 표현할 수 있다.
  • 더 안전한 코드: 널 포인터 예외와 같은 일반적인 프로그래밍 실수를 방지하는 다양한 장치를 제공한다.
  • 호환성: 자바와 100% 호환되므로 자바로 작성된 코드도 자유롭게 사용할 수 있다. 반대로 자바 환경에서도 코틀린을 아무 문제 없이 사용할 수 있다.
  • 구조화된 동시 실행: 코틀린 코루틴을 사용하면 비동기 코드를 쉽게 사용할 수 있다. 코루틴을 이용하면 네트워크 호출, 로컬 데이터 액세스에 이르는 백그라운드 작업을 효과적으로 간단히 구현하고 관리할 수 있다.

1.1.3 안드로이드 스튜디오

  • 안드로이드 앱을 만드는데 안드로이드 스튜디오를 사용한다.

1.2 앱 개발 과정 살펴보기

1. 기획&디자인

  • 만드려는 앱의 구동 방식과 기능을 기획하고, 와이어프레임으로 대략적인 구조도를 그린다.
  • 프로젝트의 전체 일정을 계획한다.
  • 스케치3, 피그마, 어도비XD 같은 도구를 활용하여 디자이너가 디자인한다

2. 앱 개발

  • 앱에 따라서 서버가 필요할 수도, 아닐 수도 있다.
  • 협업할 개발자와 일정을 맞추어 개발한다
  • 어떤 디자인 패턴을 적용할지 등을 고민하고 인고의 시간을 보내면서 앱을 만든다

3. 테스트

  • 개발자가 직접 수행하는 단위 테스트와 QA엔지니어가 수행하는 기능성 테스트가 있다.
  • 개발자가 작성한 함수가 정상 작동하는지 확인한는 단위 테스트는 버그를 줄이고 코드의 품질을 높인다.
  • QA 엔지니어가 중점을 두고 테스트하는 것
    • 기능적으로 잘 구현되었는가?
    • UI/UX가 요구사항대로 표현되었는가?
    • 성능이 적절한가? (화면 로딩 속도, 이미지/영상 등 콘텐츠 로딩 속도)

4. 배포 및 관리 과정

  • 만든 앱을 bundle 혹은 apk파일로 만들어서 모든 사람이 사용할 수 있도록 마켓에 올리는 과정이다.
  • 마켓에 제출한 앱이 구글의 승인을 얻어 공개되기까지는 일주일 정도 소요된다.
  • 업로드 후에도 앱을 업데이트할 수 있다.

1.3 프로젝트 생성 방법



1.6 에뮬레이터로 실행하기





업로드중..

1.7 실제 기기로 실행하기

  • [설정] -> 빌드번호 검색 -> 빌드번호를 클릭해 이동
  • 개발자 모드를 켰습니다. 팝업이 뜰때까지 빌드번호를 여러 번 계속 터치
  • 개발자 모드를 활성화하고 [설정] -> 검색창에 개발자 옵션을 검색

업로드중..

02. 코틀린 문법 빠르게 살펴보기

2.2 코틀린 기본

2.2.1 변수와 상수

println("Hello world")
val pi : Double = 3.14 // val 변수명 : 자료형
println(pi)

val name = "gil-dong" // 형추론 (String)
println(name)

var age = 21
println(age)
age = 25
println(age)

2.2.2 기본 자료형

숫자(정수, 실수) 자료형

val numByte : Byte = 100
val numShort : Short = 20
val numInt : Int = 1 // 자료형 생략 가능
val numLong : Long = 2L // 자료형 생략 가능

val numDouble : Double = 3.2 // 자료형 생략 가능
val numFloat : Float = 3.2f // 자료형 생략 가능

문자 자료형

val char : Char = 'H' // 자료형 생략 가능

val string1 : String = "Hi, This is String" // 자료형 생략 가능

val isTrue : Boolean = true // 자료형 생략 가능

배열 자료형

val stringArray : Array<String> = arrayOf("apple", "banana", "grape")
println(stringArray[0])
val intArray = arrayOf(1,2,3) // 자료형 생략

println(stringArray[0]) // apple
println(intArray[2])    // 3

명시적 형변환

// 명시적 형변환
val score = 100 // Int 형
println(score.javaClass)
println(score.javaClass.kotlin)

val scoreString = score.toString() // String 형
val scoreDouble = score.toDouble() // Double 형
println(scoreDouble) // 100.0
println(scoreDouble.javaClass.kotlin) // 100.0

연산

// 산술연산
println("${a} + ${b} = ${a + b}")
println("${a} - ${b} = ${a - b}")
println("${a} * ${b} = ${a * b}")
println("${a} / ${b} = ${a / b}")
println("${a} % ${b} = ${a % b}")

// 관계연산
println("${a} > ${b} : ${a > b}")
println("${a} < ${b} : ${a < b}")
println("${a} >= ${b} : ${a >= b}")
println("${a} <= ${b} : ${a <= b}")
println("${a} == ${b} : ${a == b}")
println("${a} != ${b} : ${a != b}")

// 논리연산
val b1 = true
val b2 = false
println("${b1} and ${b2} : ${b1 and b2}")
println("${b1} && ${b2} : ${b1 && b2}")
println("${b1} or ${b2} : ${b1 or b2}")
println("${b1} || ${b2} : ${b1 || b2}")
println("! ${b1} : ${! b1}")

// 마이너스 값에 대한 나머지 연산시 부호를 따라감. 자바와 같음.
println("${a} % ${b} = ${a % b}")
val a2 = -7
println("${a2} % ${b} = ${a2 % b}")

// 두 객체가 메모리 상에서 동일한 위치를 가리키는지 확인
println("${a} === ${b} : ${a === b}")
val c = a
println("${a} === ${c} : ${a === c}")

// 두 객체가 메모리 상에서 서로 다른 위치를 가리키는지 확인
println("${a} !== ${b} : ${a !== b}")
println("${a} !== ${c} : ${a !== c}")

2.2.3 함수

fun printAge(age : Int) : Unit {
    println(age)
}

printAge(15)

fun printAge2(age : Int) {
    println(age)
}

printAge2(15)

fun addNum(a : Int, b: Int) : Int {
    return a + b
}

println(addNum(200, 400))   // 600

fun minusNum(a : Int, b : Int) = a-b

println(minusNum(minusNum(1000, 200), 100)) // 700

2.2.4 문자열 템플릿

val price = 3000
val tax = 300
val originalPrice = "The original price is $price"
val totalPrice = "The total price is ${price + tax}"

println(originalPrice) // The original price is 3000
println(totalPrice) // The total price is 3300

2.3 제어문

2.3.1 범위 클래스

val numRange : IntRange = 1..5

println(numRange.contains(3)) // true
println(numRange.contains(10)) // false

val charRange : CharRange = 'a'..'e'
println(charRange.contains('b')) // true
println(charRange.contains('z')) // false

2.3.2 for 문

// for 문
for (i in 1..5) {
    println(i) // 1, 2, 3, 4, 5
}

for (i in 5 downTo 1) {
    println(i) // 5, 4, 3, 2, 1
}

for (i in 1..10 step 2) {
    println(i) // 1, 3, 5, 7, 9
}

val students = arrayOf = arrayOf("jun-gi", "jun-su", "si-u", "yeon-seo", "jun-seo")

for(name in students) {
    println(name)
}

for((index,name) in students.withIndex()) {
    println("Index : $index Name : $name")
}

2.3.4 while 문

// while 문
var num = 1

while(num < 5) {
    println(num)
    num++
}

2.4 컬렉션

2.4.1 리스트(List)

// 리스트
val numImmutableList = listOf(1,2,3)
numList[0] = 1

val numMutableList = mutableListOf(1,2,3)
numMutableList[0] = 100 // 첫 번째 요소를 1에서 100으로 변경

println(numMutableList) // [100, 2, 3]
println(numMutableList[0]) // 100

println(numMutableList.contains(1))
println(numMutableList.contains(2))

2.4.2 셋(Set)

// 셋
val immutableSet = setOf(1,1,2,2,2,3,3)
println(immutableSet)

val mutableSet = mutableSetOf(1,2,3,3,3,3)
mutableSet.add(100)
mutableSet.remove(1)
mutableSet.remove(200)

println(mutableSet)
println(mutableSet.contains(1))

2.4.3 맵(Map)

// 맵
val immutableMap = mapOf("name" to "junsu", "age" to 13, "age" to 15, "height" to 160)
println(immutableMap)

val mutableMap = mutableMapOf("돈까스" to "일식", "짜장면" to "중식", "김치" to "중식")
mutableMap.put("막국수", "한식")
mutableMap.remove("돈까스")
mutableMap.replace("김치", "한식")
println(mutableMap)
profile
개발 기록장
post-custom-banner

0개의 댓글