본문 바로가기

FRONT-END71

Swift Method Dispatch 클래스와 프로토콜의 메서드가 실행되는 방식에 대한 이해 스위프트가 함수를 실행시키는 방법 컴파일 타임 : 소스코드가 기계어코드로 변환되는 시점 Direct Dispatch | Static Dispatch 컴파일 시점에 코드 자체에 함수의 메모리 주소 삽입 또는 함수의 명령 코드를 해당 위치에 코드를 심음 가장 빠름 (0.0 - 2.13ns) 밸류 타입(구조체/열거형)에 사용 상속과 다형성의 장점을 누릴 수 없음 런타임 : 사용자에 의해 앱이 실행되는 시점 Table Dispatch | Dynamic Dispatch 함수의 포인터를 배열 형태로 보관 후 실행 중간 (3.23ns) 클래스, 프로토콜 테이블에서 사용 Witness Table : 프로토콜 테이블 Virtual Table : 클래스 테이블 Mes.. 2023. 8. 1.
Swift 프로토콜(Protocols) 클래스와 상속의 단점 하나의 클래스만 상속이 가능함. 즉, 다중 상속 불가능 기본적인 상위클래스의 메모리 구조를 따라갈 수 밖에 없음 (필요하지 않은 속성과 메서드도 상속됨) 클래스(레퍼런스 타입)에서만 가능 프로토콜 위 클래스에만 가능한 상속의 여러 문제를 해결하기 위해 나온 문법 실생활에서는 자격증의 개념으로 이해하면 쉬움 구체적인 구현을 하지 않음, 요구사항을 정의함. 구체적인 구현은 프로토콜을 채택한 곳에서 구현 class에서는 상속도 프로토콜도 채택하고 싶은 경우 상속하고자 하는 상위클래스를 먼저쓰고 프로토콜을 적으면 됨 상속과 달리 프로토콜은 다중 채택이 가능함으로 ,로 구분해 적으면 됨 protocol CanFly { func fly() } struct Bird: CanFly { func f.. 2023. 8. 1.
Swift 확장(Extensions) 복습 : 상속은 본질적으로 성격이 비슷한 타입을 새로 만들어 데이터를 추가하거나 기능을 변형시켜 사용하는 것을 의미 확장 (Extension) 클래스/구조체/열거형에 모두 가능하며 extension 키워드를 사용 현재 존재하는 타입에 기능(메서드 형태)을 추가해 사용하는 것을 의미, 수평 확장 본질적으로 기존의 메서드 테이블 외 따로 메서드를 추가하는 것 기존 메서드 재정의는 불가능 단, @objc 키워드를 사용하면 가능해지긴 함 확장이 정의되기 전 생성된 경우에도 기존 인스턴스에서 새 기능 사용 가능 장점은 애플이 미리 만들어놓은 클래스/구조체/열거형 같이 원본 소스 코드에 대한 엑세스 권한이 없는 유형을 확장해 내가 원하는 메서드를 사용할 수 있도록 구현이 가능함 (소급 모델링 retroactive .. 2023. 8. 1.
Swift 타입캐스팅(Type Casting) is연산자 (type check operator) 타입에 대한 검사를 수행하는 연산자 A is B : B는 A의 인스턴스인지 타입 확인하는 것 as 연산자 Person() -> Student() -> Undergraduate() as? / as!(강제) : 다운캐스팅 as? / as!(강제) => 다운캐스팅 Undergraduate 인스턴스를 생성하는데, 아래 코드와 같이 상위 클래스 Person으로 타입을 지정해 선언했던 것의 타입을 Undergraduate 타입으로 바꾸는 것을 의미 let person: Person() = Undergraduate() if let newPerson = person as? Undergraduate { // } as : 업캐스팅 Bridging(브릿징) : 서로 호환되.. 2023. 7. 31.
클래스의 상속, 초기화, 생성자 상속의 의미 성격이 비슷한 타입을 새로 만들어 데이터를 추가하거나 기능을 추가 및 변형해 사용하는 것 상속하는 문법 : class 새로운 클래스명 : 상속하고자 하는 클래스명 {} 상위 클래스에서 존재하는 멤버를 변형하는 것은 재정의라고 함, override 키워드 사용해야함 Swift에서는 다중 상속은 불가능 class 선언 시 앞에 final 키워드를 붙이면 상속이 불가능하게 만들 수 있음 변수 앞에 final 키워드를 붙이면 재정의 불가의 의미 클래스 용어 정리 기본(Base) 클래스 : 다른 어떤 것도 상속받지 않은 클래스 부모(Parent) 클래스 | 슈퍼 클래스 | 상위클래스 자식(Child) 클래스 | 서브 클래스 | 하위 클래스 재정의 : 상위 클래스의 변수를 변형하는 것을 의미함, 저장 .. 2023. 7. 31.
Swift 간단한 앱을 만들 때 알면 좋은 기초 문법들 이미지 넣는 방법 Assets 폴더에 사용하고자 하는 이미지 넣기 [코드 내 이미지를 불러와 사용하는 방법] #imageLiteral() 이미지 값을 넣는 방법으로 코드 내 UI로 직관적이게 이미지를 확인 할 수 있음 UIImage(named: String) 이미지의 이름을 활용해 넣는 방법 사용자 입력 받기 readLine() 사용자의 입력을 받아 해당 값으로 처리할 수 있는 것 JavaScript의 window.prompt()와 유사한 것으로 볼 수 있음 2023. 7. 26.