TIL 15일 차 - Swift 문법 기초 문법 개인 과제 최종 리팩토링 첫 번째타입 추론.// 기존 코드 (수정 전)let sum: (Int, Int) -> String = {(a: Int, b: Int) -> String in "두 수의 합은 \(a + b) 입니다." // return 생략} -> 총 3단계로 나누어서 코드 리팩토링// 1단계: sum의 타입을 이미 왼쪽에서 알고 있으므로// 클로저 안의 반환 타입 -> String은 생략 가능let sum: (Int, Int) -> String = { (a: Int, b: Int) in "두 수의 합은 \(a + b) 입니다."}// 2단계: 파라미터의 타입(Int) 제거let sum: (Int, Int) -> String = { (a,..
TIL 15일 차 - Swift 문법 에러처리Swift는 프로그램이 정상적으로 실행되지 않을 때 발생할 수 있는 에러를 처리하고 안전하게 대응하는 방법을 제공한다. 1. Error 프로토콜Error 프로토콜은 '이 타입은 에러로 사용할 수 있다'라는 표시이다.protocol Error {}// 내용이 없는 마커(marker) 프로토콜임 Error 프로토콜은 보통 enum으로 만든다.enum NetworkError: Error { case invalidURL case timeout case noConnection}그 이유로는 에러는 종류중에 하나이며 행동이 없으므로 enum이 적합하다. 2. do, try, catch 구문 사용하여 오류 처리 및 관리하기- try 키워드를 사용해 에러가 ..
TIL 15일 차 - Swift 문법 ARC 순환참조 해제 문제클래스 A, B 사이에 순환참조가 발생하도록 구현해 주세요.각 클래스에 deinit 을 정의하여, 메모리 해제 여부를 확인할 수 있도록 해주세요.먼저 서로가 서로를 강하게 붙잡고 있어(Strong Reference), 아무도 메모리에서 사라지지 못하는 상황을 만들어야 한다. 1. 클래스 간 순환: ClassA는 ClassB를 가지고, ClassB는 ClassA를 가진다.// 1. 클래스 정의class A { var b: B? // A가 B를 참조함 (기본값은 Strong) deinit { print("A 메모리 해제 됨 (Deinit)") }}class B { var a: A? // B가 A를 참조함 ..
TIL 15일 차 - Swift 문법 객체 지향 프로그래밍 OOP객체 지향 프로그램이란?: 프로그램을 여러 개의 객체로 나누어 설계하고 구현하는 것 객체: class의 인스턴스 (프로퍼티+메서드)객체는 서로 메시지를 주고받으며(메서드를 호출하는 것) 상호작용을 함즉, 클래스의 인스턴스를 사용해서 개발을 지향하는 프로그래밍 방식 그럼 이 객체 단위로 코드를 구성하고 관리하는 게 뭐가 좋냐?코드의 재사용성과 유지보수성이 좋아짐 또한 클래스의 인스턴스는 일급 객체로 간주됨- 변수나 프로퍼티에 할당 가능- 함수나 메서드에 파라미터, 반환값으로 사용 가능- 런타임에 생성 가능 이러한 객체지향 프로그래밍엔 4가지 특징이 있다 1. 추상화- 추상화는 복잡한 시스템을 단순화하여, 공통적인 특성이나 기능을 추출하여 파..
TIL 14일 차 - Swift 문법 사용자 입력받기 readLine()스위프트에서 readLine()은 콘솔에서 한 줄의 문자열(String)값을 입력받는 함수이다.즉 사용자가 엔터를 치기 전까지의 입력한 내용을 가져오게 된다.반환 타입은 String?(옵셔널)로 입력이 없거나 실패하게 되면 nil값을 가지게 된다. 대표적인 예제print("이름을 입력하세요: ")let name = readLine()print("입력한 이름은 \(name)")// name이 옵셔널이므로 경고사용자가 아무것도 치지않고 입력하는 경우와 입력 스트림이 종료되는 경우에 앱이 터질 수 있어서스위프트는 안전하게 옵셔널로 반환하게 만들었다 ^^ 앱이 아니라 공부하는 내속이 터질 거 같다 여태배운언어중에 이렇게 입력하나 받는 거에..
TIL 13일 차 - Swift 문법 과제 최종 리펙토링과제 풀이 Github 링크 1번 문제.🍏 클로저 본문이 한 줄이면 in return에서 return 생략 가능하다.let sum: (Int, Int) -> String = { a, b in return "두 수의 합은 \(a + b) 입니다."}let sum: (Int, Int) -> String = { a, b in "두 수의 합은 \(a + b) 입니다." // return을 생략하더라도 마지막 한 줄이 자동 반환} 2번 문제.🍏 .map { String($0) }는 각 요소를 받아서 String(요소)로 바꾸는 것이다.그런데 String($0)은 String의 생성자를 부르는 것이므로 그 생성자 자체를 map에 바로 넘길..