ENAN

Developer, Artist, Traveler

전체 글 47

[Android] AAC - LiveData

LiveData란?🤔Lifecycle을 알고 있는, Observe 할 수 있는 Data holder classLiveData가 갖고 있는 데이터에 어떠한 변화가 일어날 경우, 등록된 Observer 객체에 변화를 알려주는 방식으로 사용된다.라이브데이터를 처음 접해 본다면 무슨 말인지 바로 이해하기 힘들 수 있다. 라이브데이터를 제대로 이해하고 사용하기 위해서는 Observer Pattern, Lifecycle 두 가지에 대해 먼저 이해해야 한다. 옵저버 패턴(Observer Pattern)이란?🤔어떤 객체의 상태 변화를 관찰하는 Observer들의 목록을 객체에 등록하여, 상태 변화가 있을 때마다 등록된 Observer에게 통지하도록 하는 디자인 패턴LiveData는 데이터를 갖고 있고, 누군가에게 이 ..

공부/Android 2021.03.12

Notion에 쓴 글을 Tistory로

공부한 내용은 일단 노션에 기록한다. 그 다음에 그걸 티스토리 에디터에 복붙해와서 글로 편집하곤 하는데, 복사하면 어딘가 이상하다. 특히나 list같은 것들을 사용하면, 복사 붙여넣기 했을 때 줄 간격 같은 서식이 이상하게 깨진다. 그래서 차라리 노션에서 글을 다 쓴다음 html로 export해서 올리는 게 낫겠다 싶어서 그렇게 하고 있었는데, 이걸 자동화 할 수 있지 않을까? 하는 생각이 들었다. 그런데 나같은 사람이 또 있었는지, 누군가가 먼저 만들어주셨다 ^___________^ 써보고 별로면 직접 만들어보려고 했으나 . . 쓰기 좋습니다 ! 그냥 이거 써도 될듯 ! 다운로드는 아래의 링크에서! boltlessengineer.tistory.com/286 Notion2Tistory v1.0.0 배포 ..

공부/스크랩 2021.03.10

공식 문서를 볼때는 영어로 보자!

며칠 전(21.02.24), android compose 라이브러리가 베타 버전으로 업데이트 되었다는 소식을 접했다. 데이터바인딩을 제대로 공부한 지도 얼마 되지 않았는데 또 새로운 UI 라이브러리라니.. 그런데 심지어 컴포즈는 UI를 구성하는 방식이 기존 방식과 완전히 다른 새로운 패러다임이라고 한다. 지금 사용하고 있는 데이터바인딩이 기존 방식의 문제점을 어떻게든 개선하고 해결해서 사용하는 방식이라면, 컴포즈는 아예 새로 갈아엎는 느낌? 다행히 기존 방식과 함께 사용할 수 있도록 만들어졌다고는 하지만 공식 문서에서 이렇게나 좋다고 자랑하는 걸 보면, 정식 버전이 발표되면 빠른 시일 내에 옮겨가지 않을까? 아무튼 Compose에 대해 알아보는 건 다음으로 넘기고, 오늘은 사소한 경험 하나를 공유하려고 ..

공부/기록 2021.02.28

git 정리 + 커밋 푸시 어떻게 취소해요?

매일 사용하면서도 정확하게 안다는 느낌이 없었는데, 마침 스터디 같이 하는 친구가 깃 명령어가 꼬이는 바람에 고생하고 있어서 한번 싹 정리했다. 용어 설명은 간략하게 하고, git 명령어 취소를 중점적으로 정리했다.Git깃(Git)은 프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템이다. (- 위키백과 -)어렵게 느껴질 수 있지만 대강의 뜻은 이렇다.분산 : 여러 개발 환경(즉 여러 명의 개발자)에서 한 프로젝트를 협업하며 개발할 수 있음버전 : 개발 단계에 따라 한 프로젝트의 여러 버전을 나누고 관리할 수 있음아무튼 다시 정리하면, 여러 명의 개발자가 버전 관리를 하며 쉽게 협업할 수 있는 툴!용어Repository: 코드나 문서를 비롯한 리소스를 저장하는 곳을 말하며, 프로젝트 단위로 만든..

Realm vs Room

AAC중 Room을 공부하다가 전에 프로젝트를 하며 사용했던 Realm과 어떤 차이가 있는지 궁금해져서 둘은 어떤 차이가 있는지 간단히 알아보려 한다.Realm과 Room은 Android 환경에서 내부 DB로 가장 많이 사용하는 라이브러리이다. 물론 realm, room 외에도 다양한 db 라이브러리들이 있으나 논외로 하고 가장 많이 사용하는 두 녀석을 알아보자.RealmRealm이란 모바일 환경을 주요 타깃으로 삼은 오픈소스 데이터베이스 관리시스템(DBMS)이다.Realm은 NoSQL 데이터베이스를 지향하며, 모델 구조 자체가 객체 컨테이너로 구성되어 있다. 또한, Realm 데이터베이스는 rawSQL을 사용할 수 없으며 자체적으로 Realm API를 통해 실행된다. 이를 통해 좀 더 직관적인 사용이 ..

공부/Android 2021.02.28

[Android] AAC - Room

Rooom이란? Room은 SQLite의 추상 레이어를 제공해 주어 DB에 편하게 접근할 수 있도록 해주는 ORM Library이다. JetPack, 그 안에서도 AAC 안에 속해있는 라이브러리 중 하나다. SQLite에 비해 Room을 사용했을 때 얻을 수 있는 이점이 많다.보일러 플레이트 코드를 줄일 수 있다는 점부터, 컴파일 타임에 유효성 검사를 할 수 있고, schema가 변경되었을 때도 자동으로 업데이트가 되며, LiveData 등과 함께 사용해 데이터를 Observation 할 수 있다는 점 등 장점이 많다. 현재 Google은 SQLite 대신 room을 사용하기를 적극적으로 권장하고 있다. 사용 방법 1. dependency 추가 Room 을 입력하고 alt + Enter를 누르면 depe..

공부/Android 2021.02.02

#2. 구현

구현이란? 머릿속에 있는 알고리즘을 정확하고 빠르게 프로그램으로 작성하기 : 피지컬 딱히 뭐 설명할 말이 없다. 그냥 주어진 대로 구현하는 형식의 문제다! 이 파트에서 다루는 문제 유형 지금 읽고있는 킹동빈 님의 '이것이 취업을 위한 코딩 테스트다' 에서는 구현 파트에 아래의 두 유형의 문제를 엮었다. 완전 탐색 : 모든 경우의 수를 주저 없이 다 계산하는 해결 방법 시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행 구현 문제의 특징 구현 문제의 특징으로는, 사소한 입력 조건 등을 문제에서 제시해 준다. 그렇기 때문에 보통 문제 길이가 긴 편이라, 문제를 읽기도 전에 문제 길이에 압도당해 지레 겁을 먹는 경우가 많다. 그러지 말자! 딱히 어떤 알고리즘 지식을 알고 있어야만 풀 수 있..

#1. Greedy

그리디(Greedy) 알고리즘이란? 그리디 알고리즘이란 어떠한 문제가 있을 때 단순 무식하게, 탐욕적(greedy)으로 문제를 푸는 알고리즘을 말한다. 여기서 탐욕적이라는 말은 '현재 상황에서 지금 당장 좋은 것만 고르는 방법'을 의미한다. 하나의 문제를 여러 작은 문제(단계)로 나누고 작은 문제(단계)에서의 답을 통합해서 하나의 문제의 대한 답을 내놓는다는 근본적인 개념은 브루털포스나 DP와 비슷하지만, 그리디 알고리즘이 갖는 차이점은 모든 선택지를 고려하지 않는다는 것이다. 그리디 알고리즘은 각 단계에서 가장 좋은것만 고르게 된다. 그리디 알고리즘은 정렬, 최단경로 등의 다른 알고리즘과 비교했을 때 사전에 외우고 있는 지식 없이도 풀 가능성이 높은 유형이다. 따라서 코딩테스트에서 그리디 알고리즘 유형..

failed to lazily initialize a collection of role 에러

사용자의 역할 정보(roles)를 아래와 같이 다대다 관계로 설정해주는 중, lazyInitializationException 예외를 만났다. data class User( . . . @ManyToMany(cascade = [CascadeType.ALL]) @JoinTable(name = "user_roles", joinColumns = [JoinColumn(name = "user_id")], inverseJoinColumns = [JoinColumn(name = "role_id")]) var roles: MutableSet = mutableSetOf(), . . . 아래는 에러 메세지이다. org.hibernate.LazyInitializationException: failed to lazily ini..

공부/Spring 2021.01.07

Kotlin Spring에서의 @Autowired annotation

1. @autowired란? - 필요한 의존 객체의 타입에 해당하는 빈을 찾아 주입해 주는 어노테이션. 2. java에서 사용하는 방법 @RestController @RequestMapping("/auth") public class AuthController{ @Autowired private AuthService authService; 3. kotlin에서 사용하는 방법 lateinit 키워드를 사용해 초기화를 미루는 것으로 간단하게 사용할 수 있다. (field injection 방식의 경우) @RestController @RequestMapping("/auth") class AuthController() { @Autowired private lateinit var authService: AuthSe..

공부/Spring 2021.01.07