목록전체 글 (116)
App노자
1. 개요 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun MacOS의 주요 업데이트 이후 Terminal에서 git을 사용할 때 가끔 위에 같은 error현상이 발생하면서 Terminal을 사용할 수 없는 현상이 발생한다 xcrun은 명령줄에서 개발자 도구를 찾거나 실행할 수 있는 방법을 제공하는 명령이며 현재 활성화된 개발자 도구의 경로가 유효하지 않다는 오류를 출력하고 있다 2. 해결 방법 xcode-select --install 워의 명령어를 실행시켜 주면 간단하게 해결된다 xc..
1. 동시성 프로그래밍 동시성 프로그래밍(Concurrency Programming)은 컴퓨터 프로그램에서 여러 작업이 동시에 실행되는 상황을 다루는 프로그래밍 기법이다 여기서 "동시에 실행"은 물리적으로 동시에 실행되는 것이 아니라 매우 짧은 시간 동안 번갈아 가며 실행되는 것을 의미한다 프로그래밍에서 순서대로 작업을 수행하여 1개의 루틴을 완료한 후 다른 루틴을 실행하는 방식을 동기적이라고 한다 순차적인 프로그램보다 로딩되는 UI를 보여줄 때 네트워크는 다운로드해야 하고, 목록을 끌어올리면 지속적으로 UI를 갱신하며 아이템 목록을 업데이트하는 등의 여러 개의 루틴이 선행 작업의 순서나 완료 여부와 상관없이 실행되어야 하는 경우가 많은데 이때 사용 되는 방식을 비동기적이라고 한다 Kotlin에서는 co..
1. object란? Kotlin에서는 객체 표현식(object expressions)과 객체 선언(object declarations)으로 새 하위 클래스를 명시적으로 선언하지 않고 일부 클래스를 약간 수정한 객체를 만들 수 있다 object 키워드는 다양한 상황에서 사용하지만 클래스를 정의하면서 동시에 인스턴스(객체)를 생성한다는 공통점이 있다 object 키워드를 크게 다음과 같이 2가지 형태로 사용한다 1. 익명 클래스의 객체를 만들기 위한 객체 표현식 (object expressions) 2. 싱글턴을 정의하기 위해 사용하는 객체 선언 (object declaration) 3. 싱글턴과 정적 멤버를 정의하기 위해 사용하는 객체 선언 (companion object) https://kotlinla..
1. TelephonyManager란? TelephonyManager는 단말의 통신 서비스 정보에 대한 액세스를 제공한다 Android는 기기의 통신 상태, SIM 일련번호, 네트워크 정보, 전화번호 등과 같은 휴대전화 관련 정보를 TelephonyManager 클래스를 사용하여 얻을 수 있다 일부 전화 통신 정보에 대한 액세스는 권한으로 보호되고 있으며 매니페스트 파일에 권한이 선언되어 있지 않으면 애플리케이션이 보호된 정보에 액세스 할 수 없으며 일부 정보는 기기나 네트워크의 상태에 따라 사용 불가능한 경우도 있다 https://developer.android.com/reference/android/telephony/TelephonyManager TelephonyManager | Android Dev..
1. Drawerlayout이란? DrawerLayout은 Android 앱에서 네비게이션 드로어 (Navigation Drawer) 패턴을 구현하기 위해 사용하는 레이아웃 컨테이너이다 Drawerlayout은 평소에는 액티비티 화면 한쪽에 숨겨져 보이지 않던 내용이 사용자가 왼쪽이나 오른쪽에서 손가락의 움직이는 액션을 취하면 밀려 나와 화면에 나타내는 기능을 한다 androidx의 라이브러리인 Drawerlayout은 Drawer라는 단어가 뜻하는 것처럼 서랍처럼 열리고 닫히는 것 메뉴를 구성할 때 사용한다 https://developer.android.com/jetpack/androidx/releases/drawerlayout?hl=ko Drawerlayout | Android 개발자 | Androi..
1. Closure란? 클로저란 람다식으로 표현된 내부 함수에서 외부 범위에 선언된 변수에 접근할 수 있는 개념을 말한다. 람다식 또는 익명 함수는 외부 범위에서 선언된 변수를 클로저에 액세스 할 수 있으며 람다식 안의 클로저에 포획(캡처)된 변수는 람다에서 수정할 수 있다. 기본적으로 함수 안에 정의된 변수는 지역 변수로 스택에 저장되어 있다가 함수가 끝나면 같이 사라지는데 클로저 개념에서는 포획한 변수는 참조가 유지되어 함수가 종료되어도 사라지지 않고 함수의 변수에 접근하거나 수정할 수 있게 해 준다. 아래는 클로저의 조건이다 - final변수를 포획한 경우 변수 값을 람다식과 함께 저장한다 - final이 아닌 변수를 포획한 경우 변수를 특정 래퍼로 감싸서 나중에 변경하거나 읽을 수 있게 한다 이때..
1. let() 함수 public inline fun T.let(block: (T) -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block(this) } let() 함수는 Nullable 객체의 안전한 호출 및 변환을 도와주는 유용한 함수이다 객체가 null이 아닌 경우에만 특정 동작을 수행하거나 변환을 수행한다는 특징을 갖고 있다 제네릭의 확장 함수 형태이므로 어디든 적용할 수 있으며 특히 Nullable 객체를 다룰 때 자주 사용된다 let() 함수는 함수를 호출하는 객체 T를 이어지는 block의 인자로 넘기고 block의 결괏값 R을 반환한다 매개변수로는 람다식 형태인 block가 있고 T를 매개변수..
1. by (Delegation)란? by키워드 코틀린에서 특정클래스를 확장하거나 이용할 수 있도록 위임을 할 때 사용한다 by를 사용하면 하나의 클래스가 다른 클래스에 위임하도록 선언하여 위임된 클래스가 가지는 멤버를 참조 없이 호출할 수 있다 프로퍼티 혹은 클래스 이름: 자료형 by 위임자 by키워드는 프로퍼티 위임에도 사용되는데 게터와 세터를 특정 객체에게 위임하고 그 객체가 값을 읽거나 쓸 때 수행하도록 만드는 것을 프로퍼티 위임이라고 한다 프로퍼티 위임을 위해서는 val, var와 같은 프로퍼티 선언을 위한 키워드, 프로퍼티의 이름, 자료형, by위임자가 필요하다 여기서 위임자란 프로퍼티나 클래스를 대신할 객체를 말한다 2. Class 위임 interface Car { fun go(): Stri..