프로세스 내에 존재하며 프로세스가 할당받은 자원을 사용합니다. 스택 영역만을 따로 할당 받고, 이외의 영역들은 공유하기 때문에 다른 스레드의 작업 결과를 바로 확인할 수 있습니다. 다수의 스레드를 사용하여 하나의 프로그램을 동시에 처리하는 것을 멀티 스레드라고 합니다.
컴퓨터가 특정 동작을 수행하기 위해 작성된 실행 가능한 코드입니다. 프로그램 자체에는 수명이 없고 보조기억장치에 존재하며 실행되기를 기다리는 명령어와 데이터의 묶음입니다.
컴퓨터 시스템의 자원들을 효율적으로 관리하고, 사용자가 컴퓨터를 쉽고 편하게 사용할 수 있도록 환경을 제공하는 프로그램의 모임입니다. 프로세스, 저장 장치, 하드웨어, 사용자, 네트워킹 등을 관리합니다.
실행 가능한 프로그램으로 독립적인 메모리 공간을 가지기 때문에 다른 프로세스와 공유하지 않습니다. 하나의 프로세스는 최소한 1개의 스레드를 가집니다.
현실 세계의 사물을 객체로 만들고, 그 객체로부터 필요한 특징들만 뽑아서 프로그래밍 하는 것을 객체지향 프로그래밍이라고 합니다. 특징으로 추상화, 캡슐화, 상속성, 다형성이 있고, 모듈 재사용으로 확장 및 유지보수가 용이합니다.
모든 메서드가 추상 메서드로 이루어져 있습니다. 함수의 구현을 강제하여 구현한 객체들이 모두 동일한 동작을 하는 것을 보장해줍니다. 또, 표준화가 가능하고 클래스간 결합도를 낮출 수 있습니다.
객체를 정의하고 만들어 내기 위한 설계도 혹은 틀입니다.
클래스에 선언된 모양 그대로 생성된 실체를 말하며, 클래스의 인스턴스라고 부릅니다.
클래스를 통해서 구현해야할 객체가 실제로 구현된 구체적인 실체를 말합니다.(실제로 메모리로 할당된 상태)
애플리케이션의 전역정인 환경 정보로, 모든 컴포넌트들의 상위 클래스입니다.
액티비니나 애플리케이션의 상태나 정보를 가져올 수 있고, 리소스, 데이터베이스, 시스템 서비스에 접근할 수 있습니다.
HTTP URI를 통해 자원을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD 연산을 적용하는 것입니다. 자원과 자원에 대한 행위, 자원에 대한 행위의 내용으로 구성됩니다.
HTTP의 인프라를 그대로 사용하여 별도의 인프라를 구축 할 필요가 없고 서버와 클라이언트 역할을 명확하게 분리합니다. 다양한 클라이언트의 등장과 여러 디바이스에서도 통신하기 위해 사용합니다. 공식화된 표준이 존재하지 않는다는 단점을 가집니다.
개발자와 api 제공자 사이에 프로그램을 작성하기 위해 만든 인터페이스 입니다.
REST를 기반으로 API를 구현한 것으로, 요청을 보내는 주소만으로도 대략 이게 뭘 원하는 요청인지를 알아볼 수 있도록 만든 API입니다. 계층 관계를 나타낼 때는 슬래시 구분자를 사용해야 하고, 밑줄은 URI에 사용하지 않고 파일 확장자는 URI에 포함하지 않는 등의 규칙을 가집니다.
REST 원리를 따르는 시스템을 RESTful라고 합니다.
데이터 처리 기능인 CREATE, READ, UPDATE, DELETE를 묶어서 일컫는 말입니다.
리소스를 구분할 수 있는 식별자로 리소스를 식별할 수 있는 방식은 URL과 URN이 있습니다. URL은 리소스를 리소스의 경로를 기반으로 식별하는 것이고 URN은 리소스를 리소스의 이름을 기반으로 식별하는 것입니다.
코틀린에서는 클래스와 메서드가 기본적으로 final이기 때문에, 상속이 불가능합니다. 따라서 어떤 클래스의 상속을 허용하려면 해당 클래스 앞에 open 변경자를 붙여야 합니다. 그와 더불어 오버라이드를 허용하고 싶은 메서드나 프로퍼티 앞에도 open 변경자를 붙여야 합니다.
같은 모듈 내에서만 볼 수 있으며, 모듈은 한꺼번에 컴파일되는 코틀린 파일들을 의미합니다.
데이터 보관 목적으로 만든 클래스입니다. equals, hashCode, toString, copy 메서드를 컴파일러가 자동으로 만들어줍니다.
열거형 클래스로 서로 관련이 있는 상수들의 집합입니다.
클래스안에 또 클래스를 정의하는 것으로, 외부 클래스를 참조할 수 있는 클래스입니다. 코틀린에서 클래스안에 다른 클래스를 정의하면 기본적으로 중첩 클래스가 되고, inner를 붙여야 내부 클래스가 됩니다.
코틀린에서 object는 싱글턴 패턴을 적용하여 객체를 한번만 생성하도록 하기 위해 사용하거나 익명 클래스의 생성을 위해 사용합니다.
추상 클래스로 상속 받는 자식 클래스의 종류를 제한하는 특성을 가집니다. 컴파일러에서 sealed class의 자식 클래스가 어떤 것이 있는지 알 수 있습니다.
필드와 접근자를 통칭하는 말로 클래스의 변수입니다. getter(), setter() 함수가 내장되어 있으며 var로 선언 시 get과 set이 추가되며, val로 선언시 get만 추가됩니다. 변수에 getter와 setter로 접근하는 이유는 객체지향의 특성인 캡슐화를 지키기 위해서입니다.
코틀린의 콜렉션에서 제공하는 두 가지 타입의 interface로 mutable은 변경 가능하고, immutable은 변경이 불가능합니다. 코틀린은 불변성을 권장하고, 불변성이 중요한 함수형 프로그래밍을 돕기 위해서 사용됩니다.
val는 런타임에 할당되는 반면, const val은 컴파일 시점에 할당되는 상수로 함수나 어떤 클래스의 생성자에게도 할당될 수 없고 문자열이나 기본 자료형으로 할당되어야 합니다.
동반 객체라는 뜻으로 객체 생성 없이 변수와 메서드등을 선언하여 사용하기 위해 코틀린에서 자바의 static과 같은 역할로 사용하기 위해 쓰입니다.
객체의 인스턴스가 오직 1개만 생성되는 패턴을 말합니다. 생성된 객체는 어디서든 참조될 수 있습니다. 메모리 낭비를 방지할 수 있고, 데이터 공유에 용이하여 성능 향상에 도움이 됩니다. 너무 많은 일을 위임하거나 공유할 경우 결합도가 높아질 수 있습니다.
결합도와 응집도를 나타내는 단어로, 결합도는 모듈간 상호 의존하는 정도 또는 연관된 관계를 의미합니다.
다른 클래스끼리 연관된 정도가 높으면 결합도가 높다고 합니다. 결합도는 낮을수록 좋습니다.
응집도는 모듈 내부의 처리 요소들이 서로 관련있는 정도를 말합니다. 즉, 모듈이 독립적 기능을 수행하는지, 하나의 기능을 중심으로 책임이 잘 뭉쳐있는지 나타내며 높은 응집도를 가질수록 좋습니다.
소프트웨어를 각 기능별로 나누는 것을 말하고, 각각의 기능별로 나눠진 모듈화의 결과를 모듈이라고 합니다.
좋은 모듈화라 함은, 목적에 맞는 기능만으로 모듈을 나누는 것입니다. 모듈의 독립성이 높을수록 좋은데 독립성은 결합도가 낮고 응집도가 높을수록 좋습니다.
실행해야할 메서드를 표현하기 위한 목적으로 만들어진 인터페이스입니다.
특정 이벤트를 처리하는 인터페이스로 이벤트 발생 여부를 기다리다가 이벤트 발생 시 해당 이벤트에 맞는 처리를 수행하는 객체입니다. 이벤트 리스너는 사용자와 상호작용하는 이벤트 발생 시 안드로이드 프레임워크의 인터페이스를 호출합니다.