프로그래밍(27)
-
[CS] 메모리 구조(Memory Structure) 이해하기
메모리 구조에 대해 설명하기에 앞서, '메모리'가 무엇인지 가볍게 짚고 넘어가야 할 것 같다. 사실 나도 정리하기 전까지만 해도 메모리는 램(RAM)이랑 똑같은 말이고 그냥 램이 높으면 높을 수록 컴퓨터가 빨라지고 좋은거다 이정도만 알고 있었다. 메모리(Memory)란? 메모리란 RAM(Random Access Memory)의 또다른 표현으로, 단어 표현 그대로 뭔가 기억과 관련된 행동을 한다. 즉 CPU가 처리할 데이터나 명령어들을 임시로 기억하고 저장될 수 있게하는 작업 공간 역할을 하는 것이다. 정리하면, 사용자가 어떤 프로그램을 사용할때, 해당 정보에 빠르게 접근할 수 있게끔 컴퓨터가 관련 정보들을 임시로 기억해서 저장해두는 공간을 의미한다. 한 마디로 메모리가 크면 클수록 사용자는 여러 프로그램..
2022.03.24 -
[CS] 객체지향 프로그래밍(OOP) 이해하기
객체지향 프로그래밍(Object Oriented Programming)이란? 어떠한 응용 프로그램을 만들때 사용되어지는 설계방법론 중의 하나이다. 프로그램의 각 기능과 요소들을 클래스 단위로 쪼개어 놓고 각 클래스 안에 역할에 맞는 메서드와 프로퍼티를 정의한 뒤, 클래스의 인스턴스(객체)를 생성하여 객체들간의 상호작용을 통해 프로그램을 구현하는 방법을 의미한다. 말이 좀 어려울 수 있는데, 예를 들어 '지역대 전술 훈련'이라는 프로그램을 만든다고 했을 때 '훈련 방식'에 대한 클래스, '지역대'에 대한 클래스, '훈련 장소'에 대한 클래스, '훈련 시간'에 대한 클래스, '우발사항'에 대한 클래스, '작전지속지원'에 대한 클래스 등 각 역할과 기능에 맞게 클래스를 구성해놓고 각 클래스들의 인스턴스(객체)..
2022.03.14 -
[iOS_CS] COW(Copy On Write) 이해하기
오늘은 간단히 이해할 수 있으면서도 프로그래밍을 함에 있어서 알아두면 좋을 개념을 하나 정리하고 가려고 한다! 값 타입과 참조 타입 COW를 설명하기에 앞서, 하나 짚고가야할게 있다. 값 타입(Value Type)과 참조 타입(Reference Type)에 대해서인데, 알다시피 구조체는 값 타입이고 클래스는 참조 타입이다. 따라서, 아래와 같은 예시 상황에서 클래스는 인스턴스 주소를 참조하는 상황이 발생하고 구조체는 인스턴스 값을 복사하는 현상이 발생한다. class SoldierClass { var name = "Ethan" } struct SoldierStruct { var name = "Park" } var aSolider = SoldierClass() var bSoldier = aSolider b..
2022.03.06 -
[iOS_Service Level Project(SLP)] Clean Architecture 적용기 (2) - Dependency, Clean Architecture 적용 이유에 대하여
이 글은 약 5주간 진행했던 Service Level Project(이하 'SLP')를 회고 및 정리하기 위한 글이다. 이번 프로젝트를 진행하면서 새로운 시도를 많이 했는데 그 중 가장 큰 도전이었던 MVVM + Clean Architecture(클린 아키텍처) 적용에 대해서 정리하려고 한다. 목차는 다음과 같다. 2편에서는 4번부터 다루겠다. 1. Clean Architecture(클린 아키텍처)란? 2. MVVM + Clean Architecture의 구성요소 3. 전반적인 Flow 4. Dependency(의존성)와 Dependency Inversion(의존성 역전) 5. SLP에 왜 Clean Architecture를 적용하였는지? 6. Clean Architecture 적용 후기 및 회고 < 1..
2022.02.28 -
[iOS_Swift] Generic(1) - Generic Basic
오늘은 Swift에서 너무나 자주 유용하게 쓰이는 Generic(제네릭)에 대해서 다뤄보려고 한다. 먼저 공식문서부터 살펴보자! 공식문서 시작부터, 제네릭에 대한 극찬으로 가득하다. 요약해보자. 제네릭 코드는 사용자가 아주 flexible하고 reusable한 함수와 타입을 작성하게 해준다. 사용자는 제네릭을 사용함으로써 코드 중복을 피할 수 있고 명확하게 사용자의 의도를 표현할 수 있다. 제네릭은 스위프트의 가장 powerful한 특징 중에 하나이다. 또, Swift standard library의 대부분이 제네릭 코드로 만들어졌다. 사실 사용자는 알게 모르게 제네릭을 사용하고 있는 중이다. 예를 들어, 배열과 딕셔너리 타입들도 모두 제네릭 콜렉션 타입이다. 사용자는 제네릭 코드를 사용함으로써, 어떠한..
2022.02.14 -
[iOS_Swift] inout Parameter에 대하여
오늘은 간단한 개념에 대해서 짚고 넘어가보려 한다. 원래는 제네릭 관련 글을 포스팅하려다가 공식 문서를 살펴보고 있었는데, 공식 문서 예시에서 inout 파라미터를 사용하고 있었다. 처음 보는 개념이어서 해당 개념을 학습하다가 결국 글까지 포스팅하게 됐다. 먼저 inout Parameter 공식 문서부터 살펴보자. 총 세 문단으로 이뤄져 있고 핵심 내용만 요약해서 설명하면, 함수의 파라미터들은 기본적으로 상수이다. 따라서, 함수의 파라미터 값들을 함수 내부 바디에서 바꾸려고 하면 컴파일 에러를 일으킨다. 만약 사용자가 파라미터의 값들을 바꿔주고, 해당 값이 함수가 끝난 뒤에도 유지되기를 원한다면 inout 파라미터를 사용할 수 있다. 사용자는 inout 키워드를 파라미터 타입 좌측에 적어 둠으로써 사용할..
2022.02.10