본문 바로가기

Swift

(17)
[swift] 값 타입 vs 참조 타입 swift의 Class 단일 상속 가능 (다중 상속 불가) 참조 타입 (데이터를 전달할 때 값의 메모리 위치를 전달한다) Apple 프레임워크의 대부분의 뼈대는 모두 클래스로 구성되어 있다. swift의 struct 다른 언어의 구조체들보다 다양한 기능을 가지고 있다. 상속 불가 값 타입 (데이터를 전달할 때 값을 복사해서 전달) swift의 대부분 큰 뼈대는 모두 구조체로 구성되어 있다. swift의 enum 다른 언어의 열거형과는 다른 존재 상속 불가 값 타입 열거형 자체가 하나의 데이터 타입이다. 열거형의 case 하나하나 전부 하나의 유의미한 값으로 취급한다. 구조체는 언제 사용하나? 연관된 몇몇의 값을 모아서 하나의 데이터 타입으로 표현하고 싶을 때 다른 객체, 함수로 전달되는 상황에서 참조가 ..
[swift] 열거형 (enum) 열거형 (enum) swift의 열거형은 각각의 case가 고유의 값으로 취급이 된다. enum 자체가 하나의 타입이므로, 대문자 카멜케이스로 이름을 정의해야 한다. 각 case는 소문자 카멜케이스를 사용함. 각 case는 한 줄에 한 개, 여러 개 등 마음대로 정의할 수 있다. enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 // 한 줄에 여러 개 정의 가능 } // 예제 enum BoostCamp { case iosCamp case androidCamp case webCamp } enum Weekday { case mon case tue case wed case thu, fri, sat, sun } // 열거형 타입과 케이스를 모두 사용하여도 됩니다 var day:..
[swift] 클래스(class) 클래스 (class) 구조체는 값 타입인 반면에, 클래스는 참조 타입이다. swift의 클래스는 다중 상속이 되지 않는다. class Sample { var mutableProperty: Int = 100 // 가변 프로퍼티 let immutableProperty: Int = 100 // 불변 프로퍼티 static var typeProperty: Int = 100 // 타입 프로퍼티 func instanceMethod() { // 인스턴스 메소드 print("instance method") } // 타입 메서드 static func typeMethod() { // 상속시 재정의 불가 타입 메서드 - static print("type method - static") } class func classMeth..
[swift] 구조체 (struct) 구조체 (struct) 스위프트의 대부분의 타입은 구조체로 이루어져 있고, 구조체는 값 타입이다. (함수는 참조 타입!) 프로퍼티 : 타입 안에 들어가는 변수 메소드 : 타입 안에 들어가는 함수 struct Sample { var mutableProperty: Int = 100 // 가변 프로퍼티 let immutableProperty: Int = 100 // 불변 프로퍼티 // 이 두 개는 인스턴스 프로퍼티 static var typeProperty: Int = 100 // 타입 프로퍼티 func instanceMethod() { // 인스턴스 메소드 print("instance method") } static func typeMethod() { // 타입 메소드 print("type method") ..
[swift] ARC | 강한참조 (Strong) 강한참조 (Strong) 인스턴스가 계속해서 메모리에 남아있어야 할 명분을 만들어 주는 것 인스턴스는 참조 횟수가 0이 되는 순간 메모리에서 해제되는데, 인스턴스를 다른 인스턴스의 프로퍼티나 변수, 상수 등에 할당할 때 강한참조를 사용하면 참조 횟수가 1 증가한다. 또한 강한참조를 사용하는 프로퍼티, 변수, 상수 등에 nil을 할당해주면 참조 횟수가 1 감소한다. 참조의 기본은 강한참조이므로 클래스 타입의 프로퍼티, 변수, 상수 등을 선언할 때 별도의 식별자를 명시하지 않으면 강한참조이다. class Person { let name: String init(name: String) { self.name = name print("\(name) is being initialized") } deinit { pr..
[swift] ARC란? (IBOutlet 선언할 때 weak을 왜 붙이는 걸까 알아보다가.. 여기까지 오게되었음) 매번 전달할 때마다 값을 복사해 전달하는 값 타입과는 달리, 참조 타입은 하나의 인스턴스가 참조를 통해 여러 곳에서 접근하기 때문에 언제 메모리에서 해제되는 지가 중요한 문제이다. 인스턴스가 적절한 시점에 메모리에서 해제되지 않으면 메모리 자원을 낭비하게 되며, 이는 성능 저하로 이어진다. 그래서 스위프트는 프로그램의 메모리 사용을 관리하기 위해 메모리 관리 기법인 ARC를 사용한다. ARC와 값 타입 ARC가 관리해주는 참조 횟수 계산 (Reference Counting) 은 참조 타입인 클래스의 인스턴스에만 적용된다. 구조체, 열거형은 값 타입으로 참조 횟수 계산과 무관 ➡️ 구조체, 열거형은 다른 곳에서 참조..
[swift] 데이터 타입 | Any, AnyObject Any 스위프트의 모든 데이터 타입을 사용할 수 있다는 뜻 변수, 상수의 데이터 타입이 Any로 지정되어 있으면 이 변수, 상수에는 어떤 종류의 데이터 타입이든지 상관없이 할당할 수 있다. AnyObject Any보다는 한정된 의미로, 클래스의 인스턴스만 할당할 수 있다. 하지만 Any, AnyObject는 사용하지 않는 것을 추천한다. 타입에 엄격한 스위프트 특성 상 Any, AnyObject로 선언된 변수의 값을 가져다 쓰려면 매번 타입 확인 및 변환을 해줘야 한다. 또한 예기치 못한 오류가 발생할 위험이 증가한다. 그래서 타입은 웬만하면 명시하는 것이 좋습니다~ ~
[swift] 스위프트의 언어적 특성 2. 함수형 함수형 프로그래밍 주요 조작 단위가 클래스나 구조체의 인스턴스가 아니라, 함수이다. 장점 여러 가지 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉽다. 멀티 코어 혹은 여러 개의 연산 프로세서를 사용하는 시스템에서 효율적인 프로그램을 만들기 쉽다. 상태변화에 따른 부작용에서 자유로워지므로 순수하게 기능 구현에 초점을 맞추어 설계할 수 있다. 특징 함수 자체를 일급 객체로 다룬다. 함수 자체가 전달인자(Argument)로 전달된다. return 값으로 함수를 사용할 수 있다. 아직 이해가 잘 안 되는구나 .. 조금 더 공부해보기