프로세스란? 프로그램이 실행되면 프로세스 인스턴스가 생성된다. 인스턴스가 생성된다는 의미는 프로그램 실행에 필요한 내용이 컴퓨터 메모리(RAM)에 적재된다는 뜻이다. 일반적으로 프로세스와 프로그램을 같은 개념으로 이야기하는 경우도 많은데 이는 엄밀히 다른 개념이다. 프로그램 : 어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램이다. = 정적인 상태 Ex) 카카오톡, 그림판, 크롬 즉, 어떠한 일을 위해 실행할 수 있는 파일을 뜻한다. 프로세스 : 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태이다. = 동적인 상태 즉, 일을 처리하는 일련의 과정을 뜻한다. 프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가게 되고, 이 상태를 동적(動的)인 상태라고 하며 이 상태..
문제 수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다. 문자열의 뒤에 A를 추가한다. 문자열의 뒤에 B를 추가하고 문자열을 뒤집는다. 주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오. 입력 첫째 줄에 S가 둘째 줄에 T가 주어진다. (1 ≤ S의 길이 ≤ 49, 2 ≤ T의 길이 ≤ 50, S의 길이 < T의 길이) 출력 S를 T로 ..
안드로이드에는 다양한 아키텍처 구조가 존재한다.오늘은 MVVM 패턴에 대해서 공부해보려고 한다. MVVM는 간단하게 Model, View, ViewModel의 약자입니다.MVVM의 구조는 MVC, MVP의 단점을 보완한 구조로 하나의 앱 아키텍처를 최대한 기능적으로 작은 단위로 나누어 테스트가 쉽고 큰 프로젝트도 상대적으로 관리하기가 좋은 구조입니다. MVVM은 모든 입력들이 View로 전달되며, ViewModel은 입력에 해당하는 Logic을 처리하여 View에 데이터를 전달합니다. ViewModel은 View를 따로 참조하지 않기때문에 독립적이며 ViewModel과 View는 1:N관계입니다. 따라서 View는 자신이 이용할 ViewModel을 선택해 데이터를 바인딩하여 업데이트를 받게됩니다.그 후 ..
안드로이드에는 다양한 아키텍처 구조가 존재한다.오늘은 MVP 패턴에 대해서 공부해보려고 한다. MVP는 간단하게 Model, View, Presenter의 약자입니다.MVP의 구조는 MVC와는 다르게 UI(View)와 비즈니스 로직(Model)을 분리하고, 서로 간에 상호작용을 다른 객체(Presenter)에 그 역할을 줌으로써 서로의 영향(의존성)을 최소화하는 것에 있습니다.(MVP의 등장 배경) Model, View, Presenter의 특징을 정리해보자 Model프로그램 내부적으로 쓰이는 데이터를 저장하고, 처리하는 역할을 함.(비즈니스 로직)View 또는 Presenter 등 다른 어떤 요소에도 의존적이지 않은 독립적인 영역임.ViewUI를 담당하며 안드로이드에서는 Activity, Fragmen..
안드로이드에는 다양한 아키텍처 구조가 존재한다. 오늘은 MVC 패턴에 대해서 공부해보려고 한다. MVC는 안드로이드와 관계없이 프로그래밍 시 가장 널리 사용되는 구조 중 하나이며 간단하게 Model, View, Control의 약자입니다. MVC 구조에서의 입력은 모두 Control에서 발생하게 되며 관리되게 되는 구조입니다. 이벤트가 발생한 Control에 의해 각 모듈의 정의와 View의 사용 용도가 달라지게 됩니다. MVC 구조에서는 입력을 모두 Control에서 발생하게 되며 관리하게 되는 구조이다. 이벤트가 발생한 Control에 의해 각 모듈의 정의와 View의 사용용도가 달라지게 된다. Model, View, Control의 특징을 정리해보자 Model 데이터를 가지며 애플리케이션에서 사용되..
스코프 함수란? 코틀린에서는 Object Context 내에서 코트 블록을 실행하는 것이 목적인 여러 함수가 존재한다. 제공된 람다식을 사용하여 객체에 이러한 함수들을 호출하면 임시적으로 스코프(범위)가 설정된다. 이 범위에서는 해당 객체의 이름없이 접근할 수있다. 스코프 함수에는 5가지의 함수가 존재하는데, let, run, with, apply, also 공통점으로는 객체에 붙어있는 코드 블록을 실행시킨다는 것이다. 이에 차이점과 각 함수의 특징들에 대해서 정리해보자. 5가지의 함수의 정의이다. inline fun T.run(block: T.() -> R): R { return block() } inline fun with(receiver: T, block: T.() -> R): R { return ..
인라인 클래스란? 경우에 따라 비즈니스 논리가 일부 형식 주위에 래퍼를 만드는 것이 필요하다. 그러나 추가 힙 할당으로 인해 런타임 오버헤드가 발생하고 또한 래핑된 유형이 기본 유형인 경우 기본 유형은 일반적으로 런타임에 의해 크게 최적화되는 반면 해당 래퍼는 특별한 처리를 받지 않기 때문에 성능 저하가 발생한다. 이러한 문제를 해결하기 위해서 Kotlin에서는 inline class를 제공한다. 인라인 클래스는 value-based classes의 하위 집합입니다. 이는 정체성은 존재하지 않으며 값만을 보유합니다. inline class는 생성자로 단 하나의 값만 받을 수 있다. 물론 클래스내에 프로퍼티와 함수를 정의할 수도 있다. inline class UserName(val value: String..
Sealed class란 Sealed class 및 interface는 상속에 대한 더 많은 제어를 제공하는 제한된 클래스 계층을 나타냅니다. 추상 클래스로 상속받는 자식 클래스의 종류를 제한하는 특성을 가지고 있다, 즉 컴파일러에서 Sealed class의 자식 클래스가 어떤 것이 있는지 알 수 있다는 것이다. sealed interface Error sealed class IOError(): Error class FileReadError(val file: File): IOError() class DatabaseError(val source: DataSource): IOError() object RuntimeError : Error 어떤 의미에서 Sealed class 는 Enum class와 유사하다..
문제 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다. 예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,00..
Enum class 열거형 클래스는 형식이 안전한 열거형을 구현하는 것입니다. enum class Direction { NORTH, SOUTH, WEST, EAST } 내부의 각각의 상수들은 오브젝트이다. 각 열거형 상수는 개체이다. 열거형 상수는 쉼표로 구분된다. 열거형 클래스는 다음과 같이 초기화할 수 있다. enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF) } Anonymous classes 열거형 상수는 해당 메서드와 재정의 기본 메서드를 사용하여 고유한 익명 클래스를 선언할 수 있습니다. enum class ProtocolState { WAITING { override fun signal() = TALK..
Data class 란 데이터를 보유하는 것이 주된 목적인 클래스입니다. Ex) User의 data class data class User(val name: String, val age: Int) 데이터 클래스의 충족 조건 주요 생성장에는 적어도 하나의 파라매터가 필요하다. 모든 주요 생성자 파라매터는 val 혹은 var로 지정 데이터 클래스는 추상 클래스, open 클래스, sealed클래스, inner클래스 일수 없다. 1.1버전 이후 데이터 클래스는 다른 클래스를 확장할 수 있다. 클래스에 파라매터가 없는 생성자가 필요한 경우, 모든 프로퍼티의 기본값을 지정할 필요가 있다. data class User(val name: String = "", val age: Int = 0) 컴파일러에서는 기본생성자..
문제 음이 아닌 정수를 십진법으로 표기했을 때, 왼쪽에서부터 자리수가 감소할 때, 그 수를 줄어드는 수라고 한다. 예를 들어, 321와 950은 줄어드는 수이고, 322와 958은 아니다. N번째로 작은 줄어드는 수를 출력하는 프로그램을 작성하시오. 만약 그러한 수가 없을 때는 -1을 출력한다. 가장 작은 줄어드는 수가 1번째 작은 줄어드는 수이다. 입력 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다. 출력 첫째 줄에 N번째 작은 줄어드는 수를 출력한다. https://www.acmicpc.net/problem/1174 1174번: 줄어드는 수 음이 아닌 정수를 십진법으로 표기했을 때, 왼쪽에서부터 자리수가 감소할 때, 그 수를 줄어드는 수라고 한다. 예를 들어, 321와 950은 줄..