목록

    객체 지향 프로그래밍 및 설계 5가지 원칙

    2000년대 초반 로버트 C. 마틴이란 사람이 객체 지향 프로그래밍 및 설계에 대한 SOLID라는 5가지 원칙을 소개했다. 유지 보수와 확장성이 열려있는 애플리케이션을 만들려고 할 때 이 원칙들을 적용할 수 있으며, 코드의 가독성을 높이고 확장이 쉬운 구조를 만드는 지침이다. 1. 단일 책임의 원칙(Single Responsibility Principle) - 객체 지향 프로그래밍에서 '단일 책임의 원칙'이란 모든 클래스는 하나의 책임만을 가지고, 클래스는 그 책임을 완전히 캡슐화해야 함을 뜻한다. 즉 변경 사항이 발생해도 책임이 있는 부분만 수정하면 된다는 뜻이다. 2. 개방 - 폐쇄 원칙(Open Closed Principle) - '개방-폐쇄원칙'은 소프트웨어가 확장에 대해서는 열려있어야 하고, 수..

    [안드로이드] Android Architecture Components(AAC)의 LiveData

    개요 LiveData는 Activity, Fragment, Service 등 다른 앱 구성요소의 라이프사이클을 인식하는 데이터 클래스다. 라이프사이클 인식을 통해 LiveData는 Observer 클래스로 표현되는 관찰자의 활성 상태를 구분하고 업데이트 정보를 알린다. 관찰자가 활성화가 된 상태는 STARTED 또는 RESUMED 상태를 활성 상태로 간주한다. 또한 Activity나 Fragment가 LiveData 객체를 안전하게 관찰할 수 있고, 이들의 수명 주기가 끝나는 즉시 수신 거부되어 쓸데없는 메모리 누수를 걱정하지 않아도 되므로 유용하다. 장점 1. UI와 데이터 상태의 일치 보장 LiveData는 데이터가 변경됨과 동시에 Observer 객체에 통지함. 데이터 변경시 Observer가 대신..

    [안드로이드] Android Architecture Components(AAC)의 ViewModel

    개요 ViewModel 클래스는 수명 주기를 고려해 UI와 관련된 데이터를 저장하고 관리한다. ViewModel 클래스를 사용하면 화면 회전과 같은 인스턴스 제거 → 재생성 과정을 거쳐도 데이터를 유지할 수 있다. 꼭 ViewModel로 데이터를 유지시키지 않아도 대안은 있긴 하다. 예를 들면 앱의 Activity들 중 하나에 사용자 목록이 포함되어 있는데, 구성이 변경되어 Activity가 다시 생성되면 새 Activity가 사용자 목록을 다시 가져와야 하는데, 데이터가 단순한 경우 Activity의 onSaveInstanceState() 메소드를 사용하여 onCreate()의 번들에서 데이터를 복원할 수 있다. 하지만 이 방법은 사용자 목록이나 비트맵과 같은 대용량의 데이터가 아니라, 직렬화했다가 다..

    [안드로이드] Module 수준의 Gradle

    compileSdkVersion 어떤 안드로이드 SDK 버전으로 앱을 컴파일할 건지 정할 수 있다. 컴파일 시에만 적용되고 런타임에는 영향을 주지 않는다. 해당 버전의 안드로이드 API를 사용할 수 있다는 것을 의미한다. 코드에서 import문으로 참조되는 클래스나 메소드를 참조할 때 어떤 버전의 SDK에서 참조할지 결정한다. targetSdkVersion minSdkVersion 이상에서의 특정 기능을 사용을 위함. 실제 컴파일에는 관여하지 않음. 현재 개발 시 이용하고 있는 라이브러리 SDK 버전. 대부분 최신 버전을 지정하여 사용하는것이 좋다. 지정한 버전까지 앱의 안정성을 보장한다는 의미. minSdkVersion 해당 앱을 몇 버전의 스마트폰까지 지원할 것인지에 대한 설정. application..

    [코틀린] apply, with, let, also, run의 용도

    코틀린에는 범위 지정 함수인 apply, with, let, also, run 이 있다. 람다식이 제공된 객체에서 범위 지정 함수를 호출하면 임시 범위가 형성되고, 이 범위 내에선 이름 없이 객체에 접근할 수 있다. 하지만 하나의 코드 블럭에서 여러 범위 지정 함수가 중첩되면 가독성이 떨어지고 파악이 힘들어진다. 단, 중첩이 아닌 호출 체인으로 결합하면 코드의 가독성이 향상된다. apply 수신 객체의 함수를 사용하지 않고, 수신 객체 자신만 다시 반환하려는 경우. 대표적인 경우는 객체의 초기화이다. apply 사용 val user = User().apply{ name = "mj" gender = "male" } apply 미사용 val user = User() user.name = "mj" user.g..

    [안드로이드] Room

    Room 이란? Room은 Android Architecture Componet(AAC) 중 하나인 라이브러리이고 SQLite의 기능을 최대한 활용하는 동시에 데이터베이스를 원활하게 접근할 수 있도록 도와주는 ORM이다. Room의 주요 컴포넌트 데이터베이스: 데이터베이스 홀더를 포함하며 앱의 지속적인 관계형 데이터의 기본 연결을 위한 기본 액세스 포인트 역할을 합니다. @Database로 주석이 지정된 클래스는 다음 조건을 충족해야 합니다. RoomDatabase를 확장하는 추상 클래스여야 합니다. 주석 내에 데이터베이스와 연결된 항목의 목록을 포함해야 합니다. 인수가 0개이며 @Dao로 주석이 지정된 클래스를 반환하는 추상 메서드를 포함해야 합니다. 런타임 시 Room.databaseBuilder()..