본문 바로가기

swift

(14)
[swift] ARC | 약한참조 (weak) 약한참조 (weak) 약한참조 (weak) 는 강한참조와 달리 자신이 참조하는 인스턴스의 참조 횟수를 증가시키지 않는다. 참조 타입의 프로퍼티나 변수의 선언 앞에 weak 키워드를 써주면 그 프로퍼티나 변수는 자신이 참조하는 인스턴스를 약한참조한다. 약한참조를 사용한다면 자신이 참조하는 인스턴스가 메모리에서 해제될 수도 있다는 것을 예상해볼 수 있어야 한다. 자신이 참조 횟수를 증가시키지 않았기 때문에 그 인스턴스를 강한참조하던 프로퍼티나 변수에서 참조 횟수를 감소시켜 0으로 만들면, 자신이 참조하던 인스턴스가 메모리에서 해제되기 때문이다. 약한참조와 상수, 옵셔널 약한참조는 상수에서 쓰일 수 없다. 만약 자신이 참조하던 인스턴스가 메모리에서 해제된다면 nil이 할당될 수 있어야 하기 때문이다. 또한 n..
[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 값으로 함수를 사용할 수 있다. 아직 이해가 잘 안 되는구나 .. 조금 더 공부해보기
[swift] 스위프트의 언어적 특성 1. 객체지향 객체지향 프로그래밍 (Object-Oriented Programming) 객체지향 프로그래밍 : 프로그램을 여러 개의 독립된 단위인 객체의 모임으로 파악 각 객체는 서로 메시지를 주고 받고 데이터를 처리할 수 있다. 장점 프로그램을 유연하고 쉽게 변경할 수 있도록 작성할 수 있어서 대규모 소프트웨어 개발에 많이 사용된다. 소프트웨어 개발과 유지보수를 간편하게 할 수 있다. 직관적으로 코드를 분석할 수 있다. 클래스에 하나의 문제 해결을 위한 데이터와 메소드를 모아놓은 방식으로 응집력을 강화하고, 각 클래스가 독립적이도록 디자인해 결합력을 약화한다. 주요 특징 추상화 상속 다형성 동적 바인딩 객체 클래스의 인스턴스(실제로 메모리에 할당되어 동작하는 모양을 갖춘 것) 객체는 자신 고유의 속성이 있으며 클래스..