본문 바로가기

⌨️ Language37

[Swift] 자동 참조 카운트 자동 참조 카운트(ARC, Automatic Reference Counting)앱의 메모리 관리를 위해 사용자동으로 참조 횟수를 관리하기 때문에 대부분의 경우에 메모리 관리에 신경쓸 필요가 없고 ARC가 자동으로 사용하지 않는 인스턴스를 메모리에서 해지특정 경우에 ARC에서 메모리 관리를 위해 코드의 특정 관계에 대한 정보를 필요로 함참조 횟수는 클래스 타입의 인스턴스에만 적용되고 구조체, 열거형 등 값 타입에는 적용되지 않음 ARC 동작새로운 클래스 인스턴스를 만들 때 마다 ARC는 인스턴스 정보를 담는데 필요한 크기의 메모리를 할당메모리는 인스턴스에 대한 정보와 관련된 저장 프로퍼티 값을 갖고 있음인스턴스가 더이상 사용되지 않을 때 ARC는 그 인스턴스가 차지하고 있는 메모리를 해지해 공간을 확보AR.. 2024. 4. 2.
[Swift] 제네릭 제네릭(Generics)유연하고 재사용 가능한 함수와 타입의 코드를 작성하는 것을 가능하게 함인자값의 타입만 다르고 동일한 기능을 수행하는 함수를 하나로 만들 수 있음 제네릭 함수(Generic Functions)함수명 뒤에 타입 이름 placeholder인 T를 선언하고 a,b 파라미터를 T로 선언func swapTwoValues(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA}var someInt = 3var anotherInt = 107swapTwoValues(&someInt, &anotherInt)// someInt is now 107, and anotherInt is now 3var someString .. 2024. 4. 2.
[Swift] 프로토콜 프로토콜(Protocols)어떤 기능에 필요한 요구사항을 선언해두는 것클래스, 구조체, 열거형에 의해 채택프로토콜 문법protocol SomeProtocol {// protocol definition}프로토콜을 따르는 타입을 정의하기 위해서는 타입 이름 뒤에 콜론(:)을 붙이고 프로토콜 이름을 적음프로토콜을 채택할 때는 프로토콜에 정의된 요구사항을 반드시 구현 해야만 함 struct SomeStructure: FirstProtocol, AnotherProtocol { // structure definition goes here}class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol { // class definition goes her.. 2024. 3. 29.
[Swift] 에러 처리 에러의 표시와 발생enum VendingMachineError: Error { case invalidSelection case insufficientFunds(coinsNeeded: Int) case outOfStock}throw VendingMachineError.insufficientFunds(coinsNeeded: 5) 에러 처리에러가 발생한 함수에서 리턴값으로 에러를 반환해 해당 함수를 호출한 코드에서 에러를 처리하도록 하는 방법do-catch 구문을 사용하는 방법옵셔널 값을 반환하는 방법assert를 사용해 강제로 크래쉬를 발생시키는 방법에러를 발생시키는 함수 사용하기어떤 함수, 메소드 혹은 생성자가 에러를 발생시킬 수 있다는 것을 알리기 위해 throw 키워드를 함수 선언.. 2024. 3. 28.
[Swift] 옵셔널 체이닝 옵셔널 체이닝nil일 수도 있는 프로퍼티나, 메소드 그리고 서브스크립트에 질의(query)를 하는 과정만약 옵셔널이 프로퍼티나 메소드 혹은 서브스크립트에 대한 값을 갖고 있다면 그 값을 반환함만약 값이 nil이라면 nil 반환 강제 언래핑의 대체로써의 옵셔널 체이닝옵셔널 값 뒤에 물음표(?)를 붙여서 표현 가능옵셔널을 사용할 수 있는 값에는 프로퍼티, 메소드 그리고 서비스크립트가 포함옵셔널 값을 강제 언래핑하기 위해 뒤에 느낌표(!)를 붙이는 것과 유사강제 언래핑을 했는데 만약 그 값이 없으면 런타임 에러 발생옵셔널 체이닝을 사용하면 런타임 에러 대신 nil이 반환class Person { var residence: Residence?}class Residence { var numberOfRo.. 2024. 3. 26.
[Swift] 초기화 초기화 (Initialization)클래스, 구조체, 열거형 인스턴스를 사용하기 위해 준비 작업을 하는 단계각 저장 프로퍼티의 초기 값을 설정 →initializer를 정의 하는 것으로 구현 저장 프로퍼티를 위한 초기값 설정인스턴스의 저장 프로퍼티는 사용하기 전 반드시 특정 값으로 초기화 돼야 함 (기본 값으로 설정/특정 값으로 설정 가능)NOTEinitializer에서 저장 프로퍼티에 값을 직접 설정하면 프로퍼티 옵저버가 호출되지 않고 값 할당이 수행 이니셜라이저특정 타입의 인스턴스 생성 (이니셜라이저의 가장 간단한 형태_ 파라미터 없이 init 키워드 사용)init() {// perform some initialization here}기본 프로퍼티프로퍼티 선언과 동시에 값을 할당, 이 값을 초기 값으.. 2024. 3. 25.
[Swift] 상속 상속(Inheritance)클래스에서 다른 클래스로 부터 상속할 수 있음클래스에서 저장 프로퍼티, 계산 프로퍼티 상관없이 상속 받은 프로퍼티에 프로퍼티 옵저버를 사용해 값 설정에 반응할 수 있음기반클래스다른 어떤 클래스로부터 상속받지 않은 클래스 SomeSuperclass서브클래싱부모로 부터 성격을 상속받고 자신 고유의 특성도 추가할 수 있음class SomeSubclass: SomeSuperclass { // subclass definition goes here}서브클래싱은 계속할 수 있음 오버라이딩 (Overriding)서브클래스에서 부모클래스에서 상속받은 것을 재정의인스턴스, 메소드, 타입 메소드, 인스턴스 프로퍼티, 타입 프로퍼티, 서브스크립트 모두 가능다른 선언 앞에 override키워드 붙여 .. 2024. 3. 22.
[Swift] 서브스크립트 서브스크립트(Subscripts)클래스, 구조체, 그리고 열거형에서 스크립트를 정의해 사용 가능콜렉션, 리스트, 시퀀스 등 집합의 특정 멤버 엘리먼트에 간단하게 접근 할 수 있는 문법추가적인 메소드 없이 특정 값을 할당하거나 가져올 수 있음하나의 타입에 여러 서브스크립트를 정의할 수 있고 오버로드(Overload)도 가능단일 인자 값을 넘어, 필요에 따라 복수 인자 값 사용 가능서브스크립트 문법 (Subscript Syntax)서브스크립트는 읽고-쓰기(read-write) 혹은 읽기 전용(read only)만 가능setter, getter 방식을 따름subscript(index: Int) -> Int { get { // 적절한 반환 값 } set(newValue) { .. 2024. 3. 22.
[Swift] 메서드 메서드(Methods)특정 타입의 클래스, 구조체, 열거형과 관련된 함수 인스턴스 메서드 (Instance Methods)특정 클래스, 구조체, 열거형의 인스턴스에 속한 메서드인스턴스 내의 값을 제어하거나 변경 가능인스턴스가 속한 특정 타입의 인스턴스에서만 실행 가능class Counter { var count = 0 func increment() { count += 1 } func increment(by amount: Int) { count += amount } func reset() { count = 0 }}let counter = Counter()// 초기 count 값은 0입니다.counter.increment()// co.. 2024. 3. 21.
[Swift] 프로퍼티 저장 프로퍼티계산 프로퍼티값을 저장하고 있는 프로퍼티값을 저장하고 있지 않고 특정하게 계산한 값을 반환해 주는 프로퍼티클래스와 구조체에서만 사용 가능클래스, 구조체, 열거형 모두에서 사용가능저장 프로퍼티let키워드를 이용해서 상수 혹은 var키워드를 이용해서 변수로 선언해 사용struct FixedLengthRange { var firstValue: Int let length: Int}var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)// 범위 값은 0, 1, 2 입니다.rangeOfThreeItems.firstValue = 6// 범위 값은 6, 7, 8 입니다. 상수 구조체 인스턴스의 저장 프로퍼티구조체를 상수(let)로 .. 2024. 3. 20.
반응형