기초다지기
[공식문서를 읽자] Classes and objects - Properties
Properties | Kotlin kotlinlang.org Declaring properties 코틀린 클래스에서 속성은 var 키워드를 사용하여 변경 가능으로 선언하거나 val 키워드를 사용하여 읽기 전용으로 선언할 수 있다. class Address { var name: String = "Holmes, Sherlock" var street: String = "Baker" var city: String = "London" var state: String? = null var zip: String = "123456" } 속성을 사용하려면 해당 이름으로 속성을 참조하면 된다. fun copyAddress(address: Address): Address { val result = Address() // ..
[공식문서를 읽자] Classes and objects - Inheritance
Inheritance | Kotlin kotlinlang.org Inheritance Kotlin의 모든 클래스에는 supertype(부모타입)이 선언되지 않은 클래스의 기본 superclass(부모클래스) Any라는 공통 슈퍼클래스가 있다. (자바의 Object 클래스와 비슷함). Any 클래스는 3가지 메소드를 가지고 있다. equals(), hashCode(), toString(). 모든 Kotlin 클래스가 해당 메서드를 가지고 있다. 기본적으로, 코틀린 클래스는 불변(final)이며, 상속할 수 없다. 클래스를 상속 가능하게 만드려면 open 키워드를 클래스에 붙여 표시한다. class Example // Implicitly inherits from Any open class Base // Cl..
[공식문서를 읽자] Classes and objects - Classes
Classes | Kotlin kotlinlang.org 코틀린에서 클래스는 class 키워드로 선언된다. class Person { /*...*/ } 클래스 선언은 클래스 이름, 클래스 헤더(유형 매개변수, 기본 생성자 및 기타 사항 지정) 및 중괄호로 묶인 클래스 본문으로 구성된다. 헤더와 본문은 모두 선택사항이다. 클래스에 본문이 없으면 중괄호를 생략할 수 있다. class Empty Constructors 코틀린에서 클래스는 기본 생성자와 하나 이상의 보조 생성자를 가질 수 있다. 기본 생성자는 클래스 헤더의 일부로 선언되며, 클래스 이름 뒤에 타입 매개변수와 함께 작성한다. class Person constructor(firstName: String) { /*...*/ } 기본 생성자에 anno..
[공식문서를 읽자] Packages and imports
Packages and imports | Kotlin kotlinlang.org 코틀린에서 소스파일은 패키지 선언으로 시작할 수 있다. package org.example fun printMessage() { /*...*/ } class Message { /*...*/ } // ... 이 패키지에는 소스 파일의 클래스, 함수 등 모든 내용이 포함되어 있다. 따라서 위의 예에서 printMessage()의 전체 이름은 org.example.printMessage이고 메시지의 전체 이름은 org.example.Message이다. 패키지가 지정되지 않은 경우 이러한 파일의 내용은 이름이 없는 default 패키지에 속한다. Default imports 기본적으로 모든 Kotlin 파일에 여러 패키지를 가져온다..
[공식문서를 읽자] Control Flow - Exceptions
Exceptions | Kotlin kotlinlang.org Exception classes 코틀린의 모든 예외 클래스는 Throwable 클래스를 상속받는다. 메시지, 스택 추적, 선택적 원인이 있다. 예외 객체를 throw하려면 throw 표현식을 사용한다. 더보기 예외 처리를 하기 위해서는 try-catch 표현식을 사용한다. try { // some code } catch (e: SomeException) { // handler } finally { // optional finally block } catch 블록은 0개 이상 존재할 수 있고, finally 블록은 생략할 수 있다. 단, 적어도 하나의 catch 또는 finally 블록이 필요하다. Try is an expression try는..

System Call
시스템 콜은 사용자나 응용 프로그램이 커널에서 제공하는 기능을 사용하기 위한 인터페이스 이다. 운영체제는 커널이 제공하는 서비스를 시스템 콜을 이용해 제한함으로써 컴퓨터 자원을 보호한다. 예) 프로세스 생성/종료, I/O 작업등이 있다. (fork, exec, exit, wait) Fork() 새로운 프로세스를 생성할 때 사용한다. Wait() child 프로세스가 종료될 때까지 기다리는 작업 (Wait를 통해서 child의 실행이 끝날 때까지 기다려준다. parent가 먼저 실행되더라도, wait()는 child가 끝나기 전에는 return하지 않기때문에 반드시 child가 먼저 실행된다. exec() 단순 fork는 동일한 프로세스의 내용을 여러번 동작할 때 사용한다. child에서는 parent와 ..
[공식문서를 읽자] Control flow - Returns and jumps
Returns and jumps | Kotlin kotlinlang.org 코틀린은 제어를 넘기는 세가지 구조적인 return과 jump 표현식이 있다. 이는 더 큰 표현식의 일부로 사용이 가능하다. Type은 Nothing 타입이다. return : return은 가장 가까운 블록의 함수 또는 익명 함수를 종료하고 반환된다. break : 가장 가까운 반복 루프를 중단시킨다. continue : 가장 가까운 반복 루프를 다음 반복으로 진행시킨다. val s = person.name ?: return Break and continue lables 코틀린의 모든 표현식은 레이블로 표현될 수 있다. break와 continue를 레이블과 함께 사용할 수 있다. 레이블과 함께 사용하는 경우 해당 레이블이 붙은..
[공식문서를 읽자] Control flow - Conditions and loops
Conditions and loops | Kotlin kotlinlang.org If expression 코틀린에서 if문은 표현식(값을 반환한다.)이다. 따라서, 일반 if가 역할을 잘 수행하기 때문에 삼항 연산자 (조건 ? then : else)가 없다. var max = a if (a b) { max = a } else { max = b } // As expression val max = if (a > b) a else b if 표현식의 분기는 블록이 될 수 있다. 이 경우에 블록의 값은 마지막 표현식이다. if 문을 값을 반환하는 식이나 변수에 값을 대입하기 위한 표현식으로 사용하는 경우, else 분기가 필수다...

인터럽트(Interrupt)
정의 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요하다고 CPU에 알리는 것 지금 수행 중인 일보다 더 중요한 일(입출력, 우선 순위 연산 등)이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속해야한다. 주 프로그램이 실행되다가 인터럽트가 발생했다. 현재 수행 중인 프로그램을 멈추고, 상태 레지스터와 PC 등을 스택에 저장한 뒤에 인터럽트 서비스 루틴으로 간다. 인터럽트 처리가 완료 되었다면, 마지막에 실행되던 주소로 점프하고, 주 프로그램을 실행한다. 이때, 인터럽트 기능이 없었다면, 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 계속 체크를 해주어야 될 것이다. 이러한 방식을 폴링이라고한다. 폴링 대상을 ..
[공식문서를 읽자] Types - Type checks and casts
Type checks and casts | Kotlin kotlinlang.org is and !is operators 객체가 주어진 Type을 준수하는지 여부를 식별하는 런타임에 타입 체크를 수행하려면 is 연산자 또는 부정 형식인 !is 를 사용하라. if (obj is String) { print(obj.length) } if (obj !is String) { // == !(obj is String) print("Not a String") } else { print(obj.length) } Smart casts 대부분의 경우, 코틀린 컴파일러는 변경 불가능한 값에 대해 is-check 및 명시적 캐스트를 추적하고 필요할 때 자동으로 (안전한) 형변환을 삽입하기 때문에 명시적 캐스트 연산자를 사용할 ..
[공식문서를 읽자] Types - Basic types
Basic types | Kotlin kotlinlang.org 코틀린에서 모든 것은 우리가 어떤 변수에 대해 멤버 함수와 Properties를 호출 할 수 있다는 점에서 객체이다. 일부 유형은 특수한 내부 표현을 가질 수 있다. 예를 들어 숫자, 문자, Boolean은 런타임 시에 primitive value로 표현될 수 있지만, 사용자가 보기엔 ordinary class(일반 클래스)로 보인다. Numbers Integer types 코틀린에서는 숫자를 표현하기 위해 여러개의 내장 타입을 제공한다. Type Size(bits) Min value Max value Byte 8 -128 127 Short 16 -32768 32767 Int 32 \(-2^{31}\) \(2^{31}-1\) Long 64 ..

안드로이드 프로세스 상태와 액티비티 상태
안드로이드 시스템에서는 제한된 리소스를 효율적으로 관리해야 한다. 그러면서 항상 사용자에게 응답할 수 있어야한다. 따라서, 안드로이드는 앱이 실행되는 프로세스와 앱을 구성하는 모든 컴포넌트의 생명주기와 상태를 전적으로 통제한다. 그래서 안드로이드 앱을 개발할때 생명주기 관리 모델을 이해하는 것이 중요하다! 앱이 실행될때 생길 수 있는 상태 변경에 대처할 수 있는 방법도 잘 숙지해두어야한다. 안드로이드 앱과 리소스 관리 안드로이드 앱은 안드로이드 운영체제 하에 별개의 프로세스로 실행된다. 그리고, 장치의 자원은 무한정 있는 것이 아니라 한정적이다. 이러한 자원이 꽉 차려고 할 때 시스템에서는 메모리 확보를 위해 프로세스를 중단한다. 어떤 프로세스를 중단할까? importance hierachy(중요도 서열..
[Java] 연산자
연산자 : 연산을 수행하는 기호 (+, -, *, / 등) 피연산자 : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식) 피연산자의 개수에 의한 분류 피연산자의 개수가 하나면 '단항 연산자', 두 개면 '이항 연산자', 세 개면 '삼항 연산자'라고 부름 이름 분류 종류 설명 기타 대입 연산자 단항, 대입 = 값을 대입할 때 사용 증감 연산자 단항, 증가 ++, -- 피연산자에 저장된 값을 1 증가 또는감소 전위에 붙으면 값이 참조되기 전 증감 후위에 붙으면 값이 참조된 후 증감 부호 연산자 단항, 부호 +, - 피연산자의 부호를 반대로 변경한 결과 반환 산술 연산자 이항, 대입 +, -, *, /, % 사칙 연산과 나머지 연산 나눗셈, 나머지 연산 : 0으로 나눌 시 런타임 에러 발생 비교 연산자 이항..
[공식문서를 읽자] Basic Syntax
Basic syntax | Kotlin kotlinlang.org Package definition and imports 패키지 명세와 import 문은 소스 파일의 최상단에 위치한다. 디렉토리와 패키지를 일치시킬 필요는 없다 : 소스 파일은 독단적으로(임의로?) 시스템에 배치할 수 있다. package my.demo import kotlin.text.* // ... Program entry point 코틀린 애플리케이션의 진입점은 main 함수이다. // 문자열 인자가 없는 main 함수 fun main() { println("Hello world!") } // 문자열 인자가 있는 main 함수 fun main(args: Array) { println(args.contentToString()) } Pr..

프로세스 & 스레드 (Process & Thread)
프로세스 실행중인 프로그램, 현대의 컴퓨팅 시스템에서 작업의 단위 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 된다. 프로세스의 현재 활동의 상태는 프로그램 카운터 값과 프로세서 레지스터의 내용으로 나타낸다. 프로세스의 메모리 배치는 일반적으로 여러 섹션으로 구분되며 아래와 같다. 텍스트 섹션 : 실행 코드 데이터 섹션 : 전역 변수 힙 섹션 : 프로그램 실행 중에 동적으로 할당되는 메모리 스택 섹션 : 함수를 호출할 때 임시 데이터 저장장소 (함수 매개변수, 복귀 주소 및 지역 변수) 텍스트 및 데이터 섹션의 크기는 고정되기 때문에 프로그램 실행 시간 동안 크기가 변하지 않는다. 그러나 스택 및 힙 섹션은 프로그램 실행 중에 동적으로 줄어들거나 커질 수 있다. 함수가 호출될 때마다 함수 매개변..