AppBar 안드로이드는 AppBar는 ActionBar와 ToolBar를 사용할 수 있습니다. 보통 ActionBar를 사용했지만 Android 버전에 따라서 ActionBar가 다르게 동작한다는 점이 있습니다. 이에 비해, ToolBar는 수많은 종류의 기기에서 일관되게 작동할 수 있습니다. ToolBar 사용하기 1. xml에 ToolBar를 추가해줍니다. ※ 기본 ActionBar는 사용하지 않게 합니다. 2. res에서 menu를 생성하고 파일을 추가해줍니다. 3. MainActivity oncreate()에서 setSupportActionBar()로 앱바 지정해줍니다. private lateinit var binding: ActivityMainBinding override fun onCreat..
가시성 지시자 가시성 지시자는 해당 요소가 어디에서 접근이 가능한지를 결정하는 역할을 합니다. private : 외부에서 접근할 수 없습니다. protected : 상속관계에 있을 때만 외부에서 접근이 가능합니다. internal : 같은 모듈 내에서 접근이 가능합니다. public : 어디서든 접근이 가능합니다. (기본값)
Inner class 자바에서는 클래스 안에 클래스를 정의하면 자동으로 내부 클래스가 됩니다. 코틀린에서 클래스 안에 클래스를 선언하면 중첩 클래스입니다. 내부 클래스로 만들고 싶다면 inner 키워드로 클래스를 선언해야 합니다. 내부 클래스는 기본적으로 외부 클래스를 참조가 되지만 중첩 클래스는 참조가 불가능합니다. // 중첩 클래스 (nested) class OuterNested { private val num: Int = 1 class Nested { // 중첩 클래스는 외부 클래스 멤버 참조 불가 // fun foo() = num // 불가능 fun foo() = 10 } } // 내부 클래스 (inner) class OuterInner { private val num: Int = 1 inner ..
열거형 클래스 (Enum class) 별도의 인자가 없는 열거형 클래스이다. [클래스 이름.name]으로 이름 값을 가져올 수 있습니다. [클래스 이름.ordinal]로 해당 값이 몇 번째에 있는지 순서 값을 가져올 수 있습니다. 인자가 있는 열거형 클래스인 경우 각 열거 값들을 표현하는 방식을 다채롭게 할 수 있습니다. // 인자 없는 enum class enum class Animal { DOG, CAT, PANDA } fun main() { val animalEnum: Animal = Animal.CAT println("${animalEnum.name}...${animalEnum.ordinal}") val animalEnum2: Array = Animal.values() for (i in anima..
데이터 클래스 data class로 선언하여 사용합니다. 구분은 쉼표(,)로 하고, 변수나 상수를 선언할 수 있습니다. 프로퍼티를 일반 클래스와 달리 초기화 해주지 않아도 됩니다. 생성과 동시에 클래스 내의 프로퍼티를 기준으로 생성자가 만들어집니다. 통신이나 별도의 DB를 사용할 경우 data class를 활용합니다. VO(Value Object)를 다룰 때 사용하면 유용합니다. 일반 클래스와 비교 // 일반 클래스 선언 class Info(var name: String) { private var age: Int = 0 private var gender: String = "" constructor(name: String, age: Int, gender: String): this(name) { this.a..
추상 클래스(abstract class) 상속 받을 클래스에서 구현해야 할 프로퍼티 및 메서드를 기술한 클래스입니다. abstract 키워드와 함께 선언하고 추상클래스는 객체 생성이 불가능합니다. 코틀린에서 상속 받기 위해서 open클래스로 선언 했는 데 추상 클래스는 필요가 없습니다. abstract class Car(val name: String, val color: String, val weight: Double) { // 추상 프로퍼티 (반드시 하위 클래스에서 재정의해 초기화 해야함) abstract var speed: Double // 일반 프로퍼티 (초기 값인 상태를 저장할 수 있음) var quality = "High" // 추상 메서드 (반드시 하위 클래스에서 구현해야 함) abstract..
Activity 안드로이드 시스템의 4대 컴포넌트 중 하나로 사용자와 상호작용을 하는 UI를 제공하는데 사용됩니다. Activity는 일반적으로 화면 전환, UI 배치, Intent 처리 등의 작업을 수행합니다. 예를 들어, 앱이 시작할 때 로그인 화면을 보여주거나, 메인 화면으로 이동 시 데이터를 받아오는 등의 역할을 합니다. Activity는 AndroidManifest.xml 파일에 등록되야 하며, Intent를 사용하여 화면 전환을 할 수 있습니다. Activity 생명 주기 Activity는 안드로이드에서 생명 주기를 가집니다. 생명주기는 Activity의 상태 변화를 나타내는데, 이는 Activity가 시스템 리소스를 효율적으로 사용할 수 있도록 해줍니다. onCreate() - 액티비티가 생..
비선형 자료 구조 비선형 자료 구조는 데이터 요소들이 선형적으로 나열되어 있지 않고 계층적인 구조를 의미한다. 그래프 정점(Vertex)과 간선(Edge)으로 이루어진 자료 구조를 의미한다. 그래프 저장 방법 1. 인접 행렬 : 정점과 간선의 관계를 2차원 행렬로 표현, 공간 복잡도 : O(V^2) 2. 인접 리스트 : 정점과 간선이 주어졌을 때 2차원 ArrayList로 표현, 공간 복잡도 : O(E) 트리 정점들이 계층적인 구조를 가지고 있는 비선형 자료 구조이다. 하나의 루트 노드 에서 시작하여, 부모-자식 관계를 가지는 노드들로 구성되어 있다. 반드시 노드가 N인 트리는 항상 N-1개의 간선을 가진다. 노드의 종류 루트 노드 : 최상단에 있는 노드 내부 노드 : 루트 노드와 리프 노드 사이에 있는..
선형 자료 구조 선형 자료 구조는 데이터 요소들이 선형적으로 나열되어 있는 자료 구조로, 각 요소들이 순서에 따라 배치되어 있는 것을 의미한다. 연결 리스트(Linked List) 각 요소가 데이터와 다음 요소를 가르키는 포인터로 이루아진 선형 자료 구조이다. 메모리 상에 불연속적으로 저장되며, 삽입과 삭제가 O(1)으로 빠르지만, 특정 위치 요소에 접근하는데는 순차적으로 탐색해야 하기 때문에 검색 O(n)으로 느리다. 배열(Array) 동일한 데이터 타입의 요소들이 메모리 상에 연속적으로 저장되는 선형 자료 구조이다. 인덱스를 이용하여 특정 위치 접근이 가능하여 빠른 검색이 가능하다. 메모리 할당이 연속적이기 때문에 빠른 데이터 접근이 가능하다. 크기가 고정되어 있기 때문에 크기 변경이 어렵고, 요소를..
자료구조 효율적으로 데이터를 관리하고 수정, 삭제, 탐색, 저장할 수 있는 데이터 집합을 의미한다. 시간복잡도 "문제를 해결하는 데 걸리는 시간과 입력의 함수 관계" 를 가르킨다. 로직이 얼마나 오랜 시간이 걸리는지를 나타내는 데 사용한다. 보통 빅오 표기법으로 나타낸다. 빅오 표기법 O(n) 기호로 표기 입력 범위 n을 기준으로 로직이 몇 번 반복되는지 나타낸다. 시간 복잡도의 존재 이유 효율적인 코드로 개선하는 데 쓰이는 척도가 된다. O(n^2) = 9초를 개선하여 O(n) = 3초가 걸리게 할 수 있다. 시간 복잡도 비교 O(n^2) > O(n) > O(logN) > O(1) 공간복잡도 프로그래밍을 실행시켰을 때 필요로 하는 자원 공간의 양을 의미한다. 정적 변수로 선언된 것 말고도 동적으로 재귀..