본문 바로가기

전체 글58

[Kotlin 문법 종합] - 쓰레드, 코루틴 (# 추가하기) 1. 쓰레드 : 로직을 동시에 실행할 수 있게 함 // thread 키워드로 생성 - 작업 하나하나의 단위 : Thread (각각 독립적인 스택메모리영역 가짐) - 하나의 메인 쓰레드가 존재 = 메인함수 = 실행흐름 //최소 1개의 메인 쓰레드는 존재해야 - 동시성 보장 수단 : Context Switching (운영체제 커널에 의한) * Blocking : 스레드 A가 스레드 B의 결과를 기다리고 있을 때, A는 블로킹 상태. - A는 B의 결과가 나오기 전에는 해당 자원을 사용하지 못함 - 스레드 A가 task 1을 수행하는 동안 task 2의 결과가 필요 -> 스레드 B를 호출함 - 스레드 B 호출-> (1) 스레드 A는 블로킹됨 (2) 스레드 B로 프로세스 간 스위칭 발생 -> task 2 수행 .. 2024. 3. 6.
[Kotlin 문법 종합] - 확장함수, 비동기 프로그래밍 @@@수정하기 1. 확장함수 : 기존 클래스에 쉽게 메소드 추가가 가능 //지금까지는 클래스에 원하는 메소드를 다 정의하고 시작했음 - 자바와 달리 외부에서 클래스의 메소드 추가 가능 (+) 내 목적을 위해 외부에서 관리해, 원본 클래스의 일관성 유지 가능 (-) 과도한 사용 시 가독성 해침 *주의사항 1) 확장함수는 public 멤버에만 접근 가능 2) private, protect 멤버에 접근하려면 클래스 내부 멤버함수 형태가 적합 //-> getter setter st인듯... 3) 클래스의 멤버함수처럼 상속할 수 없음 = 하위 클래스에서 확장함수를 리디파인(오버라이드) 불가능 fun String.isEmailValid(): Boolean { val pattern = "[a-zA-Z0-9._-]+@[a-z]+\\.. 2024. 3. 6.
[Kotlin 문법 종합] - 여러 인스턴스 리턴, 자신의 객체 전달 @@수정하기 1. 여러 인스턴스 리턴 : 두 개 이상의 데이터를 포함하는 데이터클래스를 만들고 인스턴스 리턴하기 //메소드는 기본적으로 하나의 데이터를 리턴함 1) Pair = 2개의 인스턴스 리턴 var chicken = Chicken() var eggs = chicken.getEggs() var listEggs = eggs.toList() // 리스트로 관리 var firstEgg = listEggs[0] // = eggs.first var secondEgg = listEggs[1] // = eggs.second println("달걀의 종류는 ${eggs} 입니다.") //(달걀, 맥반석) // Pair println("리스트 달걀의 종류는 ${listEggs} 입니다.") //[달걀, 맥반석] // toList.. 2024. 3. 6.
[Kotlin 문법 종합] - 자료형 변환, 타입확인 @@@ 수정하기 1. 자료형 변환 1) 일반 자료형간의 변환 (1) 숫자 자료형끼리 = .to자료형() var num1 = 20 var num2 = 30.2 var num3 = num2.toInt() var num4 = num1.toDouble() (2) 문자열 -> 숫자 @@@@근데 Integer.parseInt 안해도 toInt만 해도 되던데...?? 뭐지 다시보기 var strNum5 = "10" var strNum6 = "10.21" var num5 = Integer.parseInt(strNum5) //int로 변환 var num6 = strNum6.toDouble() //double로 변환 2) 객체 자료형간의 변환 : 상속관계에서 가능 (1) 업 캐스팅 (부모클래스의 자료형을 가지고 자식클래스의 객체 생성) .. 2024. 3. 6.
[Kotlin 문법 종합] - Single-expression function, 싱글턴 (@@질문하기) 1. Single-expression function : 람다식을 이용해 메소드를 간결하게 정리 가능 * 람다식 구조 : 다른 함수의 인자로 넘김 / 함수의 결과값으로 반환 / 변수에 저장 하는 함수 {매개변수1, 매개변수2... -> 코드 } * 예시 1 : 세 개의 숫자를 받아 평균을 반환하는 함수(를 람다식으로 정의) fun add(num1:Int, num2:Int, num3:Int) = (num1+num2+num3)/3 fun main(){ println(lambdaExample({x,y -> x+y}, 20, 30)) //람다식 함수를 인자로 넘김 } fun lambdaExample(sum: (Int, Int) -> Int, a: Int, b: Int): Int = sum(a, b) //위와 동.. 2024. 3. 6.