전체 글

전체 글

    함수형 프로그래밍 with. Swift

    함수형 프로그래밍 with. Swift

    목차함수형 프로그래밍이란?순수 함수익명 함수고차 함수mapfilterreduce불변성불변성이 중요한 이유참조 투명성클로저와 익명함수와의 관계Swift 클로저함수형 프로그래밍이란?함수형 프로그래밍이란 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.Alonze Church가 고안한 람다 계산법을 기반으로 한다.자세한 내용은 여기에서 확인할 수 있습니다. 함수형과 객체지향의 가장 큰 차이는 함수형은 함수 자체가 일급 객체가 되지만, 객체 지향에서는 클래스가 일급 객체가 됩니다.그럼 여기서 일급 객체가 무엇인지 알아봐야겠죠?💡 일급 객체란?일급 객체(First Class Citizen)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를..

    Swift 정규표현식

    Swift 정규표현식

    목차정규표현식이란?정규식 문법swift에서 정규표현식을 사용하는 방법matching되는 부분 찾기정규표현식이란?정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.이것만 봐선 잘 이해가 안가는데,문자열을 메소드로 파싱해도 되지만, 문자열이 길어지거나 복잡해지고 가변적이라면 파싱하기 매우 까다롭잖아요?문자열에서 특정 패턴에 부합하는 부분만 찾고 싶을 때 사용하는 게 바로 정규식입니다.정규식 문법문법에 대해선 많은 블로그에서 다루고 있으니 자주 사용하는 것들만 정리해보겠습니다.Charcter의미|또는()그룹[]문자셋, 괄호안의 어떤 문자든[^]첫 문자로 ^를 쓰면 괄호 내용의 부정. 즉 괄호 안에 포함되지 않는 한 문자Charcter의미?없거나 있거나 (zero or one)*..

    Static Dispatch & Dynamic Dispatch

    Static Dispatch & Dynamic Dispatch

    Class 상속을 공부하다가 상속은 어떻게 동작할까? 라는 급 의문이 생겨 야크쉐이빙 하게 되었고, 정리로 남겨야겠다라고 생각해 쓰게 되었습니다 허허목차DispatchStatic DispatchDynamic Dispatch타입 별 Dispatch의 차이Reference Type에서의 DispatchValue Type에서의 DispatchProtocol에서의 DispatchDispatch디스패치(Dispatch)라고 하면 GCD가 먼저 떠오르는데요.이름은 같지만 오늘 알아볼 Dispatch는 어떤 메소드를 호출할 것인지를 결정하고 실행하는 메커니즘입니다.Swift에선 Static Dispatch, Dynamic Dispatch 2가지 방식이 있습니다.이러한 Dispatch는 내가 호출할 함수를 컴파일 타임..

    Heap이 Stack에 비해 느릴 수 밖에 없는 이유

    Heap이 Stack에 비해 느릴 수 밖에 없는 이유"스택이 힙보다 빠르다" 라는 표현은 모호한 표현입니다.정확한 표현은 "스택에 할당된 변수에 접근하는 것이 힙에 할당된 변수에 접근하는 것보다 빠르다" 입니다.왜냐하면, 스택과 힙 모두 가상 메모리에 불과하기 때문인데요.하드웨어로 내려가면 똑같이 물리 메모리인 RAM 어딘가에 저장되어 있고, 주소를 통해 논리적으로 구분되어 있기 때문에 둘의 속도가 다를 수 없습니다.그렇다면 접근하는 속도가 왜 차이 날까?현재 사용되는 대부분의 CPU는 FP(Frame Pointer)를 두어 함수의 스택 프레임의 시작주소를 저장하고 있습니다.그리고 컴파일러는 컴파일 과정을 통해 함수의 스택 프레임 내에 변수들의 크기와 순서를 알 수 있기 때문에, 어느 위치(offset)..

    네이버 부스트캠프 웹・모바일 9기 챌린지 과정 1주차 회고

    네이버 부스트캠프 웹・모바일 9기 챌린지 과정 1주차 회고

    ⭐️ 1주차 느낀점길기도 했고 짧기도 했던 1주차가 끝이 났다.챌린지 과정은 CS지식을 기반으로 난이도 높은 미션들을 수행한다는 걸 이미 알고 있었어서, 각오를 하고 임했음에도 정말 쉽지 않았다..미션들을 언급할 수 없지만, 미션을 진행하며 나의 처참한 CS지식을 느낄 수 있었다.그리고 그와 상반되게 CS지식들을 미션에 녹여넣고 피어 세션에서 코드 리뷰를 할 때 술술 이야기하는 걸 보고 감탄만 했던 것 같다.1주차 팀원들을 언급하지 않을 수가 없는데, 정말 좋은 팀원들을 만나 행복한 일주일을 보낸 것 같다.팀마다 피어 세션 분위기가 모두 달랐다고 하는데, 개인적으로 느끼는 우리 팀 분위기는 대학교 개발 동아리같은 느낌이었다.피어 세션이 시작되면 농담도 하고 하하호호 웃으면서 진행했다. 그리고 코드 리뷰를..

    메모리의 구조

    메모리의 구조

    메모리의 구조Stack스택은 함수에 대한 정보를 저장한다.지역 변수, 매개 변수, 리턴 값, 호출 함수 정보 등함수 호출 시 스택에 해당 함수에 해당하는 공간 (Stack Frame)이 생기고, 함수 실행이 끝나면 사라진다.컴파일 단계에서 생성과 해제를 알 수 있는 값 타입이 저장된다.컴파일 타임에 크기가 결정된다.참조 타입 중에서도 크기가 고정되어 있거나, 언제 지워야할 지 컴파일러가 미리 예측 가능한 경우 가급적 stack을 사용해 성능을 향상시킨다.Heap 에 비해 접근 속도가 빠르다.힙 영역과 스택 영역이 다른 방향을 가지는 이유스택은 항상 커널의 반대 방향으로 자라기 때문에 커널을 만나지 않는다.스택이 아무리 커져도 접근 불가 영역인 커널을 건드리지 않는다.힙 영역은 스택과 달리 새로운 데이터가..

    토크나이저, 렉서, 파서 (Tokenizer, Lexer, Parser)

    토크나이저, 렉서, 파서 (Tokenizer, Lexer, Parser)

    목차컴파일러란?컴파일 과정Tokenizer & LexerParser컴파일러란?컴파일러란 고급언어로 작성된 프로그램을 번역해 기계어로된 프로그램을 만들어주는 역할을 한다. 내가 작성한 소스코드는 고급언어이며, 컴파일하여 나온 어셈블리어 파일이나 목적 파일 등이 기계어이다.컴파일 과정컴파일 과정은 빌드 과정 중 한 단계이다.컴파일 과정은 언어나 컴파일러마다 조금씩 차이가 있겠지만, 일반적으로 이런 과정을 거친다.Tokenizer & Lexer컴파일러는 구문 분석 -> 최적화 -> 코드생성 -> 링킹의 과정을 거치는데, 구문 분석 과정에서 Tokenizer, Lexer, Parser 를 차례대로 거친다.Tokenizer란 어떤 구문에서 의미있는 요소들을 의미있는 단위의 토큰으로 쪼개는 역할을 한다.Lexer는..

    M1 맥에 우분투 가상환경 설치하고 swift 설치하기!

    M1 맥에 우분투 가상환경 설치하고 swift 설치하기!

    해당 게시글은 문제 시 삭제될 수 있습니다!우분투 이미지 설치하기우분투는 Desktop 버전과 Server 버전이 있는데, Desktop이 용량이 더 큰 대신 GUI가 포함되어있다는 장점이 있어 Desktop 버전으로 설치했습니다.가상머신 설치하기UTM 삽질기록 arm 맥 설치 자료가 많아 안정성이 보장된다고 생각해 UTM을 설치해주었습니다! 새 가상머신 만들기를 선택하고Virtualize를 선택해줍니다. 리눅스 운영체제를 선택하고 설치한 우분투 이미지를 선택해줍니다. 램은 기본 4기가로 설정하고 용량또한 64기가로 설정합니다. 2시간에 걸쳐 설치한 이미지 파일이 ARM 버전이 아니었군요.. 그만 정신을 잃고 말았습니다.. 혹시나 했지만 역시 안됩니다..그래서 ARM 이미지를 다시 설치하기..

    Git 학습하기

    Git 학습하기

    Git을 처음 사용했을 때부터 복잡한 CLI를 피해 GUI를 사용해왔다.물론 GUI도 Git의 동작방식에 대해 이해해야 사용할 수 있지만, CLI를 사용해보지 않은 것에 대해 조금의 부끄러움이 존재했다. 미루지 말고 CLI를 사용해보자!1.Gist에 remote gist를 생성한다.2.https url을 복사한다.3.클론 명령어를 통해 로컬 저장소를 생성한다.$ git clone 복사한RemoteURL(https://gist.~~) 로컬디렉토리명4.변경사항을 add 명령어를 통해 스테이지에 올린다.// 현재 디렉토리 내 변경사항 모두를 스테이지에 올린다.$ git add .5.commit 명령어를 통해 메시지와 함께 변경사항을 로컬에 커밋한다.$ git commit -m "커밋 메시지"6.push명령어를..

    네이버 부스트캠프 9기 베이직 과정 회고

    네이버 부스트캠프 9기 베이직 과정 회고

    문제 시 삭제될 수 있습니다.부스트 캠프 9기 베이직 과정을 마친 기념으로 회고를 작성해보고자 합니다.구구절절부스트 캠프에 지원한건 올해가 처음이 아닌데요. 작년에 8기를 지원했다가 떨어지고 올해 다시 부스트 캠프를 지원했습니다.대학교를 졸업한 지 1년이 넘은 시점에 취업을 못한 상태이기에 취업에 대한 압박감이 심했습니다. 그래서 비개발 직무도 고려해야 하나 등 생각이 많았습니다.하지만 어렸을 때부터 네이버는 가장 가고싶은 기업이었고, 그런 기업에서 개발자를 양성하는 프로그램이기에 마지막으로 한번만 더 지원해보고 싶었습니다. 그리고 1차 테스트를 통과해 2차 문제 해결력 테스트 대상자가 되었습니다. 2차 문제 해결력 테스트 대상자는 베이직 과정 입과 여부가 선택 사항이었지만, 2차에서 떨어지면 아무것도 ..

    Swift 6.0 접근제어자 Access Control

    Swift 6.0 접근제어자 Access Control

    우선 우리가 잘 알고 있듯이 swift의 접근제어자는 다음과 같이 6개가 있습니다. 5개라고 알고 있는 사람도 많겠지만, Swift 5.9 부터 package 접근제어자가 추가되어 6개가 되었습니다.Swift는 코드 내의 엔티티에 대해 6가지 다른 액세스 수준을 제공합니다. 이러한 액세스 수준은 엔티티가 정의된 소스 파일, 소스 파일이 속한 모듈 및 모듈이 속한 패키지와 관련이 있습니다.접근 제어자open: 가장 높은 수준의 접근 제어자. 다른 모듈에서도 접근, 서브클래싱, 오버라이딩 가능// 모듈: ModuleAopen class Animal { open func bark() { print("으르렁") }}// 모듈: ModuleBclass Cat: Animal { over..

    Swift 메모리 관점에서의 Image

    Swift 메모리 관점에서의 Image

    목차이미지이미지 처리 프로세스문제점이미지 리사이징다운 샘플링ImageI/ONSURL결과이미지가로 2048, 세로 1536 픽셀의 이미지가 있고 이 이미지 파일의 용량은 590KB입니다.하지만 이 이미지가 iOS 앱에서 보여지기 위해 메모리에 올라갈 땐 얼마나 사용될까요?무려 10MB 를 사용하게 됩니다..왜 그런지 알아볼게요이미지 처리 프로세스  이미지는 JPEG으로 압축되어있는 데이터 타입입니다.이 이미지를 렌더링하는 과정은 다음과 같습니다.Load데이터 타입의 이미지를 메모리에 load합니다.Decode메모리의 이미지를 GPU가 읽을 수 있는 형태로 디코딩 합니다.해당 과정에서 JPEG으로 압축된 파일을 압축 해제하며 10MB가 됩니다.Render디코딩된 이미지를 렌더링하여 우리가 볼 수 있게 됩니다..