전체 글

우아한테크코스/Level 2

[Inflation] Inflation?

💡 Intro 레벨 인터뷰를 준비하기 위해 Do It 안드로이드 앱 프로그래밍 책을 꺼내보았고, 인플레이션에 대해 설명하려고 보니 부족함을 느꼈다. 최근에 정리한 글들과 비교하면 기본적인 내용이라고 생각할 수 있지만, 기본이 가장 중요하다고 생각하기 때문에 이해한대로 정리해보려고 한다. ❓Inflation 단순히 XML레이아웃 파일을 만들었다고 소스코드에서 뷰를 참조할 수 없다. 왜? 아직 메모리에 올라가있지 않으니까!  그럼 어떻게 해야할까? 인플레이션은 XML레이아웃의 내용이 메모리에 객체화되는 과정이다. 일반적으로 액티비티나 프래그먼트가 생성될 때 setContentView 메서드로 XML레이아웃을 인플레이션하고 화면에 표시한다. 이 과정에서 XML레이아웃 파일에 정의되어 있는 뷰들은 해당 액티비..

우아한테크코스/Level 2

[Design Pattern] Repository Pattern

💡 Intro 장바구니 미션 Step 1&2 단계 피드백 수업과 함께 Repository 패턴에 대해 배웠다. 하지만 이게 무엇인지 이해하지 못한 상태였고, 이대로는 미션에 어떻게 적용하지 못하겠다는 생각이 들었다. 안드로이드 장인 멘데루에게 도움을 요청해 1:1 명강의를 들었고, 내가 이해하고 적용한 Repository 패턴에 대해 정리하려고 한다. ❓ 안드로이드 아키텍쳐 계층 Repository 패턴에 대해 알아보기 전에 안드로이드 아키텍처 계층에 대해 간단하게 알아보자. 안드로이드 아키텍쳐는 Ui Layer(Presentation Layer), Domain Layer, Data Layer 총 3가지 계층으로 나눠진다. 그리고 각 계층이 하는 일은 다음과 같다. Ui Layer(Presentation..

우아한테크코스/Level 2

[Data Binding] Binding Adapter

💡 Intro 영화 선택 미션부터 DataBinding을 사용하기 시작했다. 하지만 지금까지 내가 사용하고 있는 방식은 ViewBinding과 다를 것이 없다. DataBinding은 xml에 데이터를 넣어 뷰(Activity or Fragment)에서 처리하지 않아도 되는 강력한 기능을 제공하는데 이해가 부족해서 이 부분을 사용하지 못하고 있었던 것이다. 장바구니 step1&2 미션의 리뷰 중 다음과 같은 리뷰가 있었다. ProductViewHolder와 CartProductViewHolder는 거의 유사한 코드로 작성되어 있습니다. 중복 코드를 개선해보면 어떨까요? 처음에는 중복코드를 줄이기 위한 추상화를 생각했다. 어떤 방식으로 하는게 좋을까 조언을 구하다 산군을 만났고, DataBinding의 바..

우아한테크코스/Level 2

Serializable vs Parcelable

💡 Intro 미션을 진행하면서 내가 만든 객체(Class)를 다른 컴포넌트에 넘겨야하는 시점이 등장했다. 일단 먼저 마주한 것은 Intent를 통해 넘기는 것이었다. intent의 putExtra함수를 사용하면 기본적으로 사용하는 자료형은 넘겨줄 수 있지만 내가 만든 클래스의 형태는 넘길 수 없다. 그럼 어떻게 해야할까? 바로 직렬화다. 그게 뭔지, 그리고 어떻게 사용하는지 알아보자. ❓ 직렬화? 직렬화는 메모리 내에 존재하는 정보를 보다 쉽게 전송 및 전달하기 위해 바이트코드 형태로 나열하는 것이다. 여기서 말하는 메모리 내에 존재하는 정보는 아마도 우리가 만든 객체가 될 것이다. 직렬화와 역직렬화는 객체의 상태를 저장하거나 전송하기 위해 사용된다. 예를 들어, 네트워크를 통해 객체를 전송하기 위해서..

우아한테크코스/Level 2

[DataBinding] 데이터 바인딩 사용하기

💡 Intro 데이터 바인딩은 Ui요소와 데이터를 프로그래밍적인 방식으로 연결하지 않고, 선언적 형식으로 결합할 수 있도록 도와주는 라이브러리다. 데이터 바인딩은 뷰 객체를 참조하는 것이 아니라 뷰 객체가 보여주는 데이터를 가진 변수를 제어한다. 즉, 뷰에 데이터를 가지고 있는 변수를 처음에 설정해주면 그 변수의 값이 보여질 것이고, 버튼을 클릭하는 등의 이벤트가 발생했을 때 뷰들을 참조하여 제어하는 것이 아니라 뷰에 설정되어 있는 변수의 값을 변경하면 그 뷰가 보여주는 데이터가 바뀌고 화면도 바뀌게 된다. 체감하기 가장 좋은 이점은 뷰 객체를 제어할 필요가 없기 때문에 findViewById() 함수를 사용하지 않아도 되고, 이 덕분에 코드가 줄어드는 부분이다. 영화 극장 선택 미션을 시작하면서 데이..

우아한테크코스/Level 2

[Code with Me] 안드로이드 Code with Me 사용하기

💡 Intro 인텔리제이에는 IDE 내에서 Code with Me를 제공해주지만 안드로이드 스튜디오에는 기본적으로 제공해주지 않더라. 그래서 아, 안드로이드에서는 사용할 수 없구나. 생각했는데, 레벨 2가 거의 다 끝나가서야 사용할 수 있다는 것을 알았다. 😅😅 게더에서 써니와 힘들게 화면공유로 페어 미션을 진행하고 있었는데, 제임스가 "안드로이드에도 Code With Me 있는데 왜 안쓰죠? 혹시 하남자?"라는 말과 함게 방법을 알려주셨다. ❗️Code With Me 설치 1. Code With Me 다운로드 Code With Me - IntelliJ IDEs Plugin | Marketplace Code With Me is a new solution for collaborative developme..

우아한테크코스/Level 2

[RecyclerView] 영화티켓예매 RecyclerView 적용

💡 Intro 영화 티켓 예매 미션이 Step3&4로 넘어오면서 ListView를 RecyclerView로 바꿔보았다. 사실 ListView보다는 RecyclerView를 많이 사용하기 때문에 RecyclerView에 대해서는 좀 더 자세하게 파헤쳐보려고 한다. ListView와 RecyclerView의 가장 큰 차이는 아래와 같다. 안드로이드 공식문서에 보면 다음과 같이 나와있다. Displays a vertically-scrollable collection of views, where each view is positioned immediately below the previous view in the list. For a more modern, flexible, and performant appro..

우아한테크코스/Level 2

[ListView] 영화티켓예매 ListView적용

💡 Intro 레벨2 첫 번째 미션으로 영화 티켓 예매 미션을 진행했다. 안드로이드에서는 보통 위와 같은 뷰를 구성하기 위해 RecyclerView를 사용한다. 그런데 미션 요구사항에 ListView를 사용하라는 프로그래밍 요구 사항이 있었고, 이를 만족하기 위해 ListView를 사용했다. (일단 ListView에 영화 목록과 광고가 함께 들어가있는 것은 배제하고, 단순하게 하나의 뷰로 ListView를 사용한다고 가정하자.) 이 요구사항을 통해 ListView를 직접 사용해보면서 어떠한 이유로 ViewHolder 패턴이 나오게 되었고, RecyclerView를 사용하게 되었는지에 대해 공부하라는 취지로 이해를 했기 때문에 "왜 ListView를 써야해"와 같은 질문은 넣어두고 요구사항을 만족하려고 노..

Krrong
노는게 제일 좋아