Swift 기초 정리(26)
-
[Swift 기초] 연산자 오버로딩
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 연산자 오버로딩 연산자 오버로딩(operator overloading): 연산자에 기능을 추가하는 기법 사용자가 생성한 열거형, 클래스, 구조체와 함께 사용할 때 더욱 두드러짐 구조체(structure): 간단한 값의 집합을 캡슐화하는 데 사용 속성과 메서드를 포함할 수 있다는 점에서 클래스와 유사 //3차원 벡터를 생성하는데 필요한 데이터 포인트를 저장하는 구조체 struct Vector{ var x = 0 var y = 0 var z = 0 } var v1 = Vector(x: 5, y: 8, z: 5) var v2 = Vector(x: 9, y: 4, z: 2) print(v1 + v2) //이항 연산자 '+'은..
2023.07.11 -
[Swift 기초] 접근제어
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 스위프트의 접근제어는 모듈과 소스파일을 기반으로 설계되어있다. 1. 모듈 배포할 코드의 묶음 단위 하나의 프레임워크, 라이브러리, 애플리케이션이 모듈 단위가 될 수 있다. 스위프트에서는 import 키워드로 불러온다. 2. 소스파일 스위프트 소스 코드 파일 통상 파일 하나에 타입 하나만 정의하지만 소스파일 하나에 여러 타입(여러 개의 클래스, 구조체, 열거형)이나 함수 등 많은 것을 정의하거나 구현 3. 접근수준(Access Level) 각 타입(클래스, 구조체, 열거형 등)에 특정 접근수준을 지정할 수 있고, 타입 내부의 프로퍼티, 메서드, 이니셜라이저, 서브스크립트 각각에도 접근수준을 지정할 수 있다. open, ..
2022.04.13 -
[Swift 코테 기초] 고차함수
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 전달인자로 함수를 전달받거나 함수 실행의 결과를 함수로 반환하는 함수 map, filter, reduce 1. map 컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너 생성 컨테이너 타입: Array, Set, Dictionary 등 1-1. 기존의 for 구문 사용 let numbers: [Int] = [0, 1, 2, 3, 4] var doubledNumbers: [Int] var strings: [String] doubledNumbers = [Int]() strings = [String]() for number in numbers { doubledNumbers.append(number * 2) strings..
2022.04.12 -
[Swift 기초] 오류처리
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 오류 표현 enum 오류종류이름: Error { case 종류1 case 종류2 case 종류3 //... } Error 프로토콜과 주로 열거형을 통해 오류를 표현한다. Error 프로토콜 내부적으로는 비어있는 프로토콜 Error를 구현한다는 의미가 중요한 프로토콜 Error 프로토콜을 열거형에 추가한 후 열거형 내에 오류들을 정의 1-1. 예시 //오류를 표현하기 위한 열거형 //자판기 동작 오류 enum VendingMachineError: Error { case invalidInput case insufficientFunds(moneyNeeded: Int) case outOfStock } 1-2. 함수에서 ..
2022.04.11 -
[Swift 기초] 익스텐션
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능 1. 익스텐션의 특징 익스텐션(extension): 기존의 코드 변경 없이 기능을 추가할 수 있다. 익스텐션은 모든 타입에 적용할 수 있다: 구조체, 열거형, 클래스, 프로토콜, 제네릭 타입 등 타입만 알고 있다면 그 타입의 기능을 확장할 수 있다. 모든 타입에 연산 프로퍼티, 메서드, 이니셜라이저, 서브스크립트, 중첩 데이터 타입 등을 추가할 수 있다. 기능을 추가할 수 있지만, 기존에 존재하는 기능을 재정의 할 수 없다. 프로토콜과 함께 사용하면 더욱 강력 1-1. 클래스와 익스텐션 비교 상속 익스텐션 확장 수직확장 수평확장 ..
2022.04.05 -
[Swift 기초] 프로토콜
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 프로토콜 protocol 프로토콜이름 { /*코드 구현*/ } 타입 타입이름: 프로토콜 채택{ /*코드 구현*/ } 프로토콜(protocol): 프로그램 구성 요소, 프로토콜에는 그것을 사용하는 클래스에 반드시 있어야 하는 특정 속성과 메서드를 정의한다. 구조체, 클래스, 열거형 등의 어떤 타입에 이러한 기능이 꼭 필요하다고 강요하는 것! 특정 객체가 갖추어야 할 기능이나 속성(메서드, 프로퍼티, 기타 요구사항)에 대한 설계도, 구현해야 할 내용의 명세서 채택(Adopted): 구조체, 클래스, 열거형은 프로토콜을 채택해서 특정기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현 준수(Conform): 어떤 프..
2022.04.05 -
[Swift 기초] assert와 guard
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 애플리케이션이 동작하는 동중에 생성하는 다양한 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있다. 1. assert 함수 assert(::file:line:) assert(condition: Bool) 디버깅 중 조건의 검증을 위해 사용 condition이 true인 경우 그냥 지나침 그렇지 않은 경우에는 메세지를 출력하고 동작을 중지시킴 디버깅 모드에서만 동장 var someInt: Int = 0 //조건이 true인 경우 그냥 지나치고 그렇지 않으면 메세지를 출력하고 동작을 중지시킴 assert(someInt == 0, "someInt != 0") someInt = 1 //ass..
2022.04.05 -
[Swift 기초] 자동참조계수, 강한참조, 약한참조
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 0. 메모리 관리 heap 영역: 동적으로 메모리를 할당할 때 위치하는 영역, 필요없을 때 소거되는 영역 1. 자동 참조 계수 JAVA: 가비지 콜렉터를 사용. 메모리 관리는 편리하나 가비지 콜렉터가 수시로 실행되어 시스템에 부하 C, C++: 개발자가 할당한 동적 메모리를 직접 해제해야 함, 에러 가능성 높음 자동참조 관리 기법 프로그램의 메모리 사용을 자동 참조계수를 통해 추적, 관리 필요없는 클래스 인스턴스 메모리를 자동적으로 해제 클래스의 인스턴스에만 적용 1-1. ARC: Automatic Reference Counting class Person { var name: String init(name: Strin..
2022.04.04 -
[Swift 기초] 타입캐스팅
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 타입캐스팅은 인스턴스의 타입을 확인하는 용도(is) 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는 지 확인하는 용도(as) 0. 참고 let someInt: Int = 100 let someDouble: Double = Double(someInt) 타입캐스팅이 아니라 → someInt라는 값을 가지고 Double 타입의 값을 하나 더 생성해주는 것 타입 캐스팅 예제를 위한 클래스 정의 class Person { var name: String = "" func breath(){ print("숨을 쉽니다.") } } class Student: Person { var school: String = "..
2022.04.04 -
[Swift 기초] 인스턴스의 생성과 소멸
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 프로퍼티 기본값 스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 한다. 프로퍼티에 미리 기본값을 할당해 두면 인스턴스가 생성됨과 동시에 초기값을 가진다. class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "blank" //초기값이 없는 경우 에러 발생 //Class 'PersonA' has no initializers //Stored property 'location' without initial value prevents synthe..
2022.04.02 -
[Swift 기초] 클래스와 상속
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 0. 참고 함수: func 키워드로 생성하는 것 메서드: 클래스, 구조체, 열거형 속에 포함되어 있는 함수 인스턴스 메서드: 인스턴스를 생성해야만 호출 가능한 함수, 생성된 인스턴스에 .(dot)문법을 통해 접근 타입 메서드: 인스턴스 생성 없이 타입의 이름만 알면 호출 가능, static 혹은 class가 붙으면 타입 메서드 1. 클래스 클래스(class): 실제 세계의 객체를 우리의 앱에 나타내기 위해 설계된 코드 모듈이다. 앱의 구성 요소로 사용 클래스를 사용하면 프로그램에서 사용할 수 있는 객체를 추상화 할 수 있다. 실제 세계) 실제 객체로 자동차 - 빨간색 차, 문이 4개, 최고 속도가 120마일, 2015..
2022.04.02 -
[Swift 기초] 프로퍼티
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 프로퍼티 프롤퍼티는 클래스, 구조체, 열거형 내부에 구현할 수 있다. 열거형 내부에는 연산 프로퍼티만 구현할 수 있다. 타입과 관련된 값을 저장할 수도, 연산할 수도 있다. 프로퍼티의 종류에는 인스턴스 저장, 타입 저장, 인스턴스 연산, 타입 연산, 지연 저장 프로퍼티 연산 프로퍼티는 var로만 선언할 수 있다. 1-1. 인스턴스 저장 프로퍼티(stored property) 일반적으로 사용한 프로퍼티 struct Student { var name: String = "" var `class`: String = "Swift" var koreanAge: Int = 0 } 1-2. 인스턴스 연산 프로퍼티(computed..
2022.03.31