JVM이란?
·
개발/개념 및 기법
1. JVM이란?JVM은 자바 프로그램 실행의 핵심 엔진이며, 바이트코드를 기계어로 번역하고 실행한다. (1) 바이트 코드 실행자바 소스 코드(.java)는 컴파일러(javac)에 의해 바이트코드(.class)로 변환된다.JVM은 이 바이트코드를 실행 가능한 기계어로 번역하여 실행한다.플랫폼 독립성을 보장하는 이유가 바로 이 바이트 코드 때문!!(2) 플랫폼 독립성 제공자바 프로그램은 특정 운영체제에 의존하지 않는다.JVM이 설치되어 있다면 어떤 환경에서든 동일하게 실행할 수 있다.(3) 메모리 관리JVM은 프로그램 실행 시 필요한 메모리를 자동으로 관리한다.주요 메모리 영역:Heap: 객체와 인스턴스 변수가 저장됨 (GC에 의해 관리)Stack: 메서드 호출과 지역 변수가 저장됨 (힙보다 빠른 접근)M..
싱글톤(Singleton) 패턴과 Kotlin에서 object 객체
·
개발/소프트웨어 디자인 패턴
🌟 들어가기 전요즘 메모리 최적화 이슈에 대해 관심이 많다.그렇게 메모리에 대해서 보다가 유독 눈에 띄는 게 있었다. 바로 Kotlin에서 Object 객체 !! 늘 그냥 쓰라니까 써왔던.익숙하지만 낯선. 그 존재에 대해 파헤쳐봤다. 🔍 세부 내용1. 싱글톤 패턴(Singleton Pattern)싱글톤 패턴은 객체의 전역적 유일성을 보장하는 디자인 패턴이다.이를 통해 하나의 인스턴스만 사용하며, 여러 곳에서 동일한 객체를 공유하거나 관리할 수 있다.전역상태 관리: 애플리케이션에서 하나의 상태를 유지하고 여러 곳에서 공유할 때 사용 (ex. 로그인 세션, 앱 설정, DB 연결)자원 절약: 객체가 여러번 생성되지 않도록 보장하여 메모리 사용 절감일관된 상태 유지: 하나의 인스턴스를 통해 상태를 일관되게 ..
Android에서 OkHttp 통신 시 Memory를 최적화 하기 위한 체크 포인트
·
Android/네트워킹
🌟 들어가기 전최근 회사에서 관리하는 앱이 OOM 이슈가 자꾸 일어난다.RxJava 배압 이슈인가 하고 확인해봤더니 그 원인은 아니었다. Firebase의 Crashlytics를 뜯어본 결과 OutOfMemoryError는 okhttp 통신 시 발생하였고,이 부분에서 메모리 누출이 의심되었다. 그렇다면 OkHttp 통신할 때 Memory를 최적화하기 위한 체크 포인트는 무엇이 있을까? 🔍 세부 내용1. ConnectionPool 사용 추가연결 관리를 최적화하기 위해 명시적으로 ConnectionPool을 추가하면, OkHttp에서 연결을 재사용하여 새로운 연결을 생성하거나 닫는 작업을 줄여준다.// ConnectionPool 설정 추가ConnectionPool connectionPool = new C..
Android에서 푸시 알림이 오지 않는 경우 체크할 사항
·
Android/에러 및 이슈 사항
🌟 들어가기 전회사 프로젝트에서 이슈가 발생했다.무음 모드에서 푸시 알림이 안온다는 것 ㅠㅠ무음모드라고 푸시 알림을 통제할 수 있는게 아닌데? 회장님 지인 폰에서 발생한 이슈라서 직접 확인도 불가하지만 삐뽀삐뽀- 긴급 상황이었다.그래서 그 외에 푸시 알림이 누락되는 경우가 어떤게 있는지 체크해보았다. 🔍 세부 내용1. 방해금지모드 여부방해금지 모드인 경우에는 푸시 알림 표시가 제한될 수 있습니다.2. Android Doze 모드Android 6.0부터는 기기가 사용되지 않는 동안 앱 활동과 네트워크 작업을 제어하는 Doze(절전) 모드가 생겼습니다. 2-1) Doze 모드가 작동하는 조건화면이 꺼져 있음.기기가 충전 중이지 않음.사용자가 기기를 움직이지 않음(센서 데이터를 통해 감지).네트워크와 작업..
완전탐색과 이진탐색
·
개발/알고리즘
🌟 들어가기 전알고리즘 공부를 하면서 가장 많이 쓰는 탐색 기술!!레벨이 오르면 가장 많이 쓰는게 BFS와 DFS이다.하지만 가장 간단하고 기본적인 탐색 기술은 아무래도 완전탐색이 아닌가 싶다. 기본이 되면서도 가벼운 완전탐색과 이진탐색을 알아보기로 하였다. 🔍 세부 내용완전 탐색모든 경우의 수를 탐색하여 답을 찾는 방식이다.예를 들어 [1,2,3,4,5]의 배열이 있으면 5라는 숫자를 찾으려면 배열을 모두 돌아야만 찾을 수가 있다. 이렇게 모든 배열을 탐색하는 방법도 완전 탐색에 들어간다.완전 탐색은 모든 원소를 순회해야 하므로 O(N)이라는 시간 복잡도를 가지고 있다. 그래서 코딩테스트 문제를 풀 때 완전탐색을 하는 경우에는 시간 초과 이슈가 발생할 수도 있다. 예시)/* 배열에서 특정 숫자 찾기..
Android Studio Compose에서 Color 미리보기 (게터 아이콘)
·
Android/도구 및 라이브러리
🌟 들어가기 전안드로이드 프로젝트를 구현하면서 Color 값 세팅은 필수적이다.그런데 게터 아이콘(왼쪽 여백)으로 Color 값을 미리보기 할 수 없다면일일히 값을 검색해서 세팅해야 하는 수고로움이 추가된다. Android Studio에서 Compose의 Color 값을 미리보기 할 수 있는 방법이 있을까? 🔍 세부 내용Compose Color Preview Plugin미리보기를 할 수 있는 방법은 IntelliJ에서 프리뷰 플러그인을 다운 받는 것이다. 1. File > Settings > Plugins 진입 2. Compose Color Preview 검색 후 설치 3. 게터 이미지로 Color Preview 확인기존에는 이렇게 왼쪽에 아무 것도 볼 수 없었다면,플러그인을 설치한 이후에는 게터 아..
객체지향 언어와 함수형 언어, 그리고 Java와 Kotlin의 관계
·
프로그래밍 언어
🌟 들어가기 전내가 자주 쓰는 언어인 Java와 Kotlin.두 언어는 모두 객체지향 언어이지만 Kotlin은 함수형 언어에 포함되기도 한다. 그렇다면 우리가 흔히 아는 객체지향 언어와 함수형 언어.그들 사이의 차이는 어떤 것이고 특징은 어떨까? 🔍 세부 내용✅ 객체지향 언어 (OOP)객체지향 언어는 클래스와 객체를 기반으로 데이터와 메서드를 캡슐화하여 재사용성과 유지보수성을 높이는 특징을 가지고 있다.가장 대표적인 특징 4가지 !캡슐화(Encapsulation): 데이터와 메서드를 하나의 객체로 묶어 외부에 노출할 범위를 제어 (ex. getter/setter)상속(Inheritance): 기존 클래스의 기능을 재사용하여 새로운 클래스를 생성다형성(Polymorphism): 동일한 메서드 이름으로 ..
Android 앱 성능 최적화: 메모리 누수 해결하기
·
Android/고급 주제
🌟 들어가기 전안드로이드 개발을 하면서 어쩌면 기본적이지만 가장 신경을 못쓰는 부분이 메모리이다.작은 앱 같은 경우는 메모리가 크게 쌓일 일이 없어 신경을 쓰지 않아도 크래시가 발생하지 않지만,채팅 앱과 같이 앱의 사이즈가 크고 데이터가 많은 경우에는 메모리 관리에 주의해야 한다. 내가 관리하는 앱에서도 계속 OutOfMemoryError 이슈가 발생하고 있고,오류를 수정하면서 메모리 관리의 중요성을 알게 되었다. 그 중 OOM 이슈가 가장 크게 발생하는 원인, 메모리 누수를 해결해보자.  🔍 세부 내용메모리 누수란?메모리 누수(memory leak)는 더 이상 사용되지 않는 객체가 GC(Garbage Collector)에 의해 해제되지 않고 메모리를 계속 차지하고 있는 상태이다.이는 앱 성능 저하와..
보일러 플레이트 코드 (Boilerplate Code)
·
개발/소프트웨어 디자인 패턴
🌟 들어가기 전언젠가 언뜻 들어봤던 보일러 플레이트 코드.개발자가 가장 싫어한다는 중복된 코드라길래 막연하게 무의미하게 반복되는 코드를 예상했다.그러나 예시를 찾아보면 정작 필요한 소스코드였다.그래서 정확하게 어떤 느낌이며, 해소할 수 있는 방법은 무엇인지 찾아보았다.🔍 세부 내용보일러 플레이트 코드란?특정 기능을 구현하기 위해 반드시 작성해야 하는 형식적이고 반복적인 코드이다.보일러 플레이트라는 이름이 붙여진 이유보일러 플레이트는 철강 산업에서 보일러를 만들 때 사용되는 표준화 된 철판을 의미한다.이렇게 표준화 된 철판이 있으니 대량 생산이 가능하고, 크기나 형태가 일정해 여러 장비에서 재사용 될 수 있었다.그래서 소프트웨어 개발에서도 반복적이고 표준화 된 코드를 가리키는 용어로 사용되기 시작했다...
RxJava 배압(Backpressure) 이슈와 Flowable
·
Android/도구 및 라이브러리
🌟 들어가기 전안드로이드 개발자라면 누구나 익숙한 라이브러리인 RxJava.RxJava는 비동기 데이터 처리와 반응형 프로그래밍을 위한 Java 라이브러리다.(참고 링크 👉 https://anovice-dp.tistory.com/179) 데이터를 통신하는 과정에서 앱이 멈추지 않고 자연스럽게 흘러가며, UI가 변경되도록 도와준다.이렇게 유용한 RxJava를 사용할 때 주의할 점 있다. 바로 배압 이슈.Backpressure라고도 한다.🔍 세부 내용1. 배압이란?데이터를 생산하는 속도와 데이터를 소비하는 속도가 불균형할 때 발생하는 문제이다.생산자가 데이터를 너무 빨리 발행하고, 구독자가 이를 처리하지 못하면 데이터가 계속 누적되어 OOM 이슈가 발생한다.2. Flowable로 관리하기Flowable..
[프로그래머스/Kotlin]Lv2 - 광물 캐기
·
프로그래머스/Kotlin | Level2
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제문제 설명마인은 곡괭이로 광산에서 광석을 캐려고 합니다. 마인은 다이아몬드 곡괭이, 철 곡괭이, 돌 곡괭이를 각각 0개에서 5개까지 가지고 있으며, 곡괭이로 광물을 캘 때는 피로도가 소모됩니다. 각 곡괭이로 광물을 캘 때의 피로도는 아래 표와 같습니다.예를 들어, 철 곡괭이는 다이아몬드를 캘 때 피로도 5가 소모되며, 철과 돌을 캘때는 피로도가 1씩 소모됩니다. 각 곡괭이는 종류에 상관없이 광물 5개를 캔 후에는 더 이상 사용할 수 없습니다.마인은 다음과 같은 규칙을 지키면서 최소한의 피로도로 광물을 캐려고 합니다.사용할 수 있는 곡괭이중 아무거나 하나를..
[프로그래머스/Kotlin]Lv2 - 모음사전
·
프로그래머스/Kotlin | Level2
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제문제 설명사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.제한사항word의 길이는 1 이상 5 이하입니다.word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.입출력 예 word result "AAAA..
[프로그래머스/Kotlin]Lv1 - 햄버거 만들기
·
프로그래머스/Kotlin | Level1
오늘의 Kick StringBuilder를 이용하여 시간 복잡도 줄이기  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제문제 설명햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다. 함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 됩니다. 상수가 일하는 가게는 정해진 순서(아래서부터, 빵 – 야채 – 고기 - 빵)로 쌓인 햄버거만 포장을 합니다. 상수는 손이 굉장히 빠르기 때문에 상수가 포장하는 동안 속 재료가 추가적으로 들어오는 일은 없으며, 재..
Android Studio에서 Proto DataStore 설정하는 방법 (gradle kotlin)
·
Android/Jetpack
Proto DataStore에 대한 친절한 정보가 많이 없어서제가 열심히 삽질해가며 작성한 글입니다... 😭 참고한 소스코드 : NowInAndroid[versions]# datastoreandroidxDataStore = "1.1.1"protobufPlugin = "0.9.4"protobuf = "4.26.1"junitJunit = "4.12"[libraries]# AndroidXandroidx-dataStore = { group = "androidx.datastore", name = "datastore", version.ref = "androidxDataStore" }androidx-dataStore-core = { group = "androidx.datastore", name = "datastor..
[Android/Error]Cannot add a AndroidSourceSet with name 'debug' as a AndroidSourceSet with that name already exists
·
Android/에러 및 이슈 사항
개요새로운 프로젝트에서 Proto DataStore를 도입하기 위해 DataStore의 Proto 모듈을 추가하였다.해당 모듈 Gradle 작성 중에 한 오류를 만나게 되었다. A problem occurred configuring project ':core:datastore-proto'. > Cannot add a AndroidSourceSet with name 'debug' as a AndroidSourceSet with that name already exists. 이 오류는 AndroidSourceSet을 이미 정의된 이름(debug 또는 release)으로 다시 추가하려고 할 때 발생하는 것이었다. 그렇다면 이 오류를 발생시킨 코드는 무엇일까.원인androidComponents.beforeVar..
뿌꾸 빵
'분류 전체보기' 카테고리의 글 목록 (3 Page)