티스토리

Dominic Blog
검색하기

블로그 홈

Dominic Blog

kiljh.tistory.com/m

Just do it

구독자
9
방명록 방문하기

주요 글 목록

  • Swift) Stride 안녕하세요. 도미닉입니다. 오늘은 Stride에 대해서 알아보겠습니다. stride 의 의미는 보폭입니다. 보폭은 정해진 폭만큼 걸어간다는 뜻인데요. 정한 간격으로 증가하며 반복해서 사용할 수 있습니다. 아래와 같은 형태로 사용이 가능합니다. 1부터 시작해서 2씩 증가하고 15 미만까지 반복합니다. to 로 입력 시 마지막 숫자는 포함하지 않습니다.이런 식으로 변수에 할당할 수도 있습니다. 1부터 시작하여 15를 포함하지 않는 13까지 2씩 증가합니다. 가운데에 to 대신 through 를 사용할 수도 있는데요. 이 경우에는 마지막 숫자까지 포함합니다. 아래 주석을 보면 15까지 반복되는 것을 보실 수 있습니다. 추가적으로 배열의 인덱스를 사용할 때 주의점을 알아보겠습니다. endIndex 를 마지막 요.. 공감수 1 댓글수 0 2025. 5. 10.
  • Swift) 디버깅 함수 안녕하세요. 도미닉입니다. 이번에는 디버깅 함수에 대해서 알아보겠습니다.개요디버깅(검증) 함수는 아래 5가지가 존재합니다.assert()assertionFailure()precondition()preconditionFailure()fatelError()XCTAssert 계열 함수와의 차이점1. XCTest는 테스트 실패를 보고하는 방식이 다릅니다.테스트 코드를 작성할 때 XCTAssert()를 저는 주로 사용했는데요. XCTAssert 계열 함수들은 테스트 실행을 중단하지 않고 실패를 기록합니다. 위에 디버깅 함수는 주로 런타임 오류 확인 또는 개발 중 논리 오류 감지에 사용됩니다. assert()나 fatalError()는 앱을 즉시 종료시킵니다. 2. 테스트는 실패 로그를 쌓는 것이 목적XCTAss.. 공감수 1 댓글수 0 2025. 5. 7.
  • [Swift] 어트리뷰트 키워드(Attribute keyword) 안녕하세요. 도미닉입니다. 오늘은 어트리뷰트 키워드(Attribute keyword)에 대해서 알아보겠습니다. 어트리뷰트 키워드란?@와 이름를 붙여서 컴파일러에게 추가적인 정보를 제공하는 키워드입니다. 어트리뷰트 키워드는 크게 두 종류로 나뉩니다.1. 선언에 추가 정보 제공클래스나 함수의 선언 위에 줄에 @와 이름을 적어서 컴파일러에 정보를 제공합니다.@available 키워드를 통해 MyClass의 선언에 추가적인 정보를 제공합니다. 2. 타입에 추가 정보 제공두번째로는 타입에 추가 정보를 제공할 수 있습니다.@escaping 키워드를 통해 () -> () 타입에 추가적인 정보를 제공합니다. 이러한 키워드를 통해 컴파일러는 해당 선언과 타입에 대한 추가적인 정보를 제공받아서 컴파일합니다. 어트리뷰트 키.. 공감수 0 댓글수 0 2025. 3. 14.
  • [Swift] 아규먼트 레이블(Argument Label) 안녕하세요. 도미닉입니다. 오랜만에 기술 글을 작성하네요. Argument Label (아규먼트 레이블)에 대해서 정리하고자 합니다. Argument Label보통 함수를 작성할 때 아래와 같이 작성하게 됩니다.  간단한 a 와 b 라는 Int 형 파라미터를 전달받아서 Int 형 타입을 리턴하는 sum 함수입니다. 파라미터란?참고로 a, b 는 파라미터라고 설명을 드렸습니다. 정해진 타입과 이름을 지정하여 함수를 실행할 때 값을 전달 받기 위해 함수명 옆에 괄호 안에 지정하는 것이 파라미터입니다. 파라미터는 매개변수, 인자라는 이름으로도 불리웁니다! 인수란?sum(a: 3, b: 4) 라고 호출되는 부분에서 실제로 사용되는 3과 4는 인수라고 불리웁니다. 파라미터와 헷갈릴 수 있는데 구분해서 알고 있으면.. 공감수 1 댓글수 0 2025. 3. 11.
  • SwiftUI 에 NSInternalInconsistencyException 오류 해결 방법 - Attempted to scroll the collection view to an out-of-bounds item (0) when there are only 0 items in section 0. 안녕하세요. 도미닉입니다. SwiftUI 로 첫 프로젝트를 완료해서 페이워치 리뉴얼 앱을 런칭했는데요. 거기서 겪었던 오류를 설명하고 해결책을 공유하고자 합니다. 오류 발견 크래쉬틱스에 아래와 같이 많은 오류가 발생했습니다. 고객센터로 들어온 문의를 보면 일부 유저에게 홈 화면에서 앱이 강제종료되는 문제가 있었습니다. 처음에는 크래쉬틱스에 있는 에러와 홈 화면에서 앱이 강제종료되는 이슈를 별개의 문제로 알았습니다. 크래쉬틱스의 자세한 내용을 살펴봐도 홈 화면과 연관성을 못 찾았기 때문입니다. 아래는 크래쉬틱스에 내용입니다. Fatal Exception: NSInternalInconsistencyException Attempted to scroll the collection view to an out-of.. 공감수 2 댓글수 0 2023. 5. 18.
  • Swift 에서 구조체 모델을 UserDefaults (내부 DB)에 저장하는 방법 안녕하세요. 도미닉입니다. 오늘은 스위프트에서 구조체 모델을 UserDefaults 에 저장하고 불러오는 방법을 공유하고자 합니다. API 통신을 통해 JSON 을 많이 주고 받을 것입니다. 서버로부터 받은 JSON 을 모델 구조체로 변환하여 사용할 수 있습니다. 이 데이터를 현재 화면 말고 다른 화면들에서 혹은 다음 Flow 에서 사용하게 될 경우에 이 데이터를 UserDefaults 에 저장하고 필요한 뷰에서 불러와서 사용할 수 있습니다. 만약 이 구조체 모델을 바로 UserDefaults 에 저장하고자 하면 아래와 같은 오류가 발생합니다. UserDefaults.standard.set(withdrawalFlow, forKey: "WithdrawalFlow") 이런 경우 아래와 같이 데이터 타입으로 .. 공감수 1 댓글수 0 2023. 3. 20.
  • SwiftUI 에서 삼각형을 그리는 방법(역삼각형, 말풍선 포함) 안녕하세요. 도미닉입니다. 오늘은 SwiftUI 에서 삼각형을 그리는 방법을 공유하겠습니다. 아래 코드를 구글링해서 얻을 수 있었습니다. struct Triangle: Shape { func path(in rect: CGRect) -> Path { var path = Path() path.move(to: CGPoint(x: rect.midX, y: rect.minY)) path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY)) path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY)) path.addLine(to: CGPoint(x: rect.midX, y: rect.minY)) return path } } 이 코드를 실행해보았습.. 공감수 2 댓글수 0 2022. 11. 3.
  • 스위프트 이니셜라이저(초기화) 안녕하세요. 도미닉입니다. 오늘은 이니셜라이저에 대해서 알아보겠습니다. “이니셜라이저”란? 이니셜라이저는 한글로 초기화입니다. 초기화하면 어떤 단어가 생각나시나요? 리셋, 재부팅 같은 단어가 생각납니다. 그렇습니다. 초기상태로 셋팅해주는 것을 초기화라고 합니다. 스위프트에서 “이니셜라이저”란? 구조체와 클래스을 활용하고자 한다면 초기화해주어야 합니다. 이니셜라이저는 새로운 인스턴스를 만들어주는 과정이라고 할 수 있습니다. 이니셜라이저라는 작업을 통해 스위프트는 구조체와 클래스에 메모리를 할당하여 인스턴스로 만들어줍니다. 스위프트에서는 모든 프로퍼티(속성)에 값이 할당되어야 정상적으로 초기화가 되었다고 인식하며 하나의 프로퍼티라도 값이 할당되지 않았다면 오류가 발생합니다. 구조체의 이니셜라이저 구조체를 선.. 공감수 0 댓글수 0 2021. 6. 17.
  • swift 접근제어자(Access Control) 안녕하세요. 도미닉입니다. 오늘은 Access Control 에 대해서 알아보겠습니다. Access Control 이란? Access Control 을 해석하면 무슨 뜻일까요? 접근 제어 입니다. 그렇다면 접근 제어하면 무슨 생각이 드시나요? 접근 금지라는 단어도 생각이 납니다. 관계자외 출입금지라는 표지판도 많이 붙어있죠. 어느 Access Level 까지 접근을 허용할지 제어하는 것을 접근 제어라고 합니다. Access Levels 이란? 해석하면 접근 단계입니다. 스위프트의 접근 단계는 5단계가 있습니다. open - 모듈 외부에서도 접근 가능 public - 모듈 외부에서도 접근 가능 internal - 하나의 모듈 내부에서만 접근 가능 fileprivate - 하나의 파일 내에서만 접근 가능 p.. 공감수 0 댓글수 0 2021. 6. 4.
  • Swift 에서 클로저와 고차함수 안녕하세요. 도미닉입니다. 오늘은 클로저와 고차함수에 대해서 알아보겠습니다. 클로저란? 클로저는 기능을 갖는 독립적인 코드 블록입니다. 말이 조금 어려운데요. 기능을 갖는 코드 블록을 우리는 이미 알고 있습니다. 맞습니다. 함수입니다. 그렇다면 함수와 클로저의 차이는 무엇일까요? 아래 설명을 보시면 이해하실 수 있으실 겁니다. 클로저를 선언하는 방법은? 클로저는 선언하는 부분에서부터 함수와 차이점을 보입니다. 클로저는 함수와 달리 이름을 적지않습니다. 이름을 적지 않음으로써 아래와 같은 사실을 알 수 있습니다. 클로저는 선언해놓고 호출하는 방식이 아니라 필요할 때마다 코드 블록을 작성해야한다. 자주 사용하는 코드 블록을 선언해놓는 함수와 달리 매번 다른 코드 블록을 사용할 때 필요할 것 같다. 그렇다면 .. 공감수 1 댓글수 0 2021. 1. 13.
  • 스위프트에서 열거형을 사용하는 3가지 방법 - 번역글 안녕하세요 도미닉입니다. 오늘은 렛츠스위프트 뉴스레터 17호에서 소개된 Enum 열거 타입을 사용하는 3가지 방법 글을 번역해서 공유하고자 합니다. 글쓴이의 허락을 받았습니다. 재미있게 보시고 enum 을 더 많이 잘 사용하는 날까지 열심히 같이 공부해봅시다. 번역 Swift에는 많은 데이터 구조가 있으며 정확히 사용하기 위해서는 각 필요한 상황을 이해해야합니다. 예를 들어, 우리는 독립적인 객체를 선언하기 위해 구조체를 사용하거나 일부 함수를 포함할 때 클로저를 사용합니다. Swift 언어에는 또 하나의 흥미로운 데이터 구조 인 enum이 있습니다. 그것이 정확히 무엇인지, 그리고 그것이 우리에게 어떤 기능을 제공하는지 알아봅시다. Enumeration 은 무엇인가요? Enum은 하나의 논리적 그룹에있.. 공감수 1 댓글수 0 2020. 10. 22.
  • 스위프트 열거형 안녕하세요. 도미닉입니다. 오늘은 스위프트의 열거형에 대해서 알아보겠습니다. 열거형 이란? 열거는 무슨 뜻일까요? 국어사전에 검색해보았습니다. “여러 가지 예나 사실을 낱낱이 죽 늘어놓음.” 이라고 나옵니다. 그렇다면 열거형은 “여러 가지 예나 사실을 낱낱이 죽 늘어놓음” + “형태” 라고 이해할 수 있겠습니다. 스위프트에서 열거형 이란? 스위프트에서 열거형은 Enumeration 이라고 합니다. 줄여서 Enum 이라고도 합니다. 열거형은 같은 성질을 가지는 여러 것들을 늘어놓는데 사용할 수 있습니다. 예를 들어 무게라는 성질을 가지는 것에는 어떤 것이 있을까요? g, kg, oz, lb 등이 있습니다. 이러한 한가지 성질을 가지는 것들을 묶어서 사용하는데 용이한 타입이 열거형입니다. 열거형을 선언하는 .. 공감수 0 댓글수 0 2020. 10. 20.
  • 스위프트에서 포인터를 사용하는 방법 inout 안녕하세요 도미닉입니다. 콜 바이 벨류, 콜 바이 레퍼런스 많이 들어보셨을 겁니다. 스위프트에서 inout 을 활용하여 포인터에 직접 접근할 수 있습니다. 위에 소스는 inout 을 통해 직접 포인터에 접근하여 두 변수의 값을 바꾸는 예제입니다. 함수에서 서로 값이 바뀐다면 그 값은 복사되어 사용된 값이므로 원본에는 영향을 주지 않습니다. 스위프트에서는 함수에 매개변수로 들어온 값을 수정할 수 조차 없습니다. 위와 같이 inout 을 통해 매개변수에 접근한다면 조금 더 효율적인 프로그래밍이 가능합니다. 직접 포인터에 접근하는 것은 자유도가 있지만 예상치 못하게 원본에 대한 수정이나 훼손이 가능하므로 주의하여야 합니다. 조금 더 안전한 메소드는 아래와 같습니다. 이상으로 inout 에 대해서 알아봤습니다... 공감수 0 댓글수 0 2020. 4. 25.
  • Swift 함수형 프로그래밍 안녕하세요. 도미닉입니다. 함수형 프로그래밍에 대해서 정리해봤습니다. 우선 함수형 프로그래밍과 절차형 프로그래밍은 아래와 같이 정리해봤습니다. 함수형 프로그래밍: 함수를 일급 객체로 생각하는 프로그래밍 기법 절차형 프로그래밍 : 위에서부터 순차적으로 코드를 실행하는 프로그래밍 기법 함수형 프로그래밍은 순수 함수를 사용하여 순차적으로 함수를 수행해나가며 프로그래밍이 실행되는 기법입니다. 순수함수는 상태값이 없기 때문에 언제나 같은 값을 기대할 수 있습니다. 순수함수를 사용하여 여러번 호출이 되거나 상태가 변경된 상황에서 호출이 되더라도 같은 식으로 동작합니다. 데드락이나 동시에 여러번 호출 되었을 때 상태가 달라지는 것으로부터 자유롭습니다. 공감수 0 댓글수 0 2019. 5. 10.
  • Swift Closure 안녕하세요. 도미닉입니다. 오늘은 클로저에 대해서 알아보겠습니다. 클로저는 이름 없는 함수라고 할 수 있습니다. 이름 없는 함수가 굳이 왜 필요한가? 라고 의문을 가질 수 있습니다. 이러한 클로저는 매개변수와 리턴 타입, 고차함수, 변수 등에 자유롭게 사용할 수 있습니다. 클로저의 기본 타입은 아래와 같습니다. { (parameters) -> return type in statements } 함수와 비교하자면 앞에 func 함수이름 부분이 빠진 것만 빼면 크게 다르지 않은 것을 알 수 있습니다. 아래 소스는 sorted 함수에 매개변수로 클로저를 사용했습니다. reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in return s1 .. 공감수 0 댓글수 0 2019. 5. 10.
  • Swift Enum 안녕하세요. 도미닉입니다. 오늘은 Enum 에 대해서 알아보겠습니다. Enum 은 항목을 묶어서 표현할 수 있는 타입입니다. 예를 들어 무게에는 kg, g, mg 등이 있습니다. 아래와 같이 표현할 수 있습니다. Enum 을 선언할 때는 첫 글자를 대문자로 선언해주어야 합니다. 이러한 Enum (열거형) 을 사용하면 장점이 weight 라는 단위는 mg, g, kg 중에 하나라고 단정지을 수 있습니다. 이러한 점이 별거 아닌 것 같아보일 수 있겠지만 weigth 라는 변수, 상수가 다양한 타입의 무궁무진한 값을 가질 수 있는 것에서 우리가 예측할 수 있는 값만 가질 수 있게 된다는 것은 엄청난 차이점이고 중요한 점이라고 생각합니다. 아래에서 Enum 의 다양한 사용방법을 알아보겠습니다. 1. CaseIt.. 공감수 0 댓글수 0 2019. 5. 9.
  • Swift Patterns and Pattern matching 안녕하세요. 도미닉입니다 오늘은 패턴에 대해서 알아보겠습니다. 패턴이란 소스의 양을 줄여서 쓰고 읽기 쉽게 정해놓은 구조 라고 생각할 수 있습니다. 패턴 매칭이란. 코드에서 패턴을 찾아내고 활용하는 것이라고 할 수 있겠습니다. 패턴에는 두가지 큰 유형이 있습니다. 모든 종류의 값에서 성공적으로 동작하는 패턴과 런타임 안에 지정된 값에 따라서 동작하지 못하는 패턴입니다. 첫 번째 종류의 패턴은 단순 변수, 상수 및 옵셔널 바인딩에서 값을 소멸시키는 데 사용됩니다. 여기에는 와일드 카드 패턴, 식별자 패턴 및 이를 포함하는 값 바인딩 패턴 또는 튜플 패턴이 포함됩니다. 이러한 패턴에서 타입 지정하여 특정 타입의 값만 일치하도록 제한 할 수 있습니다. 두 번째 종류의 패턴은 전체 패턴 일치에 사용되며, 여기서.. 공감수 0 댓글수 0 2019. 5. 3.
  • Swift Overriding and Overloading 안녕하세요. 도미닉입니다. 오늘은 오버로딩과 오버라이딩에 대해서 알아보겠습니다. 오버로딩(overloading) 이란 같은 이름의 메소드를 매개변수가 다르게 여러번 선언할 수 있는 것을 의미합니다. 오버로딩에는 생성자 오버로딩과 메소드 오버로딩이 있습니다. init 생성자를 매개변수 숫자를 다르게 해서 두번 선언했습니다. 이러한 것을 생성자 오버로딩이라고 합니다. eat 메서드를 매개변수 숫자를 다르게 해서 두번 선언했습니다. 이러한 것을 메서드 오버로딩이라고 합니다. 오버라이딩(overriding) 은 상위 클래스에서 선언한 메서드를 하위 클래스에서 재정의해서 사용하는 것을 의미합니다. 위에 오버로딩의 예제를 들었던 소스에서 People 클래스의 eat 메서드를 선언했었습니다. Student 클래스는 .. 공감수 0 댓글수 0 2019. 4. 29.
  • Swift Protocol and Polymorphism 안녕하세요. 도미닉입니다. 프로토콜과 다형성에 대해 정리해보겠습니다. 프로토콜은 특정 역할을 하기 위해 메서드, 프로퍼티 등을 정의하는 것입니다. 프로토콜을 채택하면 해당 프로토콜에서 정의되있는 메서드, 프로퍼티를 무조건 구현해주어야 합니다. 위와 같이 Food 라는 프로토콜에 eat 메서드를 정의하였습니다. 스파게티 구조체가 Food 프로토콜을 채택하였으나 eat 메서드가 존재하지 않아서 오류가 발생하였습니다. 동그라미를 클릭해서 오류 해결을 자동으로 요청하니 아래와 같이 eat 메서드가 생기고 구현부가 생성되었습니다. 위와 같이 스파게티, 햄버거, 피자 구조체를 Food 프로토콜을 채택해서 작성했습니다. 이제 스파게티, 햄버거, 피자는 Food 프로토콜을 따르기 때문에 무조건 eat 메서드가 있다고 .. 공감수 1 댓글수 0 2019. 4. 25.
  • TDD 와 Swift 를 이용해 가상 Git 제작 하기 - 1 안녕하세요. 도미닉입니다. 오늘은 TDD 를 이용해 vmgit 을 제작해보겠습니다. 가상으로 git 처럼 동작하는 프로그램을 Swift 로 작성해보려고 합니다. TDD 는 처음에 요구사항을 작성한 뒤에 아래의 3단계를 반복하며 개발하는 기법입니다. 요구사항을 테스트로 작성 -> 테스트를 통과할 최소한의 소스 작성 -> 리펙토링 우선 요구사항을 도출합니다. 1. init : init 명령어 뒤에 저장소명을 명령어를 실행하면 이름으로 저장소 공간을 생성합니다. 2. status local : local에 있는 저장소 내부 파일 상태를 출력합니다. 만약 저장소 이름이 없으면 전체 저장소 목록을 출력합니다. 3. checkout : 해당 저장소를 선택한 것을 표시하기 위해서 프롬프트 뒤에 저장소 이름을 붙여서 .. 공감수 1 댓글수 0 2019. 4. 22.
  • Swift Property 앞에서 소개드린 구조체 안에 내용 중에 프로퍼티에 대해서 먼저 알아보겠습니다. 프로퍼티는 저장 프로퍼티, 연산 프로퍼티, 타입 프로퍼티로 나뉘어집니다. 첫번째로 저장 프로퍼티는 가변 프로퍼티와 불변 프로퍼티로 나뉩니다. 구조체는 기본적으로 모든 저장 프로퍼티를 포함하는 이니셜라이저가 자동으로 생성됩니다. 위에 Cat 구조체에서 그것을 사용해보았습니다. 저장 프로퍼티는 기본값을 설정할 수도 있으며 기본값이 있는 경우 이니셜라이저 없이 인스턴스 생성이 가능합니다. struct Coordinate { var x: Int = 0 var y: Int = 0 } let point: Coordinate = Coordinate() 만약 저장 프로퍼티가 옵셔널이면 해당 프로퍼티는 초기값을 넣어주지 않아도 됩니다. 지연 .. 공감수 0 댓글수 0 2019. 4. 17.
  • Swift Structure 오늘은 스위프트의 구조체에 대해서 알아보겠습니다. struct 이름 { 프로퍼티 메서드 } 위와 같은 형태로 선언할 수 있습니다. 예를 들면 고양이 구조체는 아래와 같이 선언할 수 있습니다. struct Cat { let name: String var age: Int } 구조체는 자동으로 생성된 이니셜라이저를 통해 생성할 수 있습니다. var yaong: Cat = Cat(name: "yaong", age: 5) 또는 아래와 같이 직접 이니셜라이저 메서드를 선언해줄 수 있습니다. init (nameEntred: String) { name = nameEntred age = 1 } 직접 이니셜라이저 메서드를 선언해주면 기본으로 생성된 이니셜라이저는 사용하실 수 없습니다. 위에서 인스턴스를 만들어주는 소스는 .. 공감수 0 댓글수 0 2019. 4. 17.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.