분류 전체보기

    [Swift] 오버플로우, 오버플로우연산자

    오버플로우의 개념 overflow의 사전적 의미는 넘쳐 흐르다. 범람하다 등의 뜻이다. Swift언어의 오버플로우는 대략 다음과 같다. 각 정수형은 담을 수 있는 수의 크기가 있다. 자료형 범위 부호여부 크기 Int8 -128 ~ 127 부호 있음 8 비트 Int16 -32768 ~ 32767 부호 있음 16 비트 Int32 -2147483648 ~ 2147483647 부호 있음 32 비트 Int64 -9223372036854775808 ~ 9223372036854775807 부호 있음 64 비트 UInt8 0 ~ 255 부호 없음 8 비트 UInt16 0 ~ 65535 부호 없음 16 비트 UInt32 0 ~ 4264967295 부호 없음 32 비트 UInt64 0 ~ 184467440737095516..

    [Swift] String의 Subsequence(Substring)란

    SubString(Subsequence) String인스턴스의 일부의 새 메모리에 복사하지 않고 원본 문자열 문자의 일부분을 참조한다. 메모리 사용량을 줄이고 성능을 향상시키는데 도움된다. 원본의 수정이 일어나기 전까지 메모리 공유, 원본이 수정되면 SubString은 새로운 메모리 공간을 갖게된다. 오랜기간 저장하기 위해서는, 새롭게 문자열로 저장할 필요 String인스턴스에서 prefix, suffix등을 사용하여 SubString을 만들 수 있다. var greeting = "Hello, world!" let index: String.Index = greeting.firstIndex(of: ",") ?? greeting.endIndex // ,(콤마)의 인덱스 let beginning: String..

    [Swift] 날짜와 시간데이터를 사용하기

    UTC(Coordinated Universal Time): 국제 표준시간 / 국제 사회가 사용하는 과학적 시간의 표준 GMT와 같다 영국의 그리니치 천문대의 시간을 기준으로 하는 시간 한국의 시간(KST)은 UTC + 9와 같다. 날짜와 시간 데이터를 가지고 놀기 위해선 아래와 같은 요소를 알아야한다. Date,TimeInterval, Calendar, DateComponents Date구조체는 초를 기준으로하는 절대적 시점을 의미한다 이를 잘 활용하기 위해선 Calendar이나 DateFormatter를 잘 활용해야한다. 💥1. Date구조체 ReferenceDate: 기준시간 2001.01.01: 00:00:00 UTC를 기준으로 한다. var now = Date() //현재 var yesterday..

    [Swift] 접근 제어(Access Control)

    ❓접근 제어가 왜 필요할까? 코드의 세부 구현 내용을 숨기는 것이 가능해짐(객체지향 - 은닉화⭐️) 속성, 메서드를 숨길 수 있음. 코드의 영역을 분리시켜서, 효율적 관리 가능 컴파일 시간이 줄어듬(컴파일러가 변수의 사용범위를 인지가능)⭐️ 애플이 자신들이 원하는 코드를 감출 수 있음 ❓접근 제어를 가질 수 있는 요소 스위프트 공식문서 ==> 엔티티/ 독립된 개체 타입(클래스/구조체/열거형/스위프트 기본타입 등) 변수/속성 함수/메서드(서브스크립트, 생성자 포함) 프로토콜도 특정 영역으로 제한될 수 있음 ❓접근 수준(Access Levels) 1) open - 다른 모듈에서도 접근가능 / 상속 및 재정의도 가능 (제한 낮음) 2) public - 다른 모듈에서도 접근가능(상속/재정의불가) 3) inter..

    [Swift] 옵셔널(Optional) ?

    Swift가 가지고 있는 가장 큰 특징 중 하나가 옵셔널(Optional)이다. 값이 없는데 접근을 하면 어떻게 될까 만약 값이 없는데 값에 접근한다면 에러가 발생한다. 옵셔널은 직역하면 "선택적인"이라는 뜻이 되는데, 값이 있을 수도, 없을 수도 있다는 의미이다. 만약 문자열이 있다고 하면 "가나다"가 될것이다 만약 값이 없다고 하면 ""도 아닌 그저 값이 없다는 것이다. 이런 값 없음을 나타내는 게 바로 nil이다. nil: 값이 없음을 표현하는 키워드 값 없음을 표현하는 nil을 아무 변수에 사용할 수 있는것은 아니다. 옵셔널 변수에 사용해야 한다. 옵셔널 변수를 선언할 때에는 타입 어노테이션에 ? 를 붙여야 한다. 옵셔널로 선언된 변수와 옵셔널이 아닌 변수는 다르다. 옵셔널이 아닌 변수를 옵셔널 ..

    [Swift] Result Type

    💥 Result 타입 Swift5.0에서 추가된 Result Type는 새롭게 추가된 에러처리 방법이다. Result를 이해하기 위해선 열거형(Enum), 연관값(Associated Value), 제네릭(Generic)을 이해하고 있어야 한다. 에러가 발생하는 경우, 에러를 따로 외부로 던지는 것이 아니라 리턴타입 자체를 Result Type으로 구현해서 함수 실행의 성공과 실패 정보를 함께 담아서 리턴한다. 타입 하나에 정상적인 경우, 에러를 담을 수 있게 구현됨. 기존의 에러처리인 경우 불편한 점이 있다. 에러가 발생하는 경우와 정상적인 경우를 따로 처리해야하고, do catch블럭으로 감싸서 처리해야한다. ❓ Result타입의 구현 Result 타입은 열거형으로 구현되어있다. enum Result ..

    iOS. 동시성 프로그래밍 DeadLock, Race condition 해결방법

    💥동시성 프로그래밍의 문제점 데드락(Dead Lock)과 경쟁조건(Race Condition)에 관한 이야기이다. 한 개의 자원에 여러개의 쓰레드가 접근하려고 한다 ==> RaceCondition Racecondition이 발생해 여러가지 쓰레드에서 공유자원에 동시접근을 막기위해 걸어잠굴 수 있다. 각 쓰레드는 공유자원에 여러개의 동시접근을 막기위해 사용중인 동안 다른 쓰레드의 공유자원 접근을 막을 수 있다. 데드락은 아래에서 다루고 있다. https://clamp-coding.tistory.com/72 운영체제(OS) - 식사하는 철학자 문제(Dining Philosophers Problem) 식사하는 철학자 문제 철학자 다섯이서 원형 식탁에 둘러앉아 생각에 빠지다가, 배고플 땐 밥을 먹는다. 그들의 ..

    iOS. 디스패치큐(GCD) 사용시 주의해야할 사항

    ⭐️앨런님 강의를 듣고 정리한 글입니다⭐️ 💥디스패치큐(GCD) 사용시 주의해야할 사항 ❓반드시 메인큐에서 처리해야하는 작업 UI관련 처리는 반드시 메인큐에서 처리해야한다 DispatchQueue.global().async{ //코드 1 //코드 2 DispatchQueue.main.async{ //다운로드 한 이미지 표시 코드 self.imageView.image = image // UI 관련 작업들은 메인큐에서 진행 } } //URLSession은 내부적으로 비동기 처리가 되어있음 URLSession.shared.dataTask(with: url){ //코드 1 //코드 2 DispatchQueue.main.async{ //다운로드 한 이미지 표시 코드 self.imageView.image = ima..

    iOS. GCD의 개념과 Dispatch큐(Queue)종류? Qos

    ❓메인 큐 - DispatchQueue.main 메인큐 = 메인쓰레드 직렬로 작동한다. 기본적으로 실행하는 코드는 직렬 + 동기적으로 실행된다. 일반적으로 사용하는 print("123456") 이란 코드는 아래와 같은 의미가 숨겨져 있다. DispatchQueue.main.sync{ print("123456" } ❓글로벌 큐 - DispatchQueue.global() DispatchQueue.global().async{ } 글로벌큐 중 디폴트 기본적으로 동시(Concurrent)큐 여러개의 쓰레드를 사용한다. QoS에 따라서 여러개로 나뉜다. ex) DispatchQueue.global(qos: .utility) ❓QoS (Quality of Service) 서비스의 품질에 따라서 나뉜다. 서비스의 품..

    iOS. Delegate Pattern

    Delegate: 대리자. 위임자. 위임하다 Delegate패턴은 위임자를 갖고있는 객체가 다른 객체에게 자신의 일을 위임하는 형태의 디자인 패턴이다. Delegate Pattern 델리게이트 패턴은 보통 "객체가 자신의 책임을 다른 객체에게 위임(delegate)하는 디자인 패턴"이라고 설명된다. 예를 들어 테이블뷰는 셀을 탭했을 때 어떤 행동을 할지에 대한 책임을 뷰컨트롤러에게 UITableViewDelegate를 사용해 위임한다. 테이블뷰 이외에도 콜력션뷰, 텍스트필드 등 많은 UI요소들이 델리게이트패턴을 사용해 다른 객체에게 책임을 위임한다. 예제 1. 델리게이트란? struct Cookie{ var size: Int = 5 var hasChocolateChips: Bool = false } cl..