본문 바로가기

분류 전체보기

(46)
[OOP] 상속은 캡슐화를 위반하는가? 먼저 캡슐화에 대해 간단하게 설명을 하자면, 캡슐화란 객체 내부의 세부 구현 사항을 외부에 감추고,외부에서는 객체의 공개된 메서드만 통해 상호작용을 하도록 하는게 원칙이다. 그 캡슐화에 대한 방법은 3가지 정도로 추릴 수 있다. 1. 접근 제어자open class Person { protected var age: Int = 0 // 자식 클래스에서 접근 가능 fun setAge(newAge: Int) { if (newAge > 0) { age = newAge } } open fun printInfo() { println("Age: $age") }}class Student : Person() { fun changeAg..
안드로이드 WorkManager, Work 고찰 WorkManager와 worker에 대해 공부를 하다가 이상한 점을 발견하였다. 위와 같이 doWork의 Thread와 onStopped의 Thread가 다르다는 것 이였다. 왜 두 개의 Thread가 다른지 이해가 되지않아 WorkManager와 Worker의 동작 원리 및 내부 소스에 대해 분석해보았다. - WorkManager 1. WorkManager 초기화 기본적으로 WorkManager는 자동으로 초기화된다. 기본적으로 WorkManager는 내장 ContentProvider를 사용하여 자동으로 초기화를 한다는 내용이다. 아래는 자동으로 초기화 하는 과정이다. 위와 같이 Application 보다 먼저 ContentProvider를 사용하여 WorkManager를 초기화하는 작업을 진행한다...
자바 DAO, DTO, Repository DAO, DTO, Repository 각각의 역할과 사용 이유에 대해 정리해본다. 1. DAO - 역할 : DAO는 DB와 상호작용하는 객체이다. DB와 연결 설정하고, 쿼리를 실행한다. - 사용 이유 : DB 접근을 하기 위한 로직과 비지니스 로직을 분리하기 위해 사용한다. 2. DTO - 역할 : DTO는 데이터를 객체로 표현하는 클래스이다. 데이터를 캡슐화 하는 데 사용한다. 계층 간 데이터 전송에 사용한다. - 사용 이유 : 데이터 구조를 일관성 있게 유지하고, Controller, View, Business Layer, Persistent Layer 등의 계층에 데이터를 전송 할 수 있다. 3. Repository - 역할 : Repository는 DAO와 비지니스 레이어의 중간 계층이다. 데이..
안드로이드 JVM과 ART, DVM의 차이 JVM 자바 JVM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신이다. 1) 컴파일 자바 클래스 코드(.java 파일)는 자바 컴파일러(javac)를 사용하여 바이트 코드로 변환한다. 컴파일러는 소스 코드를 읽고 문법적으로 검사한 뒤, 바이트 코드로 변환하여 .class 파일에 저장한다. 2) 로딩 JVM은 자바 애플리케이션을 실행하기 위해 클래스 로더(Class Loader)를 통해 .class 파일들을 메모리에 로딩한다. 클래스 로더는 필요한 클래스들을 파일 시스템이나 네트워크 등에서 찾아서 JVM의 메모리에 로드한다. 3) 자바 Interpreter 와 JIT 컴파일러 1. 인터프리터는 한 줄씩 바이트 코드를 읽어들여 즉시 실행한다. 2. 인터프리터가 한 줄씩 읽..
안드로이드 Context Context란? 안드로이드에서 Context는 애플리케이션의 현재 상태 및 환경에 대한 정보를 알 수 있다. Context 역할 1. 애플리케이션 환경 정보 Context는 현재 애플리케이션의 상태 및 환경 정보를 확인할 수 있다. 예를 들어, 리소스, 애플리케이션 패키지 정보, 환경 설정, 네트워크 연결 정보 등을 얻을 수 있다. 2. 액티비티 및 서비스 시작 Context를 사용하여 액티비티 또는 서비스를 시작한다. 새로운 액티비티를 시작하거나 서비스를 시작하려면 Context를 사용한다. 3. 리소스 액세스 애플리케이션의 리소스(레이아웃, 문자열, 이미지 등)에 액세스할 때 Context가 필요하다. getResources() 메서드를 통해 리소스에 접근한다. 4. 패키지 정보 Context를 통..
안드로이드 Serializable와 Parcelable Serializable과 Parcelable은 안드로이드에서 객체를 전달할 때 사용되는 인터페이스이다. 두 인터페이스는 서로 비슷하지만, 구현 방식과 성능 면에서 차이가 있다. Serializable Serializable은 Java에서 제공하는 인터페이스로, 객체를 직렬화하여 전달한다. 객체를 바이트 스트림으로 변환한 후, 다시 역직렬화하여 객체를 복원한다. Serializable은 구현이 간단하고 사용하기 쉽지만, 객체를 직렬화하고 역직렬화하는 과정에서 많은 자원을 소모하므로 성능이 저하됩니다. Serializable 직렬화/역직렬화 예시 코드 import java.io.Serializable; public class Person implements Serializable { private Strin..
안드로이드 Room Room이란? 스마트폰 내장 DB에 데이터를 저장하기 위해 사용하는 라이브러리다. 과거에는 SQLite라는 데이터베이스 엔진을 사용했지만, 여러 문제점으로 인해 ROOM 라이브러리를 사용한다. Room은 SQLite을 기반으로 한 데이터베이스 라이브러리입니다. Room은 SQLite를 더 쉽게 사용하고, 안전하게 데이터베이스 액세스를 관리할 수 있도록 도와준다. Room 구성요소 Room에는 다음 3가지 주요 구성요소가 있다. 1.데이터베이스 클래스 - 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 액세스 포인트 역할을 한다. 2. 데이터 항목 - 앱 데이터베이스의 테이블을 나타낸다. 3.데이터 액세스 객체(DAO) - 앱이 데이터베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는 ..
안드로이드 Hilt Hilt 란? Hilt는 Dagger 2를 기반으로 한 Android 앱을 위한 의존성 주입(Dependency Injection, DI) 라이브러리다. DI는 의존성 관리를 위한 디자인 패턴으로, 클래스 간의 의존성을 주입하여 코드를 더 모듈화하고 유지보수하기 쉽게 한다. Hilt는 DI를 더 쉽게 구현하도록 도와주는 역할을 하고, 앱의 여러 구성 요소( 액티비티, 프래그먼트, 서비스 등 )에 대한 의존성 주입을 자동화한다. 여기서 "의존성"은 한 클래스가 다른 클래스나 객체를 사용하기 위해 필요한 것이다. 예를 들어, 액티비티가 데이터베이스 서비스를 사용해야 할 때, 데이터베이스 서비스는 액티비티의 의존성이 된다. Application Class ( SingletonComponent ) 우선 Hilt..