목록분류 전체보기 (56)
성장기록지

공식문서의 말대로 Jetpack Navigation을 사용한다면 큰 의미가 없겠지만,프래그먼트를 사용하는 모든 앱은 어느 정도 FragmentManager를 사용하므로Fragment Manager가 무엇이고 어떻게 작동하는지 파악하는 것이 중요하다 생각하여 학습을 진행한다.FragmentManager앱 프래그먼트에서 프래그먼트를 추가, 삭제 또는 교체하고 백 스택에 추가하는 등의 작업을 실행하는 클래스이다.Activity, Fragment에서 접근가능하다. FragmentActivity 에서 구현하므로, 해당 및 서브클래스에서는getSupportFragmentManager() 메서드를 통해 FragmentManager에 액세스할 수 있다. 아래와 같은 Fragment Manager가 있다고 하자.Hos..

진행한 프로젝트의 콜백지옥을 해결하기 위해 여러 학습을 진행 중suspend 함수의 내부 구조에 대해 학습하게 되었다. CPS에 대한 이론을 다뤄보겠다.Kotlin 컴파일러가 suspend 키워드를 만났을 때코루틴은 Continuation Passing Style(CPS) 형태로 동작한다.CPS는 호출되는 함수에 Continuation을 전달하고, 각 함수의 작업이 완료되는 대로 전달받은 Continuation을 호출하는 방식을 말한다.그렇다면 Continuation 이란 뭘까? Continuation 인터페이스를 한번 알아보도록 하겠다.Continuation 인터페이스에는 크게 context객체와 resumeWith() 함수가 있다.context는 각 Continuation이 특정 스레드 혹은 스레드 ..

Set이란?데이터를 저장하는 추상자료형이다.순서를 보장하지 않고, 데이터의 중복을 허용하지 않는다.데이터 조회속도가 List보다 빠르다. 자바에서의 Set자바에는 Hash Set, Linked Hash Set, Tree Set이 있다. 자주 쓰이는 Hash Set에 대해 중점적으로 살펴보자 Hash Set Hash Table을 사용하기 때문에, 크기 상관없이 데이터 조회가 빠르다.Hash Set은 어떻게 구현되어있나 살펴본다면, Hash Map을 사용하는것을 알 수 있다.따라서 자바에서는 HashMap과 HashSet은 동일하다고 볼 수 있다. Hash Set의 삽입Hash Set에서 데이터를 삽입(add)할때를 보자, 다음과 같이 Key값으로 e를 넣고, Value를 통해 PRESENT라는 객체를 넣..

Hash란?입력 데이터를 고정된 값으로 변환한 값이다. 해시 값이라고도 부른다.해시 값은 해시함수(hash function)에 의해서 얻게 된다.아래의 그림과 같은 방식으로 변환이 된다.이렇게 정수로 변환된 해시는 배열의 인덱스, 위치, 데이터 값을 저장하거나 검색할 때 활용된다. 해시 함수(Hash Function)란임의의 데이터를 고정된 길이의 값으로 리턴해주는 함수위에서 언급했듯이 해시 함수(Hash function)는 입력받은 데이터를 해시 값으로 출력시키는 알고리즘을 말한다. 해시 테이블(Hash Table)란배열과 해시 함수를 사용해서 map을 구현한 자료구조이다.일반적으로 상수시간에 접근하기 때문에 빠르다. 해싱(Hashing)이란?해싱은 해시 함수에서 해시를 출력하고, 해시 테이블에 ..

Data Class란?오직 데이터를 실어담을 수 있는 객체를 만들고 싶을 때 사용한다.일반 클래스와 다르게, 다양한 메소드를 자동으로 생성해주는 클래스이다.구성되는 메소드들은 아래와 같다.toString()hashCode()copy()equals()toString()componentsN()또한 아래와 같은 특징들을 가지고 있다. 기본 생성자에 1개 이상의 파라미터가 있어야 함기본 생성자의 파라미터가 val 또는 var 로 선언해야 함다른 클래스를 상속받을 수 없음 ( sealed 클래스는 상속받을 수 있으며, 인터페이스는 구현할 수 있다.)abstract, open, sealed, inner 등 키워드를 붙일 수 없음자동으로 생성한 메소드를 오버라이딩할 경우, 오버라이드 된 메소드 사용아래에선 하나씩 어..

추상 클래스와 인터페이스의 차이를 설명하세요코틀린이랑 그렇게 친하지 않은 사람은 별 차이가 없다고 생각을 할 수 있다.명확한 차이를 확인하도록 기능적 차이와 개념적 차이를 하나씩 파헤쳐 보도록 하겠다독자는 추상 클래스와 인터페이스가 뭔지는 안다는 가정하에 작성해보겠다.기능적 차이1. 인터페이스는 생성자를 만들 수 없다.인터페이스는 추상클래스와 다르게 생성자를 만들 수 없다.왜 이렇게 구성하였는지의 의도는 개념적 차이에서 보충하겠다.2. 인터페이스는 프로퍼티의 상태 저장이 불가능하다.간단한 예시와 함께 보여드리겠다.추상클래스는 다음과 같이 값을 지정해 둘 수 있다.하지만 인터페이스는 다음과 같이 상태 저장이 불가능하다.왜 인터페이스는 상태 저장이 안되게 만들었을까? 이것도 중요한 내용이니이후에 다룰 개념적..

xml을 활용한 개인 프로젝트를 통해 Jetpack Room을 사용해보려고 한다!하지만 유명한 기술이라고 꼭 Room을 사용해야 할까? 다른 대안은 없을까? 하는 마음에사용 근거에 대해 조사하고, 그런 김에 기본적인 사용법도 학습하고자 한다!실제 사용 후 얻는 깨달은 점들도 추후 기록하고자 한다!Jetpack Room이란?Android의 SQLite 데이터베이스를 쉽게 사용할 수 있도록 도와주는 Jetpack 라이브러리이다.SQLite란?SQL(Structured Query Language)을 사용해 데이터를 관리하며,애플리케이션 내에서 데이터베이스 파일을 직접 생성하고 사용할 수 있게하는 라이브러리이다.안드로이드에선 앱을 종료해도 데이터가 남아있게 하고 싶을 때 사용한다.데이터베이스 엔진이다.모든 데이..

Android LifeCycle이란?Android의 앱 구성요소가 생성부터 사용,소멸까지의 일련의 과정을 말한다.대표적으로 Activity, Fragment, Service 등이 생명주기를 가지고있다. Activity LifeCycle생명주기를 살펴보기전에 자주 나오는 용어를 정리해보고자 한다.foreground는 가장 위에 있는 상태(사용자에게 보여지는 상태) 이고,background는 반대로 가장 아래에 있는 상태를 의미한다. 이제 각각의 콜백에 대해서 설명해보자.onCreate()액티비티가 생성될 때 호출된다. 단 한번만 호출되기 때문에, 필요한 변수를 초기화하거나,setOnClickListener , 뷰모델 등 초기화 작업에 적합하다. onStart() foreground가 될때마다 호출이 되어..

문제https://www.acmicpc.net/problem/2636문제 해결치즈가 공기중에 만나면 녹는다는 설명이 제일 중요하다.공기가 정확히 무엇인지 설명해주지 않아서 유추하느라 시간이 많이 걸렸다..여러 가설끝에 찾아낸 정답을 설명해보겠다. 아래 그림을 보면 c가 다음 시간에 녹는 치즈들을 표시해둔 것으로,하얀색 부분이 공기라 맞닿은 면이 녹는건가? 라는 생각을 했다.하지만 그렇게 가정하면 빨간색 화살표로 표시된 곳의 하얀색 부분도 공기인데맞닿은 면들이 녹는 표시가 없으므로,하얀색 면은 빈 공간이라 공기가 있을수도 있지만치즈로 둘러쌓인 하얀색 면은 치즈 안쪽이라 공기가 없구나 라는 생각을 하게 되었다. 그렇다면 항상 치즈 바깥에 있는 빈 공간 에서부터, 하얀색 면들을 bfs로 전부 탐색한 후 ..

간단한 팰린드롬 문제를 무작정 구현하려다 많이 고생하여서팰린드롬을 만드는 알고리즘을 이해하고자 블로그 글을 작성합니다.1. 팰린드롬이란?거꾸로 읽어도 똑같은 문장이나 단어를 말한다.예를틀면 eye,hannah, AABCBAA 같은 단어가 있다.좌우대칭이라고 생각하면 좋다.2. 팰린드롬이 될 수 있는 단어의 조건은?-> 문자의 개수가 홀수인 문자는 하나 이하여야 한다.팰린드롬은 좌우 대칭이어야 하므로 홀수개인 문자는 하나만 중앙에 둘 수 있다.예를 들어 eye는 e는 2개, y가 1개로 홀수인 문자가 y 뿐이라 팰린드롬이지만eyde면 e는 2개, y는 1개, d도 1개로 홀수인 문자가 2개나 있어서문자의 배치를 바꿔도 팰린드롬이 될 수 없다. 3. 입력한 단어를 팰린드롬으로 바꾸자!1.개수가 홀수인 문자는..