[Android] Kotlin 기본 문법(14)
-
코틀린 기본 문법 - 쓰레드와 코루틴
# 쓰레드와 코루틴의 공통점- 동시성 프로그래밍을 위한 기술임 * 동시성 프로그래밍은 컨텍스트 스위칭이 중요한 개념 # 쓰레드와 코루틴의 차이점1) 쓰레드@작업 하나하나의 단위: Thread - 각 쓰레드가 독립적인 Stack 메모리 영역을 가짐 @동시성 보장 수단: Context Switching / 운영체제 커널에 의한 Context Switching을 통해 동시성을 보장 @블로킹(Blocking): 쓰레드 A가 쓰레드 B의 결과를 기다리고 있는 경우, 쓰레드 A는 블로킹 상태로 쓰레드 B의 결과가 나 올 때까지 해당 자원을 사용 불가 *예시) (1) 쓰레드 A가 태스크 1을 수행하는 동안 태스크 2의 결과가 필요하면 쓰레드 B를 호출 (2) 그동안 쓰레드 A는 블로킹되고, 쓰레드 B로 프..
2024.06.12 -
코틀린 기본 문법 - 코루틴
# 코루틴의 개념- 최적화된 비동기 함수를 사용- 하드웨어 자원의 효율적인 할당을 지원- 안정적인 동시/비동시 프로그래밍을 지원- 쓰레드보다 가볍게 사용 가능- 로직들을 협동해서 실행하자는 것이 목표 # 코루틴의 사용법- 일반적으로 사용하는 빌더: launch 빌더, async 빌더 1) launch - 결과값이 없는 코루틴 빌더/ Job 객체로 코루틴을 관리 2) async - 결과값이 있는 코루틴 빌더 / Deffered 타입으로 값을 리턴- 스코프로 코루틴의 범위를 지정할 수 있음 1) GlobalScope: 앱이 실행된 이후에 계속 수행되어야 할 때 해당 스코프 안에서 사용 2) CoroutineScope: 필요할 때만 생성하고 사용 후에 정리가 필요함- 코루틴을 실행할 쓰레드를 Dispa..
2024.06.12 -
코틀린 기본 문법 - 쓰레드
# 쓰레드의 개념 - 프로그램은 하나의 메인 쓰레드(실행 흐름)가 존재함- 하나의 메인 쓰레드는 fun main() (메인 함수)를 의미- 실습 프로그램은 메인 쓰레드 위에서 로직을 실행해 동시 처리가 불가능했음- 별도의 자식 쓰레드를 생성하여 동시에 로직 실행 가능- 코틀린은 thread 키워드로 쓰레드 생성 가능 # 쓰레드의 구조- 프로세스: 프로그램이 메모리에 올라가서 실행되는 것 = 프로세스 1개- 쓰레드는 프로세스 안에서 더 작은 작업의 단위를 의미- 쓰레드는 생성되어서 수행할 때 각 독립된 메모리 영역인 STACK을 가짐- 즉, 쓰레드를 한 개 생성하면 스택메모리의 일정 영역을 차지 # 예시 코드- 1부터 10까지, 50부터 60까지 출력하는 코드를 2개의 쓰레드로 경쟁- 1초마다 CPU 자..
2024.06.12 -
코틀린 기본 문법 - 비동기 프로그래밍
# 비동기/동기 프로그래밍의 개념- 비동기 프로그래밍: 요청을 보내고 결과값을 받을 때까지 멈추지 않고 다른 일을 수행 => 다양한 일을 한꺼번에 수행- 동기 프로그래밍: 요청을 보내고 결과값을 받을 때까지 작업을 멈춤 => 앞선 작업에 영향을 받으며 한 가지씩 작업 수행
2024.06.12 -
코틀린 기본 문법 - 확장 함수
# 확장 함수의 개념- 코틀린에서는 자바와 달리 외부에서 클래스의 메소드를 추가할 수 있음- 과도하게 사용하면 코드의 가독성을 해칠 수 있지만 장점도 존재함- 원하는 메소드가 있지만 내가 설계한 클래스가 아닐 때 외부에서 메소드를 관리함- 내 목적을 위해 외부에서 관리하기 때문에 원본 클래스의 일관성을 유지할 수 있음 # 예시 코드- 이름, 나이만 조회하는 메소드에서 등급을 조회하는 메소드를 추가하고 싶을 때 fun main() { // 확장함수를 통해 getGrade() 메소드를 추가해줌으로써 등급도 조회가 가능함 fun Student.getGrade() = println("학생의 등급은 ${this.grade} 입니다") var student = Student("참새", 10, "A+") ..
2024.06.12 -
Kotlin 기본 문법 - 유용한 기능
# 자료형의 변환1) 일반 자료형 간 변환- 숫자 자료형끼리: to자료형() 메서드 활용 가능- 문자열을 숫자로 변환 시: 별도의 메서드 필요 (예: Integer.parseInt(strNum5) var num1 = 20 var num2 = 30.2 var num3 = num2.toInt() var num4 = num1.toDouble() var strNum5 = "10" var strNum6 = "10.21" var num5 = Integer.parseInt(strNum5) var num6 = strNum6.toDouble() println("num3: $num3") println("num4: $num4") println("num5: $num5") ..
2024.06.11