본문 바로가기

분류 전체보기

(93)
SOILD 원칙 1. 단일 책임 원칙 (SRP)각 클래스는 하나의 책임만 갖고 있어야 한다.책임 별로 클래스를 분리함으로써 각 책임에 변경사항이 발생될 때만 해당 클래스만 변경하면 된다. 적용 전class 회사{ fun 영업(){...} fun 개발(){...} fun 인사(){...}} 적용 후class 영업{ fun 업무(){...}}class 개발{ fun 업무(){...}}class 인사{ fun 업무(){...}} 안드로이드에서의 SRP1. ViewModel은 UI 데이터 상태를 관리하는 역할로만 사용한다. 2. 개방 폐쇄 원칙 (OCP)확장에는 열려있고, 변경에는 닫혀 있어야 한다.하나의 기능을 갖고 있지만 여러가지 경우에 따라 작업이 달라지는 경우라면 메서드가 복잡해지거나, ..
SingleTon Singleton Pattern오직 하나의 인스턴스만 제공하는 클래스 Why?하나의 클래스를 여러 곳에서 사용하다보면 불필요하게 여러 개의 동일한 클래스가 생성되어 메모리 낭비가 일어날 수 있다.또는 setting과 같이 인스턴스가 하나여야만 하는 클래스가 있을 수 있다. 따라서 어디서 사용되어도 동일한 기능을 제공하는 클래스라면 불필요하게 여러 개의 인스턴스를 생성할 필요 없이 하나의 인스턴스만 제공하면 효율적으로 메모리를 사용할 수 있게 된다.class Test{ companion object { private var instance: Test? = null fun getInstance(): Test{ return instance ?: Single..
이미지 캐싱 이미지를 로딩할 때마다 서버에서 불러온다면 네트워크 요청이 자주 발생하게 되고, 이로 인하여 앱의 성능이 저하될 수 있다.이를 개선하기 위해 Cache를 사용하는데, 한 번 불러온 이미지를 Cache에 저장하여 여러번 사용되는 이미지에 대해 네트워크 요청을 줄이고, 빠르게 불러와 데이터 로딩 속도를 줄여 앱의 성능을 향상 시킬 수 있다. 이미지를 사용할 때 주로 사용하는 라이브러리인 Glide와 Coin 등에서는 이러한 기능들을 제공해주기 때문에 따로 설정할 필요는 없지만 어떻게 캐싱을 하는지는 알고 있어야 한다. 캐싱의 종류1. 메모리 캐싱메모리 캐싱은 말 그대로 메모리에 캐싱을 저장하여 보다 빠르게 접근할 수 있지만 휘발성이며, 메모리라는 제한으로 인해 많은 데이터를 저장할 수 없다는 특징을 갖고 있..
WorkManager 앱 종료 상황에서 동작 WorkManager는 로그인 상태에서 동작하고 비회원일 땐 동작하지 않아야 하기에 로그인 성공한 시점에 한 번 등록하게 구현하였다. 다만 테스트를 위해 Application에서 WorkManager를 등록하여 테스트를 하던 도중 발생한 문제이다. 처음 나의 예상은 앱을 실행 > 특정 시간에 작업 수행이었고 앱을 킨 상태에서는 문제 없이 동작하였다.그러나 WorkManager를 쓰는 이유, 앱이 종료 된 상태에서도 돌아가야 한다. 따라서 앱을 실행하여 WorkManager에 등록 후 앱을 종료하고 트리거 시간까지 기다려보았다.당연히 동작하지 않아서 로그를 찍어보았는데 특정 시간이 되면 다시 WorkManager를 등록하여 기존의 작업이 취소되는 문제가 있었다. 분석여기서 유추할 수 있는 부분은 앱이 종료..
Service Locator Service Locator 방식은 수동으로 의존성을 주입해주는 방식이다.위와 같이 각 클래스를 ServiceLocator 클래스에 정의해둔 뒤, 싱글톤인 Application 클래스에 초기화 해주고 Application에서 가져다가 직접 주입해주는 방법으로 이루어진다. class Aclass Bclass Cclass ServiceLocator{ private val a = A() private val b = B() private val c = C() fun getA() = a fun getB() = b fun getC() = c}class MyApplication: Application() { override fun onCreate() { super.onCreate() s..
리눅스 파일시스템 가상 파일 시스템(VFS)가상 파일 시스템(VFS)은 다양한 종류의 파일 시스템을 마치 하나의 파일 시스템처럼 접근할 수 있도록 사용자에게 편의성을 제공하는 시스템이다. 대부분 운영체제는 자신의 특정 파일 시스템만을 지원한다.따라서 그 운영체제에서 지원하는 파일 시스템에서 생성된 파일만을 접근할 수 있다.그러나 리눅스에서는 가상 파일 시스템 개념을 도입하여 기본 파일 시스템(Ext2,3,4)는 물론 다른 운영체제의 파일 시스템(FAT32, NTFS, NFS 등)에서 생성된 파일도 접근할 수 있다. VFS는 새로운 파일 시스템이 마운트 될 때, 그 파일 시스템의 타입을 인식하여 그 파일 시스템에 해당하는 함수를 호출한다.마운트(mount): 저장 장치에 접근할 수 있는 경로를 디렉터리 구조에 편입시키는 작..
스레드 스레드란?스레드는 프로세스의 실행 단위 이다.프로세스가 실행 중인 프로그램이라면, 스레드는 프로그램 내에서 작업을 수행하는 작업자라고 표현할 수 있다.프로세스는 최소 1개 이상의 스레드를 가지며, 스레드는 OS에서 프로세스에게 할당 한 가상 메모리를 공유한다.구성 요소스레드 IDPC(Program Counter)스레드는 CPU에 의해 점유당하다가 스케줄러에 의해 다시 선점 당함때문에 스레드는 어디까지 작업을 수행했는지 알아야 함이를 PC에 저장하며, 스레드는 개별적인 PC를 갖는다.레지스터 집합스택프로세스의 실행 단위가 하나인 경우에는 단일 스레드 라 하며, 여러 개의 경우 다중 스레드라고 한다.멀티 스레딩멀티 스레딩은 하나의 프로세스 내부에서 동시에 여러가지 일을 처리할 수 있도록 한다.스레드들은 프로..
운영체제와 프로세스 운영체제운영체제의 종류에는 대표적으로 Windows, Linux, MaxOS 가 있습니다.그 외에도 많이 있지만 자주 사용되는 OS는 위와 같습니다. OS 역할우선 컴퓨터 시스템은 하드웨어와 소프트웨어로 구성되어 있습니다.소프트웨어는 하드웨어에 의해 실행되는데 하드웨어에는 CPU와 메모리, 다양한 입출력 장치로 구성되어 있습니다. 운영체제가 없어도 하드웨어가 동작하긴 하지만 소프트웨어인 프로그램이 운영체제 환경에서 작성되고, 실행되고 있습니다. 이와 같은 소프트웨어가 운영체제이며, 운영체제의 주 목적은 컴퓨터 시스템의 자원들을 효율적으로 관리하고 사용자에게 서비스를 제공합니다. 운영체제가 관리하는 자원에는 물리적 자원과 추상적인 자원이 있습니다.물리적 자원: CPU, 메모리 등과 같은 하드웨어추상적 자원..
TCP/IP 기본적으로 인터넷 프로토콜 상에서의 데이터 전송은 unreliable하다.따라서 데이터를 안정적으로 보낼 수 있는 방법이 필요했는데, 그것이 바로 TCP(Transmission control protocol)이다.unreliable은 데이터가 유실/손상 될 수 있고, 순서가 보장되지 않는 경우를 말한다. TCP/IP Stack1. Port16bits로 이루어진 이루어진 숫자 (0~65535)데이터를 주고 받기 위해서는 상대방 포트를 식별해야 하는데 인터넷 상에는 수많은 프로세스와 그 프로세스가 갖고 있는 포트들이 있기 때문에 포트만으로는 식별하기가 무척 어렵다.따라서 IP를 통해 Host를 유니크하게 식별하고, Host 내의 포트는 각각 다른 번호를 부여하여 유니크하게 식별하는 방법인 Socket이 등장..
프로토콜과 OSI 7 Layer 네트워크 프로토콜네트워크 통신을 하기 위해 통신에 참여하는 주체들이 따라야 하는 형식, 절차, 규약을 네트워크 프로토콜이라 한다.네트워크 프로토콜은 하나만 있는 것이 아닌 여러 가지가 있는데, 이 프로토콜들을 모듈화하여 나눈 것이 OSI 7 Layer이다.OSI 7 LayerOSI 7 계층은 위와 같이 7가지로 나뉘어 있다.L7. 응용 계층애플리케이션 목적에 맞는 통신 방법 제공ex) HTTP, DNS, SMTP, FTP 등L6. 표현 계층애플리케이션 간의 통신에서 메시지 포맷 관리인코딩 디코딩암호화 복호화압축 압축 해제L5. 세션 계층애플리케이션 간의 통신에서 세션을 관리RPC (Remote Procedure Call)별도의 원격 제어를 위한 코드 없이 다른 주소 공간에서 함수 또는 프로시저를 실..