제주 탈출 일지

kotlin 기반 Android App 개발 교육 정리 - 1일차 본문

kotlin

kotlin 기반 Android App 개발 교육 정리 - 1일차

귀건 2021. 2. 1. 11:00
728x90
반응형

기계어 - 어셈블리어 - C - java 순으로 발전해왔다.

언어가 발전할 수록 기계와 개발자 간 거리가 멀어짐.

 

C에서 컴파일을 하면 목적(object)파일이 생성되고 링킹과 로딩을 통해 실행파일로 만들어진다.

java에서는 컴파일을 하면 Class파일이 생성되고 실행 시 JVM에서 기계어로 실시간 컴파일 된다.

java에서는 포인터가 없기 때문에 가비지 콜렉터를 통해 메모리를 해제한다.

구조론, 운영체제를 잘 공부해야 한다.

 

2

사람이 사용하기 위한 프로그램의 요소.

문법 ui 공통.os

각 운영체제마다 다 프로그램을 새로 짠다.?

directX는 개발자가 직접 하드웨어를 다룰수 있도록 해주는 통로다.

os가 제공하는 걸 써야 예쁘당.

안드로이드에서는 액티비티를 가져다 쓰면 예쁘다..

 

오늘은 문법에 대해서 배울 것이다.

 

UI와 공통적인 OS에서 제공하는 것들은 Java에서 사용하던 것들을 코틀린에서 사용한다.

 

코틀린은 자바의 유료화로 인해 만들어졌다. 그래서 자바를 호환하지만, 자바의 한계를 벗어나기는 어렵다,,

 

java8이 개발자가 무료로 사용할 수 있는 마지노선 jdk이다.

www.oracle.com/java/technologies/javase-downloads.html

그리고 intelliJ를 설치한다.

www.jetbrains.com/idea/

 

IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains

A Capable and Ergonomic Java IDE for Enterprise Java, Scala, Kotlin and much more...

www.jetbrains.com

 

3

jdk, intelliJ 설치

 

HelloWorld, kotlin 버전 print 하기.

 

fun main(args: Array<String>) {
println("HelloWorld")
val kotlinVersion: KotlinVersion = KotlinVersion.CURRENT
println("${kotlinVersion.major}.${kotlinVersion.minor}.${kotlinVersion.patch}")
print(kotlinVersion.isAtLeast(1, 1,0))
// 특정 버전 이상인지 확인
}

 

4

프로그램은 함수, 파일, 클래스로 나누어 로직을 구현한다.

 

코틀린은 자바와 다르게 package의 경로가 실제 경로가 아니어도 동작한다.

(컴파일러가 자동적으로 경로를 생성하는 등의 처리를 해준다.)

 

코틀린 변수 선언

var(혹은 val) 변수명 : 타입 = 값

- var data1 : int = 10

val은 assign-once 변수이다.( java의 const와 유사하지만 변경할 수 있는 방법이 있다. 상수변수는 const val이다.)

값을 변경할 곳이 있다면 var, 없다면 val로 선언하는 것이 바람직하다.

코틀린은 자동 변수 초기화를 지원하지 않는다.

 

코틀린은 함수 내 함수 선언이 가능하다.

 

매개변수를 생략하기 위해서 기본 인수는 대체적으로 뒤쪽으로 놓는다.

- fun hello(name: String = "kimbs" , no:int) { } (X) -> hello(10) -> 에러.

- fun hello(no:int , name: String = "kimbs") { } (O) -> hello(10) -> 정상 컴파일.

 

함수를 중위 표현식 처럼 사용할 수 있다. infix 키워드를 사용해야 하고, 클래스의 멤버함수 | 확장함수 일때, 매개변수가 하나인 함수 일 떄 중위 표현식을 사용할 수 있다.

- obj.infixFun(10)는 obj infixFun 10 과 동일한 표현이다.

+ 확장함수는 기존 라이브러리에 새로이 함수를 정의하여 추가하는 것.

 

tailrec 키워드를 사용하여 재귀함수를 loop형태로 변경시켜줄 수 있다.(stack overflow 문제가 발생할 수 있기 때문)

조건의 마지막 구문은 재귀함수 콜이어야 한다.

tailrec fun sum(no:int){

 println("loopPrint")

return if(no==count) return else recPrint(no-1, count)

}

 

5

데이터타입.MAX_VALUE를 하면 그 데이터타입에서 가장 큰 값을 리턴해준다.

 

Char와 숫자 데이터 타입은 비교할 수 없다.

 

null 허용 타입의 경우 함수 리턴값에서도 적용할 수 있다. 만약 null을 포함하지 않는 리턴 값이라면 미리 처리를 해줘야 한다.

 

6

1..10 은 10이 포함되는 range연산.

1 until 10은 10이 미포함되는 연산.

 

전개 연산자 * 펼친다. 배열에만 사용할 수 있다. 다른 자료구조에서 사용하고 싶다면 array로 바꾼 후에 사용해야 한다.

 

연산자를 사용할 떄는 괄호를 사용해야 헷갈리지 않고 사용할 수 있다.

 

7

쓰레드를 사용하면 전체적인 수행시간에서 이득이다.

꼭 배워야한다.

프로그램의 대부분이 I/O에 시간을 사용하고 있기 때문,.

 

동기화 문제. 쓰레드가 동시에 파일에 쓰기 작업을 하게 되면 내용이 섞여 버린다.

@Synchronized 키워드를 통해서 동기화를 한다.

 

대기함수.?

 

코루틴 : 경량 스레드. 라고는 하지만 쓰레드가 아니다. 코드 상의 협력으로 동작하며, 멀티 스레딩의 컨텍스트 스위칭이 없다. 따라서 성능은 더 좋으나, 개발자가 정교하게 구현해야 한다는 문제가 있다.

 

 

 

 

 

728x90
반응형
Comments