본문 바로가기

분류 전체보기96

Struct와 Class, Closure Java를 사용할 때는 Class로 객체를 만들어 사용했었는데, Swift를 사용하면서 알게 된 점은 Swift에서는 Struct와 Class가 모두 있다는 것이었습니다. 그러다 보니 어떤 차이점이 있을지 궁금해서 알아보게 되었습니다. Struct와 Class 공통점 프로퍼티와 메서드를 구조화해서 묶어둔 형식 하나의 사용자 지정 타입을 만드는 것 이니셜라이저 init을 정의해서 초기상태 지정 가능 새로운 기능 추가를 위한 Extension 사용 가능 Protocol 사용 가능 Struct와 Class 차이점 먼저, Struct는 value 타입으로 할당이나 파라미터 전달 시에 value copy가 일어납니다. 항상 새로운 변수로 copy가 일어나는 점 때문에 멀티스레드 환경에서 공유 변수로 인해 문제를 .. 2020. 12. 24.
ARC (Automatic Reference Counting) iOS 개발을 공부하면서 꼭 알아야할 것 중 하나인 ARC (Automatic Reference Counting). 도대체 ARC가 뭘까요? 먼저, 앱의 성능을 유지하기 위해서는 메모리 관리가 필수적입니다. Stack 메모리에 저장된 데이터는 자동으로 제거되기 때문에 특별한 관리가 필요 없지만, Heap 메모리는 개발자가 동적으로 할당하는 메모리 공간이기 때문에 Heap 메모리에 저장된 데이터는 필요하지 않은 시점에 직접 제거해야만 합니다. 따라서 메모리 관리 모델은 Heap에 저장된 데이터를 관리합니다. [ 참고 ] Value Type은 Stack 메모리에, Reference Type은 Heap 메모리에 저장됩니다. Value Type: Structure, Enumeration, Tuple.. Refe.. 2020. 12. 22.
DeadLock (교착 상태) 교착상태란? 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하여 무한정 기다리게 되는 현상을 데드락(DeadLock). 즉, 교착 상태 라고 합니다. 여러 개의 작업이 동시에 실행되는 멀티 프로세스, 멀티 스레드 프로그래밍 환경에서 발생할 수 있는 이슈입니다. 교착 상태에 대해 알아볼 때면 자주 등장하는 예시가 있는데요. 바로, 식사하는 철학자들 입니다. '식사하는 철학자들'은 운영체제의 교착 상태를 설명하기 위해 다익스크라가 만든 문제라고 합니다. 그 내용은 바로 이렇습니다. 5의 철학자들이 원형 식탁에 둘러앉아 식사를 하는데, 철학자들 사이에는 포크가 하나씩 놓여 있다. 철학자들이 식사를 하기위해서 지켜야 하는 규칙이 있는데, 바로 아래와 같다. 1. 왼.. 2020. 12. 21.
강한 순환 참조 / 강한 참조 사이클 (Strong Reference Cycle) STRONG REFERENCE CYCLE Strong Reference Cycle (강한 순환 참조)란 무엇을 말할까요? 저는 iOS 개발을 공부하면서 iOS와 관련된 게시글이나 정보를 찾다보면 메모리 관리에 관한 이야기가 정말 많다고 생각이 들었습니다. 그리고 이 게시물에서 다뤄볼 강한 순환 참조도 메모리와 관련되어 있습니다. 그래서 오늘은 강한 순환 참조에 대해서 아래 예시와 함께 살펴보겠습니다. 먼저, 아래 코드와 같이 Person과 Car이라는 클래스가 있다고 가정합시다. 그리고 Person class는 Car 속성을, Car class는 Person 속성을 가지고 있습니다. class Person { var name = "Jamie" var car: Car? } class Car { var mo.. 2020. 12. 20.
메모리 구조를 알아보자. 메모리 구조 운영체제는 프로그램의 정보를 읽어 메인 메모리에 공간을 할당해 로드한다. 이 메모리의 구조를 알아봅시다 ^_^.. velog.io 데이터나 프로그램을 저장하는 저장 공간은 계층 구조를 가집니다. CPU에 접근속도가 빠른 순으로 Register, Cache, Main Memory, External Memory로 볼 수 있는데, 이 게시물에서는 메인 메모리의 공간 구조를 다룰 것입니다. 제가 메모리 구조에 대해 궁금해지게 된 것은 프로세스와 스레드의 차이점을 공부한 이후였습니다. 프로세스는 각 메모리 영역을 독립적으로 할당받고, 스레드는 Stack 영역만 독립적으로 할당받고 나머지 Heap, Data, Code 영역은 같은 프로세스 내의 다른 스레드와 공유한다는데 도대체 이 4가지 영역의 특징이.. 2020. 12. 10.
if kakao 2020 - 에디터 프로젝트와 Text Span 이 게시물에서는 if kakao 2020 1일차에 열린 Android 관련 세션 영상 중 에디터 프로젝트와 Text Span 이라는 세션을 정리해보려 합니다. 어디까지나 제가 세션영상을 보며 주관적으로 정리한 내용이기 때문에 부족한 점이 있을 수 있습니다. 이번 세션은 if kakao 2020에서 Young님의 에디터 프로젝트를 진행하면서 적용된 Span 기능이라는 세션 입니다. 평소 코드 상에서는 다뤄보지 않았던 효과 속성이어서 흥미로웠고 보면서 잘 모르는 내용도 있긴 했지만, 에디터 기능에서 많이 사용되는 span 기능에 대해 엿볼 수 있었던 시간이었습니다. 에디터 프로젝트와 Text Span ✏️ Android Text Span 👉 보통 TextView 속성으로 꾸미게 되면 View 전체에 적용이 .. 2020. 11. 19.
if kakao 2020 - Shared Elements Transition 이 게시물에서는 if kakao 2020 1일차에 열린 Android 관련 세션 영상 중 Shared Elements Transition 이라는 세션을 정리해보려 합니다. 어디까지나 제가 세션영상을 보며 주관적으로 정리한 내용이기 때문에 부족한 점이 있을 수 있습니다. 이번 세션은 if kakao 2020에서 Huey님이 카카오 스토리에 적용한 화면 전환 애니메이션에 대해 설명합니다. 그리고 개발 중에 있었던 이슈 몇 가지를 설명합니다. 저는 평소 부족한 점부터 채워나가려다보니 공부해야 할 기능들이 많아 애니메이션 기능은 저에게 우선순위가 많이 밀려나 있는 상태였습니다. 하지만, 이번 기회로 애니메이션은 단순히 앱의 추가기능이 아니라, 사용자의 편의를 위해 앱의 완성도를 높이는 작업이 된다는 것을 알 수.. 2020. 11. 18.
버퍼, 캐시, 레지스터 (Buffer, Cache, and Register) 캐시와 버퍼, 그리고 레지스터는 데이터를 임시적으로 저장한다는 공통점이 있습니다. 그렇다면 어떤 경우에 어떤 것을 사용하게 될까요? 그리고 각자 어떤 특징이 있을까요?? 캐시(Cache) 먼저 캐시는 속도가 빠른 장치(CPU)와 느린 장치(메인 메모리) 사이에서 속도 차이에 따른 병목현상을 줄이기 위한 범용 메모리를 뜻합니다. 즉, 어떤 시스템 내에서 데이터의 집중적인 사용으로 인해 전체 시스템에 절대적인 영향을 미치는 부분의 사용 빈도가 늘어나 그 부분의 성능이 저하되어 전체 시스템이 마비되는 현상을 줄이기 위한 것입니다. 캐시는 자주 사용하는 데이터나 값을 복사해 놓는 임시 저장소라고 생각할 수 있는데, 이때 캐시의 접근 시간에 비해 원래 데이터(서버의 균일한 api 데이터 등)를 접근하는 시간이 오.. 2020. 10. 3.
커널 (Kernel) 우리가 항상 운영체제를 공부하다 보면 자주 볼 수 있는 단어가 있다. 바로, '커널(Kernel)' 이다. 뭐만 하면 커널에 의해서 관리된다. 커널에 의해 보호된다. 어쩌구 저쩌구..... 도대체 커널이 뭐길래, 이렇게 자주 언급될까??? 커널이란, 프로세스/메모리/저장장치/입출력 시스템 등을 관리하는 운영체제의 핵심적인 기능을 모아놓은 프로그램이다. 그만큼 운영체제의 핵심이라고 할 수 있으며, 운영체제의 성능은 커널이 좌우하게 된다. 컴퓨터가 부팅하는 순간 커널 코드가 메모리에 올라가고, 다른 프로그램과 다르게 항상 메모리에 상주(Memory Resident)한다. 여기서 잠깐 운영체제를 말하자면, 운영체제는 크게 커널과 인터페이스로 나눌 수 있는데 인터페이스는 커널에 사용자의 명령을 전달하고 실행 결.. 2020. 9. 3.
[플로이드와샬] 백준 11404번 플로이드 (Java) 백준 11404 : https://www.acmicpc.net/problem/11404 정말 기본 플로이드 와샬 알고리즘 그대로 사용하는 문제이다. 그래서 플로이드 와샬 알고리즘을 공부하면서 풀어보았다. 플로이드 와샬은 다대다 최단거리를 계산할 때 사용한다. 그만큼 속도가 느리지만, 모든 노드 사이의 최단 거리를 알아야 하는 문제에 사용한다. 그럼 어떻게 푸는지 한 번 살펴보자. 기본 세팅 N : 노드 개수 dp[N][N] : 모든 노드 사이의 최단 거리를 저장하는 배열 INF = 최대 거리(나는 N*maxlength로 두었다.) dp 초기화 자기 자신으로 가는 거리는 0 그대로 두고, 나머지는 INF로 설정한다. 예시) 간선 입력 간선을 입력받을 때, 기존 dp값과의 min값으로 저장합니다. 플로이드 .. 2020. 8. 28.
2020 NAVER TECH CONCERT 후기 2020 NAVER TECH CONCERT 앱 개발, 웹 개발 분야의 기술 경험과 개발 문화 등을 공유하기 위한 2020 NAVER TECH CONCERT가 8월 19일, 8월 20일 온라인으로 진행됩니다. Android, iOS, Front-end 를 주제로 개발하며 마주했던 기술적인 고�� techcon.naver.com 앱 개발, 웹 개발 분야의 기술 경험과 기술, 개발 문화 등을 공유받을 수 있는 2020 NAVER TECH CONCERT가 8/19 ~ 8/20에 온라인으로 진행되었습니다. 그 중에서도 저는 19일에 진행 되었던 Android 세션에 대해서 후기를 정리해보려 합니다. 네이버 테크 콘서트의 각 세션에서는 각자 개발자에게 유용하다고 생각되는 기술을 소개해주셨고, 평소 혼자 공부하면서 .. 2020. 8. 21.
2020 삼성SDS 대학생 알고리즘 특강 후기 2020년 7월 중순에 우연히 삼성SDS 대학생 알고리즘 특강 모집 공고를 보게되어 지원했습니다. 몰랐는데 매년 하계 동계 시즌마다 계속 진행해왔던 프로그램인 것 같았고, 이전 후기들을 찾아보니 원래는 지원 할 때 코딩테스트까지 보고 한정된 인원이 선발되어 오프라인으로 진행되던 특강이었습니다. 하지만 이번 알고리즘 특강은 온라인으로 진행되어 그런지 매우 많은 인원이 선정되었습니다. 2주동안 특강을 듣고 나면 프로 시험을 본다고 했는데 후기를 보니 난이도는 삼성SW B형과 비슷하다고 했고, 4시간 동안 1문제를 푸는 시험이라고 한다. 그리고 이 프로 시험은 원래 임직원 대상 시험이라 일반인은 응시하지 못하는 시험이지만, 이 특강 수료 조건에 프로 시험 응시하는 게 있어서 꼭 시험에 응시해야 수료를 할 수 .. 2020. 8. 20.