전체 글 68

[운영체제] 캐시 (Cache)

[운영체제] 캐시 (Cache) 메모리 용량이 작을수록 파일을 저장하고 꺼내오는 속도는 더 빠릅니다. 그렇기 때문에 용량이 큰 저장장치는 속도가 느릴수밖에 없습니다. 하지만 메모리 용량이 크고, 속도가 빠른 두 가지 장점을 잡기에는 비용이 너무 많이 듭니다. 그래서 데이터 저장 공간은 속도와 용량 등 특성에 맞게 역할을 나눠서 사용하는데, 이를 메모리 계층 구조라고 합니다. 위 그림처럼 데이터 처리속도를 높이기 위해 자주 사용되는 데이터를 담아두고, 해당 데이터가 필요할 때 캐시에 접근합니다. 데이터 지역성 원리 (Principle of Locality) 파레토의 법칙은 원인 중 상위 20% 가 전체 결과의 80% 를 만든다는 법칙입니다. 이 법칙은 메모리에도 적용되는데요, 자주 쓰이는 데이터는 시간적 ..

[Linux] Linux & Unix

[Linux] Linux & Unix 운영체제는 컴퓨터 사용자와 하드웨어 간의 인터페이스로 다른 응용 프로그램들이 유용한 작업을 할 수 있는 환경을 제공합니다. 주로 PC 환경에서 많이 이용되는 운영체제는 Windows, macOS, 리눅스 등이 있고, 서버 환경에서 많이 이용되는 운영체제는 리눅스, 유닉스 등이 있습니다. 오늘은 그 중에서 리눅스에 대해 알아보도록 하겠습니다. Unix 리눅스는 유닉스를 기반으로 작성되었기 때문에 리눅스를 알기 전, 먼저 유닉스에 대해 간단하게 짚고 넘어가 보겠습니다. 유닉스는 범용 다중 사용자 방식의 시분할 운영체제로, 현대의 다양한 운영체제들 중 유닉스 기반인 제품들이 있습니다. 대표적으로 macOS 가 유닉스 기반으로 개발되었고, 아이폰에서 사용되는 iOS 또한 유..

[Swift] Swift 언어가 가진 특징

[Swift] Swift 언어가 가진 특징 Swift 는 애플이 WWDC14 에서 공개한 언어로 iOS, iPadOS, watchOS, macOS 등 애플 제품 개발에 활용되는 개발 언어입니다. 오늘은 Swift 언어가 가진 특징들에 대해서 간략하게 알아보겠습니다. 특징 & 다른 언어와의 차이점 안정성 변수는 사용 전 항상 초기화되어야 함 배열 및 정수에 대한 overflow 검사가 수행됨 ARC 를 지원해 메모리 관리가 간편함 강력한 타입 통제 타입 추론 양방향으로 가능 Collections 처럼 일반적으로 사용되는 Value 타입 최대한 활용 해당 타입을 복사할 경우 다른 곳에서는 수정 불가 Optional 변수 혹은 상수의 값이 nil 일수도 있음을 의미 Optional 값을 언래핑하는 여러 구문을..

iOS 개발/Swift 2022.08.17

[TIL] Swift 에서 Array 를 탐색하는 방법들의 차이 (for in)

[TIL] Swift 에서 Array 를 탐색하는 방법들의 차이 (for in) 프로그래머스에서 코딩테스트 문제를 풀다가 신기한 점을 발견했습니다. Array 를 탐색하는데 인덱스로 탐색하는 것과 for in 을 이용하여 Array 의 원소에 직접 접근하는 것이 꽤나 많은 시간차이를 보인다는 것이었습니다. https://school.programmers.co.kr/learn/courses/30/lessons/64062 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 제가 풀던 문제는 이 문제였는데, 효율성 테스트 부분을 통과하지 못하고 있었습니다. 그런데 ..

iOS 개발/Swift 2022.07.17

[네트워크] 쿠키와 세션

[네트워크] 쿠키와 세션 현재 웹이나 모바일 환경에서 서버와 통신을 할 때 가장 많이 쓰이는 방식은 HTTP 입니다. HTTP 프로토콜은 Connectionless, Stateless 한 특성을 가지기 때문에 서버는 클라이언트가 누구인지 매번 확인해야합니다. 이러한 단점을 보완하기 위해 사용하는 것이 쿠키와 세션입니다. 먼저 간단하게 Connectionless 와 Stateless 가 무슨 뜻인지 살펴보겠습니다. Connectionless 비연결지향형 클라이언트의 요청 이후 서버가 그 요청에 알맞은 응답을 보낸 다음에 연결을 끊는 처리 방식 Stateless 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식 연결을 끊는 순간 클라이언트와 서버 통신이 끝나며 상태정보는 유지하지 않음 HTTP 는 위와 ..

[iOS] 메모리 구조

[iOS] 메모리 구조 프로그램이 실행되면 OS 는 메모리에 프로그램을 위한 공간을 할당해줍니다. 메모리는 크게 4가지 영역으로 나뉘어져 있는데, 이는 각각 코드 영역, 데이터 영역, 힙 영역, 스택 영역이라고 불립니다. 코드 영역 소스코드가 기계어 형태로 저장됨 컴퓨터가 읽을 수 있는 가장 밑단의 언어로 binary 하게 이루어짐 (0, 1) 컴파일 타임에 결정되고, 중간에 코드가 변경되지 않도록 Read-Only 형태로 저장됨 코드 영역은 말 그대로 프로그램의 소스코드를 기계어 형태로 저장하는 영역입니다. 프로그램이 실행되며 소스코드가 변경되면 안되기 때문에 Read-Only 형태로 저장됩니다. 데이터 영역 전역변수, static 변수가 저장됨 프로그램 시작과 동시에 할당되며 프로그램이 종료되어야 메..

iOS 개발/iOS 2022.07.12

[백준] 14888.연산자 끼워넣기 (Swift)

[백준] 14888.연산자 끼워넣기 (Swift) https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 풀이 백트래킹으로 해결할 수 있는 문제입니다. 각 연산자의 개수가 들어있는 배열을 입력받고 나서 백트래킹을 이용해 모든 경우의 수를 탐색합니다. 연산자를 이용해 계산한 값과 현재 몇 번째 연산을 진행하는지에 대한 정수를 메소드 인자로 하여 재귀함수를 작성합니다. 연산자 배열을 탐색하며 값이 존..

[iOS] Delegate Pattern

[iOS] Delegate Pattern Delegate 는 위임하다, 대리자 등의 뜻을 가진 단어입니다. 말 그대로 Delegate Pattern 은 대리자를 가지고 있는 객체가 대리자 객체에게 자신의 일을 위임하는 형태의 디자인 패턴입니다. 이는 하나의 객체가 모든 일을 처리하는 것이 아니라 다른 객체가 이를 일부분만 확장하여 처리하도록 위임하는 방식입니다. 말만 들어서는 잘 이해가 되지 않을수도 있으니 예시를 들어 설명해보겠습니다. 예시 영화를 만드는 Producer 라는 객체가 있다고 가정하겠습니다. 영화를 만들려면 누군가가 연기를 해야하는데, 대부분 감독들이 직접 연기를 하는 경우는 없죠. 그러니 다른 누군가에게 자신이 생각한 연기를 하도록 시킵니다. 이렇게 대신 연기를 하는 객체를 Actor ..

iOS 개발/iOS 2022.07.06

[네트워크] JSON & XML

[네트워크] JSON & XML 네트워크 통신을 구현하다 보면 JSON 이나 XML 이란 단어를 들어보신 적이 있을겁니다. 둘은 모두 데이터를 저장하고 교환하기 위한 표준이며, 오늘은 이 둘에 대해 알아보도록 하겠습니다. JSON 이란? JSON 은 Javascript Object Notation 의 약자로 데이터를 쉽게 저장하고 전달하기 위해 만들어진 텍스트 기반의 데이터 교환 표준입니다. XML 의 대안으로써 조금 더 데이터를 쉽게 교환하고 저장하기 위해 고안되었습니다. JSON 은 Javascript 를 확장하여 만들어졌기 때문에 Javascript 객체 표기법을 따르며, key-value 쌍을 가지고 있습니다. JSON 은 다음 예시와 같이 사용됩니다. { "language": [ { "name"..

[Swift] Optional

[Swift] Optional Optional 은 해당 변수가 어떤 타입의 값을 가지고 있을 수도 있고, 혹은 nil 을 가지고 있을 수도 있다는 의미입니다. Optional 의 구현부를 살펴보면 위와 같이 none 과 some(Wrapped) 라는 case 를 가진 열거형으로 구현되어 있습니다. none 일 경우 nil 을 가지게 될 것이고, some(Wrapped) 는 Wrapping 된 어떠한 값을 가지고 있게 될 것입니다. HTML 삽입 미리보기할 수 없는 소스 Optional 은 위처럼 두가지 방법으로 선언할 수 있지만, 대부분의 경우 타입 뒤에 ? 를 붙이는 방식을 선호하는 것 같습니다. Optional 은 초기값을 할당해주지 않으면 nil 로 초기화됩니다. Optional 을 상수로 선언할 ..

iOS 개발/Swift 2022.07.04