본문 바로가기

gyub's 공부일기

(41)
[Android] 프로세스 라이프사이클 안드로이드 시스템은 새로운 프로세스가 사용될 메모리가 부족할 때나 더 중요한 프로세스가 실행되어야 하는 상황에서는 기존에 중요하지 않은 프로세스는 종료한다. 어떤 프로세스를 살리고 죽일지 결정할 때, 시스템에서는 컴포넌트의 상태와 프로세스에서 실행되고 있는 컴포넌트를 기초로 해서 각각의 프로세스에 "중요도 계층"을 할당한다. 중요도 계층 1. Foreground Process 현재 유저가 사용하고 있는 프로세스. - 유저와 상호 동작되고 있는 화면(액티비티)은 Foreground 프로세스에 속함 - 현재 화면과 Binding되어 있는 서비스는 Foreground 프로세스에 속함 - startForeground()를 이용해서 호출한 프로세스는 Foreground 프로세스에 속한다. - onCreate(),..
[Android] 프로세스 안드로이드를 공부하던 중 "여러 프로세스를 사용하고 있다 " = "여러 앱을 사용하고 있다" 일까? 라는 궁금증과 함께 공부하게 되었다. 말로만 프로세스 프로세스 거렸지 내가 알고있던 지식은 참 얕았다. 위의 질문에 대한 답변은 "아니오"이다. 현재 어플리케이션에서 실행되고 있는 컴포넌트가 없을 때, 어플리케이션 컴포넌트가 시작되면 안드로이드 시스템에서는 하나의 스레드로 구성된 프로세스를 시작시킵니다. 기본적으로 같은 어플리케이션 내에 있는 모든 컴포넌트는 동일한 프로세스, 즉 "메인 스레드"에서 동작한다. 어플리케이션 컴포넌트가 시작할 때, 애플리케이션에서 이미 프로세스가 존재하고 있다면 새로 시작한 컴포넌트는 그 프로세스에서 실행된다. 하지만 어플리케이션에 존재하는 여러 컴포넌트들이 서로 다른 프로세..
[OS] 메모리 페이징 메모리 페이징이란? : 컴퓨터 운영체제에서 메모리 페이징은 주 메모리에서 사용하기 위해 보조 저장소에서 데이터를 저장하고 검색하는 메모리 관리 체계이다. 메모리는 알겠지만,,,그래서 페이징한다는 것이 뭘까? 페이징: 논리 주소의 고정된 페이지라고 불리는 블록들로 분할 관리하는 기법이다. (대충 논리 주소를 일정 크기(?)의 블록들로 분할하여 사용한다는 뜻 같다.) 그렇다면, 이 페이징 기법이 어떤 구조이고, 왜 쓰이는가를 알아보자. 프로세스를 연속할당하면 외부 단편화가 발생하고, 그로인해서 자투리 공간이 남아서 못 쓰는 부분이 생긴다. 위의 상황은 들어가려는 PROCESS가 빈 부분(HOLE)보다 커서 못 들어가는 것 같다. 그래서 이러한 경우를 없애기 위해 개발자들은 페이징 방법을 했다. 논리주소를 동..
배열 vs 리스트 1. 배열 - 크기를 바꿀 수 없는 정적 자료형 - 데이터에 접근하기 위한 인덱스가 존재하여 검색 속도가 빠르다. - 하지만, 데이터의 위치가 인덱스와 맵핑되어 고정되기 때문에 데이터가 삭제되는 경우 - 배열의 빈 부분의 메모리가 낭비된다. - 그렇기에 배열의 해당 인덱스에 데이터가 존재하는지 파악하는 로직이 추가적으로 필요하다. - 검색에는 효율적이지만, 추가 및 삭제에 대해서는 비효율적이다. 2. 리스트 1) ArrayList - 내부적으로 데이터를 배열에서 관리하며 추가, 삭제 시 임시 배열을 생성하여 데이터를 복사한다. - 대량의 자료를 추가, 삭제할 시 메모리 소모가 크고, 시간이 오래 걸려 성능저하가 발생 - (삭제 시 제거되는 인덱스를 기준으로 뒤에 있는 객체가 한칸씩 이동한다.) - 초기 ..
Synchronized 스레드 간 동기화를 시켜 data의 thread-safe를 가능케함 여러 개의 스레드가 한 개의 자원을 사용하고자 할 때 현재 데이터를 사용하고 있는 해당 스레드를 제외하고 나머지 스레드들은 데이터에 접근할 수 없도록 막는 개념
Serialization 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 byte형태로 데이터를 변환하는 기술. 시스템적으로 얘기하면 JVM의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 byte 형태로 변환하는 기술. ex) String을 JSON 형태로 발굴 할 때 Member member = new Member("송규빈",thd0427@naver.com) String json = String.format(~~~~member.getName()~~) => { name: "송규빈", Email: "thd0427@naver.com" }
SOLID 원칙 ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ 1) SRP: 단일 책임 원칙 객체는 단 하나의 책임만 가져야 한다는 원칙이다. 즉, 데이터를 읽는 부분과 렌더링(읽어온 데이터를 뿌려주는) 되는 부분은 다른 클래스여야한다. SRP에 따른 설계를 하면 응집도는 높게, 결합도는 낮게 설계할 수 있게 된다. - 응집도: 해당 기능을 수행하기 위해 얼마만큼의 기능과 아이디어가 뭉쳐있는지를 나타내는 정도 - 결합도: 프로그램 구성 요소들 사이가 얼마나 의존적인지를 말한다. - 응집도가 낮은 클래스의 문제: 이해하기가 힘들고, 재사용이 힘들다. 또한 유지보수가 매우 쉽지 않으며 클래스 변화에 민감하다. - 결합도가 높은 클래스의 문제: 클래스의 규모가 커지기 때문에 이해하기 쉽지 않으며, 변..
오버라이딩과 오버로딩 ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ 오버라이딩과 오버로딩은 자바의 다형성을 구현하는 대표적인 방법이다. 오버라이딩은 하위 클래스의 성격에 맞게 부모 클래스의 함수를 재정의하는 것을 말한다. 이때 부모 클래스와의 시그니쳐가 완전히 같지만 내부 구현이 달라지는 형태이다. 오버로딩은 함수 이름만 같고 나머지 시그니쳐가 다른 것을 말한다. 파라미터 자료형이나, 개수 등을 다르게 정의함으로써 확장된 함수를 새로 정의하고 구현하는 것을 말한다.