전체 글

전체 글

    [Android] ViewTreeObserver를 이용하여 View가 그려지는 시점을 알아보자! (getWidth(), getHeight()의 출력값이 0인 경우..)

    ViewTreeObserver View의 높이를 구하기 위해, onCreate() 콜백 메서드에서 getHeight() 혹은 getMeasuredHeight()를 호출하면 0이 반환되곤 합니다. 그 이유는 높이를 얻고자 하는 View가 아직 화면에 그려지기 이전에 호출했기 때문입니다. ViewTreeObserver를 알기 전에는 자바에서는 Thread, 코틀린에서는 Coroutine을 사용하여 n MS(Millisecond) 만큼 시간이 지났을 때 높이를 얻으라고 했을 것입니다. 하지만 이런 방식은 View가 그려진 정확한 시점을 알지 못하기 때문에, n MS라는 시간 안에 View를 그리지 못하는 상황이나 기기 스펙에서는 똑같이 0을 반환하는 시간차 문제가 발생할 것입니다. 그렇기 때문에 알아야하는 것..

    [Android] Firebase Dynamic Link를 활용하여 사용자 초대링크 생성하기

    이번 포스팅에서는 Firebase의 Dynamic 링크를 활용하여 사용자를 유입시키고 초대할 수 있는 링크를 만들어보도록 하겠습니다. 해당 기능을 구현하게 된 계기는, 현재 동아리에서 진행하고 있는 과외 학생 관리 서비스에서 선생님이 학생을 수업에 참여시키기 위한 초대 링크 기능이 필요하였기 때문입니다. 그렇게 구상한 로직은 아래와 같습니다. 1. 선생님이 수업을 생성한다. 2. 초대하기 버튼을 통해 초대링크를 생성하고, 카카오톡으로 학생에게 링크를 공유한다. 3. 링크를 통해 앱 설치 후 접속하면, 선생님의 수업에 학생이 참여한다. 해당 포스팅에서는 링크를 공유하고 카카오톡으로 공유하여 접속하는 기능만 다루겠습니다. 우선 Firebase 사이트에 접속합니다. https://console.firebase..

    [Android] 자바 코틀린 (Pattern, Matcher)정규식을 사용하여 패스워드 조건을 만들어보자

    동아리 프로젝트 중, 비밀번호 변경을 구현하는 단계에서 정규식을 사용할 일이 생겼습니다. 조건은 '영문, 숫자, 특수문자 중 2개를 사용하여 최소 8자리 이상'의 비밀번호를 입력해야 합니다. 자바와 코틀린에서는 기본적으로 Pattern과 Matcher라는 정규식 라이브러리 클래스를 제공합니다. 이번 포스팅에서는 해당 클래스의 사용방법에 대해 알아보고 직접 비밀번호에 적용해보도록 하겠습니다. Pattern - Pattern 클래스 주요 메서드 compile(String regex) : 주어진 정규표현식으로부터 패턴을 만듭니다. matcher(CharSequence input) : 대상 문자열이 패턴과 일치할 경우 true를 반환합니다. asPredicate() : 문자열을 일치시키는 데 사용할 수있는 술어..

    쿠키(Cookie)와 세션(Session)을 이용한 로그인

    쿠키(Cookie)와 세션(Session) 동아리 프로젝트 기획 단계에서 '로그인 기능을 어떠한 방식으로 구현하는 것이 효율적일까?' 라는 생각을 하게 되어, OAuth, JWT 등 여러 방법들 중에서도 쿠키와 세션을 이용한 로그인 방식을 우선적으로 공부하여 정리합니다. 쿠키(Cookie)란? 쿠키(Cookie)란 서버가 사용자의 웹 브라우저(Client)에 저장하는 데이터입니다. 쿠키의 형태는 Key : Value의 String 형식으로 이루어져 있습니다. 쿠키당 최대 4Kb까지 저장할 수 있으며, 쿠키 표준안인 RFC2109에 따르면, 300개까지 만들 수 있습니다. 다만, 브라우저마다 저장되는 쿠키가 다르기 때문에, 예를 들어 크롬에 남긴 쿠키는 IE에서 사용할 수 없습니다. (브라우저가 다르면 서..

    [DND 동아리][LMS 서비스] Git Commit Convention 및 개발 패턴 설정

    Git Convention (개발 협약) 개발을 진행함에 있어서, 코드 및 작업을 통일화하여, 충돌을 최소화하기 위해 안드로이드 개발자 간에 협악을 정하는 것을 Convention이라고 합니다. 특히, 그 중에서도 Git을 어떤식으로 관리할 지에 대해 정한 약속을 Git Convention이라고 합니다. 6-4조는 과외 학습관리시스템(LMS)을 개발하기에 앞서, 안드로이드 개발자끼리 어느정도 개발 협약을 정해놓았습니다. 우선 커밋 컨벤션입니다. ✏️ Commit Convention Head 기능을 태그로 작성한다. 어떤 부분을 수정했는지 표시하기 위해서 태그 뒤에 괄호로 커밋한 기능명을 작성한다. 설명은 대문자, 동사원형으로 작성 시작한다. Tag : Feat, Fix, Design, Rename, Re..

    [DND 동아리][LMS 서비스] 프로젝트 기획 및 서비스 타겟 선정

    개발 프로젝트 개발에 앞서, DND 4조는 LMS 서비스를 기획하였습니다. LMS(학습관리시스템 : Learning Management System)란, 온라인 학습을 통하여 학습자들의 성적과 진도 등 학습관리 전반에 걸친 사항들을 관리해주는 시스템입니다. 문제 제기 저희 팀은 최근 교육용 앱 분야의 발달과 더불어 비대면 수업이 증가하면서, 학교와 학원에서는 적극 활용이 되고 있지만, 왜 과외 수업에는 아직 도입되어 있지 않을까? 라는 의문을 제기하였습니다. 예를 들어, 아래와 같은 상황이 있을 수 있습니다. 1. 과외비 정산일자가 지났는데도 학부모님께서 입금해주지 않는 경우 2. 과외 학생 및 수업 진도를 앱 하나로 관리하고 싶은 경우 3. 본인이 학습한 수업 진도를 체크리스트화 하여 시각적으로 한 눈..

    [Git] 이슈 생성 및 관리 (이슈 관리 키워드)

    동아리에 들어가서 팀프로젝트를 할 일이 생기다보니 깃에 대해 조금 더 공부해야할 필요성을 느꼈습니다. 특히, 프로젝트 기능 중, 특정 기능을 개발해야할 일이 생기거나 문제가 생겼을 때 Github의 Issue를 통해 해당 내용들을 관리한다는 사실을 알게 되었습니다. 따라서 이번 포스팅에서는 깃허브에서 이슈를 생성하고 관리하는 방법에 대해 알아보려고 합니다. 우선, 본인이 이슈를 생성하고자 하는 Origin Repository에 들어가 Issues 항목을 클릭합니다. 그럼 이렇게 초록색 버튼이 우측 상단에 위치하게 됩니다. 이 버튼은 이슈를 생성하는 페이지로 이동시켜주는 역할을 합니다. 그럼 이렇게 Title(제목)과 Comment(내용)을 작성할 수 있는 Form이 보일텐데, 여기서는 사진을 첨부할 수도..

    [DND 동아리 합격] DND 동아리 6기 합격 후기!

    오늘은 DND 동아리 6기에 합격! 하였다는 기쁜 소식으로 찾아왔습니다! 여러모로 떨어지지는 않을까 걱정이 많았는데 이렇게 뽑아주시다니 정말 운영진분들에게 감사할 따름입니다..🎈 이번 포스팅에서는 DND가 무슨 동아리인지, 지원과정 및 후기에 대해 간략하게 소개해드리려고 합니다. 동아리 소개 DND(Developer & Designer)는 개발자와 디자이너가 합을 이루어 IT프로젝트 진행에 도움을 제공해주는 비영리단체입니다! 이미 실력을 갖춘 인원들만 선발하는 것이 아닌, 본인이 정말 하고 싶은 분야에 열정을 갖고 계신분들이면 좋게 평가를 해주시는 듯합니다. 슬로건부터가 교육 기회 및 경험의 평등함을 추구 하는 것이라고 합니다! 많은 분들께서 이런 아름다운 슬로건에 매력을 느끼셨는지, 특히나 이번 6기 ..

    [Android] 안드로이드 Strings.xml 국가별 언어 설정 방법 및 국가 코드 정리

    개발을 하다 보면, Android, ios 상관없이 다국어화를 해야 하는 경우가 발생하곤 합니다. 한국에서 중국어나 일본어로 된 앱을 잘 사용하지 않듯이, 본인의 모국어에 맞추어 화면에 텍스트를 보여줄 필요가 있습니다. 이번 시간에는 다양한 국가에서 앱을 사용하기 편하도록 설정하는 다국어 설정을 해보겠습니다. 우선 위 사진을 살펴보면, values와 values-ko 두 가지가 있습니다. values의 경우 우리가 처음 안드로이드 프로젝트를 실행하면 자동으로 생성되는 폴더로, 어떠한 나라에서든지 Default로 사용되는 폴더입니다. 그 아래를 보면 values-ko라는 폴더가 보이는데, 이는 한국어로 설정한 기기에서 앱을 실행했을 때 사용될 폴더입니다. 이처럼 특정 국가의 언어를 지정하고 싶으면, 국가 ..

    [Android] RecyclerView LayoutPosition vs AdapterPosition 차이를 알아보자!

    개발을 하던 중, RecyclerViewAdapter를 구현해야 하는 상황이 생겼습니다. 그러다 문득 ViewHolder 내부 메서드를 살펴보았는데, 이 중 position을 반환하는 함수가 정말 다양하다는 사실을 알게 되었습니다. 그럼 position을 반환하는 많은 메서드 중에서, 과연 무슨 함수를 사용해야 하는 것일까? 한 번 차근차근 살펴보도록 하겠습니다! /** * @deprecated This method is deprecated because its meaning is ambiguous due to the async * handling of adapter updates. You should use {@link #getLayoutPosition()} or * {@link #getAdapterP..