본문 바로가기

분류 전체보기303

[Swift] 에러 처리 에러 처리 (ErrorHandling) 프로그램 실행 시 에러가 발생하면 그 상황에 대해 대응하고, 이를 복구하는 과정 Swift에서는 런타임 에러가 발생한 경우 처리를 위해 에러의 발생(throw ing), 감지(catching), 전파(propagating), 조작(manipulating)을 지원하는 일급 클래스를 제공 에러의 표시와 발생 (Representing and Throwing Errors) Swift에서 에러는 Error 프로토콜을 따르는 타입의 값으로 표현 Error 프로토콜은 비어있으며 에러 처리에 타입을 사용할 수 있음을 나타냄 enum ServerError: Error { case forbidden case notFound case internalError case unauthori.. 2023. 2. 7.
[프로그래머스 LV.1] 수박수박수박수박수박수? 프로그래머스 LV.1 모음 수박수박수박수박수박수? 문제 설명 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를 들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 제한 사항 n은 길이 10,000 이하인 자연수입니다. 입출력 예 n return 3 "수박수" 4 "수박수박" 제출 func solution(_ n:Int) -> String { var re = "" for i in 1...n{ if i % 2 == 1{ re += "수" } else{ re += "박" } } return re } 1부터 n까지 반복문을 실행하여, 홀수라면 "수" 짝수라면 "박"을 re 변수에 추가한다. 다른 풀이 func.. 2023. 2. 7.
[프로그래머스 LV.1] 소수 찾기 프로그래머스 LV.1 모음 소수 찾기 문제 설명 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 사항 n은 2 이상 1000000 이하의 자연수입니다. 입출력 예 n result 10 4 5 3 입출력 예 설명 입출력 예 #1 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환 입출력 예 #2 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3을 반환 제출 import Foundation func solution(_ n:Int) -> Int { var isPrime = true var count = 0 for i in 2...n { .. 2023. 2. 7.
[Swift] 고차함수 고차함수 고차함수는 다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수 swift의 함수(클로저)는 일급시민이기 때문에 함수의 전달인자로 전달할 수 있으며, 함수의 결괏값으로 반환할 수 있음 일급객체 (First Class Citizen) 객체가 런타임에도 생성 가능하다. 객체를 인자 값으로 전달할 수 있어야 한다. 객체를 반환 값으로 사용할 수 있어야 한다. 데이터 구조 안에 저장할 수 있어야 한다. map 기존의 컨테이너의 요소에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환 //For문 사용 let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9] var multiplyArray = [Int]() for num in numArray{ multiplyA.. 2023. 2. 6.
[Swift] 클로저 (Closure) 클로저 (Closure) 사용자의 코드 안에서 전달되어 사용할 수 있는 로직을 가진 중괄호"{}" 구분된 코드의 블록 이름이 없는 함수 클로저는 어떠한 상수나 변수의 참조를 캡처(capture)해서 저장 가능 Swift는 이 캡처와 관련한 모든 메모리를 알아서 처리 파라미터를 받을 수 있고, 반환 값이 존재할 수 있다는 점에서 함수와 동일 Swift 클로저는 최적화를 통해 깔끔하고 명확한 스타일을 가지고 있음 문맥(context)에서 인자 타입과 반환 타입의 추론 단일 표현식 클로저의 암시적 반환 축약된 인자 이름 후위 클로저 문법 { (매개변수 이름 : 매개변수 타입) -> 반환타입 in 클로저 표현식 코드 } 후행 클로저 (trailing closure) 클로저가 함수의 마지막 argument라면, .. 2023. 2. 6.
[Swift] 익스텐션 (Extensions) 익스텐션 (Extensions) 익스텐션을 이용해 클래스, 구조체, 열거형 혹은 프로토콜 타입에 기능을 추가 가능 익스텐션은 타입에 새로운 기능을 추가할 수 있지만, 오버라이드는 할 수 없음 계산된 인스턴스 속성 및 계산 유형 속성 추가 인스턴스 메서드 및 타입 메서드 정의 새 이니셜라이저 제공 Subscript 정의 새 중첩 타입 정의 및 사용 기존 타입을 프로토콜에 맞게 설정 extension Int { var add: Int { return self + 100 } var sub: Int { return self - 10 } var mul: Int { return self * 10 } var div: Int { return self / 5 } } let addition = 3.add print("Ad.. 2023. 2. 6.
[Swift] 프로토콜 (Protocol) 프로토콜 (Protocol) 특정 작업이나 기능에 적합한 메서드, 프로퍼티 및 기타 요구사항의 ‘약속’을 정의 클래스(class), 구조체(struct), 열거형(enum)에서는 어떠한 프로토콜을 채택하여 해당 프로토콜의 요구사항을 실제로 구현 가능 프로토콜의 요구사항을 충족시키는 모든 타입은 해당 프로토콜을 준수한다 혹은 따른다고 함 프로토콜을 채용한 형식은 요구사항을 반드시 모두 구현해야 함 프로토콜은 프로토콜 간 상속을 지원하며, 클래스와 달리 다중 상속도 지원 프로토콜 채택하기 클래스, 구조체, 열거형에서 정의한 프로토콜을 채택하기 위해서는 콜론(:)을 사용 하나의 타입에서 다수의 프로토콜을 채택하기 위해서는 콤마(,)를 사용 클래스에서 상속과 프로토콜 채택을 동시에 하려면 상속받으려는 클래스를 .. 2023. 2. 6.
[Swift] assert와 guard assert 특정 조건을 체크하고, 조건이 성립되지 않으면 메시지를 출력하게 할 수 있는 함수 assert 함수는 디버깅 모드에서만 동작하고 주로 디버깅 중 조건의 검증을 위하여 사용 var value = 0 assert(value == 0) value = 2 assert(value == 0, "값이 0이 아닙니다.") 첫 번째 assert는 참이기 때문에 오류가 발생하지 않음 두 번째 assert는 거짓이기 때문에 런타임에러가 발생 Assertion failed: 값이 0이 아닙니다. guard 문 조건을 검사하여 그다음에 오는 코드를 실행할지 말지 결정하는 구문 guard을 사용하여 조건이 성립하지 않을 시 특정 실행 구문을 빠르게 종료 guard의 else 블록 내부에는 특정 코드 블록을 종료하는 .. 2023. 2. 6.
[Swift] 타입 캐스팅 타입 캐스팅 (Type Casting) 인스턴스의 "타입"을 확인하거나, 해당 인스턴스를 슈퍼 클래스나 하위 클래스로 취급하는 방법 Swift에서 타입 캐스팅은 "is"나 "as" 연산자로 구현 타입 캐스팅을 사용하여 타입이 프로토콜에 적합한지 여부도 확인 가능 is 타입을 체크하는 연산자 런타임 시점에 실제 체크가 이루어짐 반환 값은 Bool 형 표현식이 Type과 동일하거나, 표현식이 Type의 서브클래스인 경우 True를 반환 이 외에는 False 반환 //1 let char: Character = "A" char is Character // true char is String // false //2 class Animal { } class Dog: Animal { } let dog: Dog = ... 2023. 2. 6.
[Swift] 클래스(Class)와 구조체(Struct) 클래스(Class) 클래스를 정의하여 객체를 만들고 사용 가능 클래스를 만들어 클래스에서 생성된 객체인 인스턴스를 만들어 사용 클래스 안의 변수 프로퍼티(Property)와 클래스 안의 함수 메서드(Method)로 구성 class Name { var name = "Hyebin" //프로퍼티 //메서드 func my_name() { print("my name is \(name)") } } //인스턴스 생성 let hyebin : Name = Name() print(hyebin.name)// Hyebin hyebin.my_name()// my name is Hyebin hyebin.name = "yoo" hyebin.my_name()// my name is yoo 클래스 초기화 (Initialization).. 2023. 2. 6.
반응형