목록분류 전체보기 (179)
study record
*이 글은 책 “스위프트 프로그래밍”을 읽고 작성된 글입니다. 객체지향 프로그래밍 패러다임에 기반을 둔 언어는 대부분 클래스의 상속을 사용해 타입에 공통된 기능을 구현한다. 그런데 스위프트의 표준 라이브러리에서 타입과 관련된 것은 대부분 구조체로 구현되어 있다. 상속이 되지 않는 구조체로 어떻게 다양한 공통 기능을 가질 수 있는지는 프로토콜, 익스텐션, 제네릭의 조화를 통해 이루어진다. 프로토콜 초기 구현 익스텐션은 기존 타입의 기능을 확장하고, 프로토콜은 프로토콜을 채택한 타입이 원하는 기능을 강제로 구현한다. 익스텐션과 프로토콜의 결합을 통해 중복 코드와 유지보수를 해결한다. 프로토콜을 정의할 때는 그 프로토콜을 채택한 타입에서 구현해주어야 하는 프로토콜의 요구사항을 구현할 수 없다. 단지 요구사항을..
*이 글은 책 “스위프트 프로그래밍”을 읽고 작성된 글입니다. 제네릭은 스위프트의 강력한 기능 중 하나이다. 제네릭을 이용해 코드를 구현하면 어떤 타입에도 유연하게 대응할 수 있다. 또한 제네릭으로 구현한 기능과 타입은 재사용하기도 쉽고, 코드의 중복을 줄일 수 이씨에 깔끔하고 추상적인 표현이 가능하다. 제네릭을 사용하고자 할 때는 제네릭이 필요한 타입 또는 메서드의 이름 뒤의 홀화살괄호 기능( ) 사이에 제네릭을 위한 타입 매개변수를 써 제네릭을 사용할 것임을 표시한다. 제네릭 함수 func swapTwoValues(_ a: inout T, _ b: inout T) { let temporaryA: T = a a = b b = temporaryA } 제네릭함수는 실제 타입 이름을 써주는 대신에 플레이스 ..
*이 글은 책 “스위프트 프로그래밍”을 학습하고 작성한 글입니다. 익스텐션이란 익스텐션은 스위프트의 강력한 기능 중 하나로 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있다. 기능을 추가하려는 타입을 구현한 소스코드를 알지 못 하거나 볼 수 없다 해도 타입만 안다면 그 타입의 기능을 확장할 수 있다. 스위프트의 익스텐션이 타입에 추가할 수 있는 기능 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 익스텐션은 타입에 새로운 기능을 추가할 수는 있지만 기존에 존재하는 기능을 재정의할 수는 없다. 클래스의 상속은 클래스 타입에서만 가능하지만 익스텐션은 구조체, 클래스, 프로토콜..
*이 글은 책 ‘스위프트 프로그래밍’을 학습하고 작성한 글입니다. 프로토콜이란 프로토콜은 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택해서 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 해당 프로토콜을 준수한다고 표현한다. 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 한다. 즉, 프로토콜은 정의를 하고 제시를 할 뿐이지 스스로 기능을 구현하지는 않는다. 프로토콜 채택 프로토콜은 구조체, 클래스, 열거형의 모양과 비슷하게 정의할 수 있으며 protocol 키워드를 사용한다. 구조체, 클래스, 열거형 등에서 프..