오늘은 조금 늦게 들어왔다. 그래도 글을 써보자. 시간도 없고, 오늘은 이 녀석 때문에 시간 좀 잡아먹어서 똑같은 실수를 반복하지 않기 위해 글을 써본다. 맥에서 갑자기 귀여운 여우 버전으로 업데이트를 하라길래 바로 업데이트를 했다. https://android-developers.googleblog.com/2021/07/android-studio-arctic-fox-202031-stable.html Android Studio Arctic Fox (2020.3.1) Stable Posted by Amanda Alexander, Product Manager, Android We are excited to announce that Android Studio Arctic Fox is now availa... ..
요즘 뜻대로 코드가 잘 짜여서 기분이 좋다. 오늘은 회사앱에도 적용 SmartRefresher이라는 패키지에 대해서 소개해 볼까 한다. https://pub.dev/packages/pull_to_refresh/install pull_to_refresh | Flutter Package a widget provided to the flutter scroll component drop-down refresh and pull up load. pub.dev 우선 이곳에 smartRefersher를 dependencies에 추가시켜주자. dependencies: pull_to_refresh: ^2.0.0 다음은 홈페이지에서 가지고 온 예제이다. 주석 처리를 하면서 천천히 설명을 하는 시간을 가져보고자 한다. 그렇다..
flutter 공부 한창이다. 오늘 사용한 함수는 sort라는 함수이다. 보통 List 함수에 있는 리스트의 여러 인자들을 오름차순이나 내림차순으로 정렬하기 위해 사용된다. 기본 적인 사용 방법을 보자. 사용법 int type 오름차순 void main(){ List numbers = [400, 59, 13, 7264]; numbers.sort(); print(numbers); } numbers라는 배열에다가 그냥 sort() 함수를 사용하면, 작은 인자부터 큰 인자까지 배열을 바꾸어 준다. //numbers = [13, 59, 400, 7264]; 그러면 반대로 내림차순을 알아보자. int type 내림차순 void main(){ List numbers = [400, 59, 13, 7264]; numb..
참고 문헌 https://flutter-ko.dev/docs/cookbook/persistence/sqlite SQLite에 데이터 저장하기 로컬 디바이스에 많은 데이터를 저장하고 쿼리를 요청해야 한다면, 로컬 파일이나 키-값 저장소 대신 데이터베이스를사용해보세요. 일반적으로 데이터베이스는 다른 로컬 솔루션보다 더 빠른 flutter-ko.dev 마침내 오랜만에 글을 쓰게 되었다. 오늘도 채팅 작업을 잘 마무리하고 그동안 유용하게 써왔던, sqlite에 대한 사용법을 작성할 생각이다. 9시 50분에 차를 타고 퇴근을 해야 하기 때문에 다소 간략하게 쓸 수도 있지만, 집에 가서도 쓰면 되니 뭐.. 간단하게 내부 디비를 왜 써야 하는지 설명하겠다. 내부 데이터베이스(sqlite)의 필요성 보통 우리는 데이터..
요 며칠 동안 행복한 플러터 세상에 살아가는 중이다. 예전에 코틀린이나 자바를 사용할 때도 싱글톤 패턴이라는 말을 익히 들었지만, 무지한 상태에서 싱글톤이라는 단어는 나에겐 이해하기 어려운 단어였다. 그래도 지금은 실무에서 사용했고, 어느 정도 이해하였기 때문에 포스팅을 해보려고 한다. 참고 자료 https://another-light.tistory.com/77 [dart] what is factory? | 싱글톤 패턴 singleton pattern class what is factory? flutter에서 모델 클래스를 만들 때 아래 같은 코드가 자주 사용된다. 그런데 factory라는 것을 dart에서 처음 봤다. factory 키워드는 무엇이고 어떤 역할을 할까? class Book { final..
출처 책 (처음 배우는 플러터 - 유동환) 오늘 알아볼 것은 flutter에서 사용하는 Dart의 장점 중에 장점 역할을 맡고 있는 녀석을 소개한다. 선택 인자와 이름 있는 인자이다! 1. 선택인자(positional optional parameter) 이름이 상당히 깁니다. 선택인자는 자신이 선택할 수 있는 인자입니다. 한 마디로 이 인자를 선택해도 되고, 안 해도 되는 것입니다. 예제를 보면서 살펴 보겠습니다. //선택인자(positional optional parameter) int num1 = 100; int num2 = addNumber(100) //inc = 1 대입 int num3 = addNumber(100, 20) //inc = 20 대입 // 넣은 인자 값들을 더해서 int 값으로 반환..
저번 주에 과음을 많이 해서 그런가 항문 옆에 조그마한 혹이 났는데, 그냥 괜찮겠지 하다가 어제 병원을 가보니 치루라고 한다... 오늘 바로 아침 9시에 수술을 받고 현재 병실에서 코딩 공부 중이다. ... 앞으로 항문 관리를 잘하자... 더티한 얘기는 그만하고, 오늘 배워본 생명주기에 대해서 정리해보려고 한다. StatelessWidget Stateless는 단순히 build 된 것을 단순히 return 해주기만 해서 생명주기가 제공되지 않는다. 오호 그렇다면 바로 StatefulWidget으로 넘어가 보자. StatefulWidget StatefulWidget.createState() 상태를 생성, 이 메서드를 제외하고 나머지는 모두 State 클래스에 있다. mounted == true mounte..
참고 블로그 https://terry1213.github.io/flutter/flutter-provider/ [Flutter] Provider를 통해 상태 관리하기 Flutter를 통해 개발을 진행하다보면 상태(State) 관리가 매우 중요하다는 것을 느낄 수 있다. terry1213.github.io 예전에 내가 약간 난독이 있어나 보다. 이해가 별로 되지 않아서 그런가? 어려운 공식문서나 누가 가독성 어렵게 설명해 놓은 글을 제대로 읽지 못해 여간 스트레스를 받고 있었다. 아무래도 가독성인 듯하다. 누가 flutter Provider에 대한 글을 너무 잘 써두어서 읽기가 너무 편했다. 일단 pub.dev에서 provider을 설치해보자. https://pub.dev/packages/provider p..
회사에서 사용하는 앱에 플러터 버전이 2.0.2라는 것을 들었고, 다운 그레이드를 해야 한다는 것을 알았다. 오늘 해볼 것은 다운그레이드 동시에 터미널에 플러터 설치 과정에서 환경변수 설정하는 법을 동시에 해볼 것이다. (다운그레이드 하는 김에..) 맥에서는 카탈리나 이후부터 환경변수를 bash파일이 아닌 zsh에서 설정해주어야 합니다. zsh: command not found: flutter error 해결법 터미널에서 환경변수를 설정할 때 위와 같은 에러가 뜰 것이다. 다음과 같이 해보자 터미널에 1. vim $HOME/.zshrc 라고 입력을 한다. 그러면 이런 식을 창이 뜰 텐데 그림처럼 플러터 bin에 경로를 저런 식으로 입력해준다. 입력하는 법은 간단하다. "I" 키보드를 누르면 Insert ..
한창 언어 공부와 다급하게 프로그래밍 공부를 하면서, 자주 보았던 AndroidX에 대한 이야기, 문서를 볼 줄도 몰라 어려워만 보였던 AndroidX에 대해 오늘 드디어 정리를 해보려 한다. AndroidX 란 AndroidX는 기존에 사용하고 있던 com.android.support.* 라이브러리(옛 라이브러리 들)들을 하나로 통합한 것이라고 설명할 수 있다. 더 자세히 말하자면, 안드로이드팀이 JetPack(여러 라이브러리들이나 여러 tool들을 묶어놓은 모음집) 내에서 라이브러리를 개발하거나, 테스트하거나, 패키지화나 버전 및 릴리스를 하기 위해 만든 오픈 소스 프로젝트이다. 결론은 기존에 있던 라이브러리들을 쓰기 좋게 통합한 것이라고 할 수 있다. 이 AndroidX를 사용하려면 Android ..
요즘 꾸준히 플러터를 학습 중이다. 어느 정도 학습하고 간단하게 프로젝트를 만들어 봐야겠다. 오늘은 플러터에서 사용되는 const와 final에 대해서 알아보려고 한다. 우선 이 두 가지에 대해 알려면 컴파일 타임과 런타임에 대해서 알고 가야 한다. 1. Compile Time 컴파일은 보통 C언어나 자바 같은 객체지향 언어에서 소스코드가 작성되고, 컴퓨터가 인식할 수 있게 작성된 코드를 기계어로 변환하여 실행 가능하는 프로그램을 만드는 과정이라고 할 수 있다. 안드로이드 스튜디오에서는 이 버튼을 누르면 제일 첫 번째로 컴파일이 된다고 할 수 있다. 즉, 컴퓨터가 알 수 있게 기계어로 변환되는 과정이라고 할 수 있다. 2. Run Time 두 번째로는 런타임이다. 런타임은 컴파일 과정을 마치고, 응용 프..
아직 사실 나도 플러터에 대해 잘 모른다. 헤헤... 아직 로그인 기능 구현 정도 하는 단계라 Null Safety에 대한 공부는 아직 접근하지 않았지만, 오류 해결을 했으니, 기록이라도 하려고 글을 써본다. 플러터 Run을 하는 과정에서 위와 같은 오류가 떴다. Cannot run with sound null safety because dependencies don't support null safety 그대로 직역하면 "종속성이 null Safety를 지원하지 않기 때문에 사운드 null Safety로 실행할 수 없습니다." 여기서 먼저 간단하게 나마 Null safety에 대해 알아보자, 구글링을 해보니 간단하게 설명하자면, 기존에 변수가 널 값이나 혹은 타입에 따른 고유의 값을 가지고 있을 수 있..
여자 저차 해서 Java -> Kotlin -> Flutter 순서대로 개발언어를 배우게 되었다. 점점 복잡해지는 느낌이지만 오히려 좋다. 더 폭넓게 배우기도 하고, 다른 언어도 같이 병행하면서 배우고 있어서 지루한 느낌이 없다. 아직은 배우고 있지만, 그래도 어느 정도 배운 것을 정리하는 차원에서 글을 써보려고 한다. 이 글을 쓰기전에 Flutter 설치 법을 쓰려고 했는데, 터미널 사용법에서 잠깐 막혀서 화나서 꺼버렸다 헤헤.. 설치가 중요하긴 한데, 이미 인터넷에 많은 자료가 나와 있으니, 내가 배운 것을 정리하는 것이 더 중요하다는 것을 파악했다. 우선 나 같은 경우는 코딩셰프님의 영상을 보며 익힌 점을 정리하므로, 출처는 남긴다. 정리 Widget 오늘 배운 것은 여러 가지이지만, 크게 두 가지..
오늘은 이미지 크롭 기능을 구현해 보려고 한다. 여러 크롭 라이브러리들이 있지만, 나는 이 라이브러리가 제일 심플한 것 같아서 사용을 해보았다. https://github.com/lyrebirdstudio/Croppy lyrebirdstudio/Croppy Image Cropping Library for Android. Contribute to lyrebirdstudio/Croppy development by creating an account on GitHub. github.com 이런 식으로 크기 영역을 원하는 식으로 조정할 수 있다는 장점을 가지고 있다. 한번 손쉽게 구현해보자. 우선 종속성을 넣어주자. 위에 사이트에 나와있는 대로 종속성을 추가해준다. 나도 아직 초보라서 잘 모르겠지만, 이렇게 종..
이번에도 정대리님의 강의를 보고 공부한 자료입니다. 출처를 남깁니다. https://www.youtube.com/channel/UCutO2H_AVmWHbzvE92rpxjA 개발하는 정대리 한국에서 개발자로 살아남기! 예전에 저처럼 프로그래머가 되고 싶지만 그 길을 몰라 해매는 분들에게 도움 되고자 이 채널을 운영하기 시작했습니다. 프로그램에 관심 있는 분들이나 취업 준 www.youtube.com 비동기 프로그래밍이란 무엇인가?,,, 나중에 배워야지 나중에 배워야지 하면서, 계속 미루어두었던 개념이다. 어쩌면 이번 기회에 어느 정도 단디 배우고 가야겠다. 우선 간단히 말하자면, 동기란, 서버에 만약에 api를 요청하여 데이터를 받아올 때, A 작업을 다 완료해야지 B작업으로 넘어갈 수 있는 방식, 한마디..
미리 출처를 남깁니다. 요즘 개발하는 정대리님의 유익한 유튜브를 보면서 코틀린을 익히는 중입니다. 항상 감사합니다. 출처 https://www.youtube.com/channel/UCutO2H_AVmWHbzvE92rpxjA 개발하는 정대리 한국에서 개발자로 살아남기! 예전에 저처럼 프로그래머가 되고 싶지만 그 길을 몰라 해매는 분들에게 도움 되고자 이 채널을 운영하기 시작했습니다. 프로그램에 관심 있는 분들이나 취업 준 www.youtube.com 해결법 사실 직접적인 이해보다는 스택 오버 플로우에서 가져온 코드를 그대로 사용했다는 점이 크기 때문에 자세히 코드에 대해 이해하지는 못하고 있다. 중요한 흐름만 파악해놓은 상태에서 코드에 간략한 소개만 하겠다. 정대리님의 영상을 보고 나서, X, Y, Z 축..
여느때와 다르지 않게 코드 작성 후 깃허브에 Push를 하는데, 갑자기 422 unprocessable entity - repository creation failed. [repository; description]custom: description control characters are not allowed 이러한 오류가 떴다. 내용으로 번역해보자면, 저장소에 "_" 이러한 문자를 쓰지 말라는 것 같아서, "_" 이 문자를 지워보니 해결되지 않았다.(레퍼지토리 제목을 Study_Sooyeol 이런식으로 했기 때문) 구글링을 해보니 바로 해결되는 사람도 있다고 한다. 어쩌면 좋을 지 생각 해보다가 알아낸 방법은 "_" 이러한 문자를 지우고, 맥은 Preferences로 윈도우는 settings로 들어가..
정말 오랜만에 글을 쓰게 된다. 취업하게 되면서 해야 할 것도 많고 이것저것 배우느라 정신이 없어, 집에 돌아와 작업을 하면서 이렇게 개인적인 공부 여유가 없어서ㅠㅠ 최근에 너무 힘들었지만, 이럴수록 더욱 짬 내서 내가 공부한 내용들을 기록해야 한다고 생각이 들었다. 정말 기억보단 내가 남겨놓았던 기록들이 더 장기기억으로 이어질 가능성이 있고, 궁금할 때 바로바로 찾아볼 수 있어서 장점이 많은 것 같다고 생각이 든다. 오늘은 인스타그램에 하트 기능을 애니메이션 형식으로 구현하는 방법에 대해서 알아보고자 한다. https://www.youtube.com/watch?v=1uOvP-6vpKU&list=PLgOlaPUIbynrDSTJxS8AaE-2zYvPCjWtF&index=7 개발자 정대리님의 영상을 참고하였..
자주자주 사용하는 것들은 정말 나 또한 자주자주 적고 있다. 그 예를 든 것이 뷰 페이저와 리사이클러뷰인데, 최근에 코틀린 버전으로 뷰 페이저를 썼고, 저 두 가지는 이미 자바로 배운 것을 정리했다. 지금은 처음으로 코틀린으로 리사이클러뷰 사용법을 적어보려고 한다. 언어가 바뀌어도 어느 정도 이해를 해야 하는데, 내가 자바를 사용할 때도, 그리 리사이클러뷰에 대해서 잘 이해하지 못하고 넘어간 것 같다. 그래도 지금은 조금 진전이 있는 상태에서 리사이클러뷰(코틀린 버전)를 정리해보려고 한다. (홍드 로이드 님의 영상을 보고 참고했습니다.) 우선 라이브러리를 추가해주세요. dependencies { implementation "androidx.recyclerview:recyclerview:1.1.0" // ..
뭔가 자바를 배울때 기초부터 배우는 느낌을 느껴보는거라 재밌다. 오늘은 코틀린으로 화면전환(Intent)를 배워보겠다. 인텐트 이제부터 코틀린에서 사용하는 뷰바인딩에 대한 설명은 하지 않겠다. 매번 뷰바인딩을 하고 있으니, 모르시는 분들은 코틀린 카테고리를 확인해보면 알 수 있다. 우선 메인액티비티와 서브액티비티를 만들겠다. 누가 봐도 왼쪽이 메인이고, 오른쪽이 서브이다. 메인에서 서브로 인텐트를 해보겟다. 자바랑 별차이는 없다. 다음은 메인액티비티의 코틀린 코드이다. class MainActivity : AppCompatActivity() { private var mbinding : ActivityMainBinding? = null private val binding get() = mbinding!! ..
회사를 다니고 나서, 매일 늦게 들어오지만, 별것 아닐지라도 족므이라도 배운 기록을 하나라도 남기려고 노력중이다. 오늘은 시간이 없어서 TextView를 간단히 활용하는 법만 올린다. 안 그래도 현재 코틀린으로 뷰페이저를 만지고 있는 상황인데, 서버에서 데이터를 받는 부분이 살짝 어렵다. 그래도 나는 해낼 것이라고 믿는다. 우선, setText를 한번 봐보자. 사용법 오늘 해볼 것은 간단하다. EditText안에 글자를 버튼을 누를때 값을 가져오고, 그 가져온 값을 TextView에다가 나타내는 아주 간단한 예제이다. java에서는 쉽겠지만, 나같은 코틀린 초보자는 어떻게 해야할지.. 이렇게 하는건가? 할 수 도 있으니 살펴보자. 우선 뷰 바인딩을 통해 손 쉽게 뷰들을 참조할 수 있었다. package ..
회사를 다니니 피곤해서 집에 오면 자고 싶고.. 그러지만.. 발전을 위해서 계속 초심을 가지고 정진을 해야 할 것이다. 아직은 코틀린에 대해서 부족한 것이 많아서, 자바를 처음 배웠을 때 마음가짐으로 임하려고 한다. 오늘은 findViewById로 항상 id값을 참조하여 자바 코드를 작성하였는데, 이제 효율성을 위해 코틀린 코드를 이용해서 뷰 바인딩을 사용해 보려고 한다. 사실 자바 코드를 사용할 때, 접해보려 했건만, 당시엔 취업이 우선시 했던지라, 그러한 퀄리티는 신경 쓰지 못한 것 같다. 우선 다음을 보자. 뷰 바인딩 https://duckssi.tistory.com/42 [Android Kotlin] View Binding ( 뷰 바인딩 ) 네 여러분들 안녕하십니까 홍 드로이드 입니다 :) 이번 ..
안드로이드 개발을 공부하고 있지만, 회사가 이 기능을 원한다는데... 어찌하리 한번 공부해보고 올려본다. 우선 Swiper라는 사이트로 들어가 보자. https://swiperjs.com Swiper - The Most Modern Mobile Touch Slider Swiper is the most modern free mobile touch slider with hardware accelerated transitions and amazing native behavior. swiperjs.com 그 후에 Get Started 버튼을 들어가 보자. 나 같은 경우는 다운로드가 아닌 간단하게 CDN을 이용할 것이다. 이런 식으로 CDN 부분만 보면 된다. 여기에서 min 붙은 파일을 head사이에 넣어준다...
취업을 하고 나서 여러 가지를 배우며 블로그에 정리를 하고 있다. 깊게 배우지 못하고, 얕게 배우지만, 이 마저도 정리하기 위해 글을 쓴다. 부족한 설명은 이해해주길 바란다. FCM이란 앱을 사용하는 이용자에게 포그라운드나 백그라운드 상태에서 (포그라운드 : 앱이 실행중인 상태) (백그라운드 : 앱이 꺼진상태) 원하는 메시지를 전달하기 위한 방법이다. 예전에는 GCM이라고 구글에서 제공하는 클라우드 메세징이 있었다는데, 이 FCM으로 대체되었다고 한다. FCM에는 두 가지 형태가 있는 데 하나는 Notification이고, 하나는 data이다. 두가지 차이점은 아래와 같다. * 전자는 앱이 실행 중(포그라운드) 일 때만 푸시 알림이 오고, * 후자는 실행 중이거나 백그라운드(앱이 실행 중이지 않을 때) ..
첫 출근을 하고 드디어 과제를 받게 되었는데, 바로 스와이프 기능을 구현하는 것이다. 자바로는 뷰 페이저 2를 프래그먼트와 사용했지만, 이제는 코틀린으로 사용해야한다. 어디 한번 코틀린으로 사용하는 법을 알아보자. 해결책 https://todaycode.tistory.com/26 코틀린 viewPager2 : 사용법, 애니메이션 등 1. viewPager2 1-1. viewPager란? 1-2. viewPager의 활용 2. 사용 방법 2-1. 기본 사용법 2-2. 애니메이션 설정 2-3. 여백 설정 1. viewPager2 1-1. viewPager란? 페이지를 넘기듯이 이렇게 슉-슉- 넘.. todaycode.tistory.com 대부분에 자료는 이 곳에서 알게 되었으므로, 출처를 남기겠습니다. 우선..
앱을 출시하기에 앞서 실수로 광고를 삽입하지 못해, 처음 앱을 출시하느라 복잡한 설명 속에서 헤매던 중, 실수로 스토어 키를 삭제해 버렸다... 그래서 방법을 찾아보니, 우선 새로운 키를 만들고 그 키를 pem 파일로 만들어 구글에 제출을 하면 된다고 한다. 어디 한 번 방법을 보자. 해결법 우선 키를 새로 만들어 보자. 우선 이런식으로 APK나 번들 키를 새로 생성해보자. 그러면 이런식으로 jks파일이나, apk 파일이 생성이 되었을 것이다. 이제 이 파일을 pem파일로 변환해보자. 명령 프롬프트나 안드로이드 내의 터미널을 사용하면 된다. 이런 식으로 써보자. keytool -export -rfc -alias [내가 지정한 alias키 이름] -file [pem키 이름 지정 아무거나 상관X].pem -..
안녕하세요. 이제 금연 설루션 그만 앱 프로젝트에 막바지가 왔습니다. 애드몹 광고를 달고 진작해야 했던, 데이터베이스에 비밀번호를 해시화하는 작업이 필요했다. 어려울 것이라고 고민했다. 서버단은 서로 통신하는 법만 간단히 알고 있지, 비밀번호를 보안성 있게 해시화하는 법은 아마 어렵지 않을까 생각이 들었다. 여러 방법들이 있겠지만, 내가 찾은 방법은 SHA-2이다. SHA-2는 Secure Hash Algorithm의 약자이다. 해시 알고리즘은 값을 입력받아, 고정된 길이의 해시값(64, 128) 등등으로 해시값을 출력하는 알고리즘이다. 암호 알고리즘에는 키가 사용되고, 알고리즘 함수는 키를 사용하지 않습니다. 그래서 같은 입력에 대해 항상 같은 출력이 나오게 된다. 이 알고리즘을 쓰는 이유는 동일한 값..
최근에 이제 프로젝트로 마무리하고 있는 앱에 집중적으로 투자하기 위해 글을 많이 쓰지 못했다. 그래도 배운 것을 기록하는 것도, 매일 코딩하는 것 못지 않게 중요하다고 생각한다. 이제 장장 4달이 되어가는 이 앱 만들기도 끝이 보인다. 오늘 내 앱에 적용한 것은 적응형 광고와 전면 광고 다는 법이다. 순서대로 보겠다. 적응형 광고 띠 배너인 적응형 광고는 기존 스마트 배너(이제 없어진다고 함)에 비해 훨씬 더 앱에 사이즈에 맞게 최적화 되어 알맞게 사이즈가 자동으로 맞춰지는 띠배너이다. 다음은 내가 만든 앱에 일부분이다. 그림과 같이 아래에 내비게이션 뷰에다가 배너를 달아 다른 프래그먼트로 이동해도 계속해서 보이게 해두었다. 우선 구글에 로그인을 하여 애드몹도 가입해서 unit키를 와 id키를 얻어오는 ..
어제부터 리사이클러뷰를 습득하느라 정신이 없었다. 다 습득하고 나서 정리해볼 생각이다. 오늘은 인텐트로 넘어온 데이터가 널이거나, 값에 따라 다르게 처리를 하고 싶을 때 사용하는 인텐트 널처리에 대해서 알아보겠다. /**인텐트 널체크 및 구분*/ private void getIntentValue() { Intent intent = getIntent(); if(!TextUtils.isEmpty(intent.getStringExtra("Rtitle"))){ //인텐트 널체크 만약 Rtitle이라는 글자가 안비어 있다면, title = intent.getStringExtra("Rtitle"); mainText = intent.getStringExtra("RmainText"); saveDateV = intent..