본문 바로가기

전체 글23

[Swift] Copy-on-Write(CoW) 알아보기 Copy-on-Write Write가 발생했을 때 Copy를 수행한다. Copy on write는 데이터를 복사할 때 먼저 참조를 통해 불필요한 복사를 줄이고, 데이터 변경이 발생하는 경우에만 실제로 복사를 하는 리소스 관리 기법이다. 이는 원래 운영체제에서 프로세스에게 프레임을 할당할 때 메모리 공간 낭비를 막기 위해 사용되던 기능인데 Swift에도 비슷한 목적으로 적용되었다. 예를 들어 1000개의 요소가 있는 배열이 있고 해당 배열을 다른 변수에 복사해야 하는 경우 두 배열이 같더라도 Swift는 1000개 요소를 모두 복사하여 새로운 메모리 공간에 할당해야 한다. 이처럼 엄청난 양의 같은 데이터를 복사하는 것은 비용이 많이 드는 작업이며 낭비이다. 그래서 사용되는 것이 Copy on write이다.. 2022. 10. 2.
[iOS] leading, trailing과 left, right leading, trailing과 left, right의 차이점이 무엇일까? Apple은 공식적으로 left/right constraint 보다 leading/trailing의 사용을 권장하고 있다. left/rignt은 사용자가 보는 화면상의 왼쪽과 오른쪽 위치 속성이다. 반면에 leading/trailing은 reading direction의 시작과 끝을 나타내는 위치 속성이다. Reading Direction? 우리가 주로 사용하는 언어(한국어, 영어)는 왼쪽에서 오른쪽 순으로 읽는다. 이렇게 읽는 방향을 'reading direction'이라고 하는데 사용자가 설정한 언어에 의해 영향을 받는다. 글을 읽는 순서가 다르면 당연히 사용자 경험도 달라지기 때문에 아래처럼 다른 UI를 만나게 된다. 즉,.. 2022. 9. 30.
[Swift] Class와 Struct의 차이 Swift는 클래스와 구조체를 제공한다. 그렇다면 언제 구조체를 사용해야 하고 언제 클래스를 사용해야 할까? 클래스와 구조체의 가장 큰 차이는 '메모리 저장 방식의 차이'이다. 클래스(Class) - 참조 타입 (Reference Type) - 인스턴스 데이터는 힙(Heap)에 저장, 해당 힙을 가리키는 변수는 스택에 저장하고 메모리 주소값이 힙을 가리킨다. - 복사 시 값을 전달하는 것이 아니고, 저장된 주소를 전달한다. - 힙(Heap)의 공간에 저장, ARC 시스템을 통해 메모리를 관리한다. - 상속이 가능하다. 구조체(Struct) - 값 타입 (Value Type) - 인스턴스 데이터를 모두 스택(Stack)에 저장한다. - 복사 시 값을 전달할 때마다 복사본을 생성한다. (다른 메모리 공간 생.. 2022. 9. 29.
[Swift] 옵셔널 패턴(Optional Pattern) 옵셔널 타입(Optional Type)이 실제로 어떻게 구현되어 있는지 내부를 들여다보자. 옵셔널은 Enum(열거형) 타입으로 구현되어 있고, 두 가지 케이스를 가지고 있다. 값이 associated value 로 들어있는 some 케이스와, 값이 없는 none 케이스가 있다. 또한 Generic으로 선언되어 있어 Int, String 등 어떤 타입이든 가질 수 있다. enum Optional { case some(Wrapped) case none // nil } 열거형 케이스 패턴(Enumeration Case Pattern) 옵셔널 자체가 열거형이기 때문에 옵셔널은 아래와 같이 switch 구문을 통해 값이 있고 없음을 확인할 수 있다. let num: Int? = 10 switch num { cas.. 2022. 9. 28.
[OS] 운영체제 03 : Program Execution 저장장치 계층 구조 메모리가 디스크보다 빠르기 때문에 무조건 다 올려놓으면 좋겠지만, 그렇지 못하기 때문에 필요한 부분만 메모리에 올려놓는다. 필요한 부분을 가져올 때, 빈번하게 사용될 부분을 가져오면 속도가 빠른 메모리에서 바로 불러올 수 있어서 전체적인 성능이 향상된다. 이것을 캐싱(Caching) 이라 한다. 프로그램의 실행 System Structure 위에서 Program을 실행 메모리 로드 (Memory Load) 프로그램은 ‘실행파일’ 형태로 하드 디스크의 파일 시스템에 저장되어 있다. 실행파일을 실행시키면 프로그램이 메모리상에 올라가서 ‘프로세스’가 되는데, 이때 메모리에 즉시 올라가는게 아니라 가상 메모리(Virtual Memory) 단계를 거친다. 가상 메모리 단계란, 프로그램을 실행하.. 2022. 5. 23.
[OS] 운영체제 02 : System Structure 시스템 구조 (System Structure) CPU register mode bit interrupt line Memory Timer I/O Device Controller Local Buffer Interrupt / System Call DMA Controller 컴퓨터 시스템의 구조는 컴퓨터 내부 장치인 CPU, 메모리와 컴퓨터 외부 장치(입출력 장치)인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구분된다. 컴퓨터는 외부 장치에서 내부 장치로 데이터를 읽어와 (input) 각종 연산을 수행한 후, 그 결과를 외부 장치로 내보내는(output) 방식으로 업무를 처리한다. CPU CPU는 매순간 Memory 어딘가에 올라와 있는 기계어를 처리한다. 기계어를 하나 읽어오고 실행하는 일을 반.. 2022. 5. 22.
[OS] 운영체제 01 : Introduction to Operating Systems 운영체제(Operating System, OS)란? 일종의 소프트웨어인데 컴퓨터 하드웨어 윗단에 설치되는 소프트웨어이다. 컴퓨터 하드웨어와 각종 소프트웨어, 사용자를 연결해주는 계층이다. 좁은 의미의 운영체제 : 커널을 뜻하며, 운영체제의 핵심 부분으로 메모리에 상주하는 부분 넓은 의미의 운영체제 : 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념 운영체제의 목적 1. 컴퓨터 시스템의 자원을 효율적으로 관리 (자원 관리자) 프로세서, 기억장치, IO 장치 등의 자원을 효율적 관리 사용자 및 운영체제 자신의 보호 프로세스, 파일, 메시지 등을 관리 (소프트웨어 자원도 관리) 2. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공 운영체제는 동시 사용자/ 프로그램들이 각각 독자적 컴퓨터에서 수행.. 2022. 5. 22.
[Android] 앱 삭제 후 재설치해도 데이터가 남아있는 문제 앱을 삭제 후 재설치해도 삭제 전에 저장되어 있던 데이터가 남아있는 경우가 있다. Android 6.0(API 수준 23) 이상을 타겟팅하는 앱은 자동으로 자동 백업을 하게 되는데, AndroidManifest.xml 파일의 application에 android:allowBackup 속성을 따로 설정하지 않으면 자동으로 true로 설정된다. 이로 인해 사용자도 모르게 데이터가 구글 클라우드에 자동으로 백업된다. 자동 백업을 중지하려면? AndroidManifest.xml 파일에서 application 요소에 아래 두 속성을 추가한다. android:allowBackup="true" // 백업을 사용 중지한다. android:fullBackupContent="false" // 백업 규칙을 포함하는 XML .. 2022. 1. 19.
[iOS] Lottie Animation Color 수정(ColorValueProvider) iOS 앱 개발 중 다크모드 적용을 위해 애니메이션의 컬러를 변경해야 했다. Lottie 애니메이션은 런타임에 기본적으로 렌더링되므로 프로그래밍 방식으로 수정하는 것이 가능하다. Value Provider란, 개발자가 런타임에 애니메이션 속성을 쉽게 수정하기 위해 활용할 수 있는 클래스이다. Lottie 애니메이션 내의 모든 요소는 노드로 표시되며, 노드에 액세스하려면 해당 노드의 키 경로(key path)를 알아야 한다. print(AnimationView.logHierarchyKeypaths()) 1. AnimationView.logHierarchyKeypaths()로 경로를 확인한다. 모든 애니메이션의 주요 경로가 나열되어 있으므로 Value Provider를 사용하여 Lottie 애니메이션을 수.. 2021. 11. 30.