[Swift] 프로토콜(Protocol), 익스텐션(Extension)

Boogios·2023년 6월 2일
0
post-thumbnail

프로토콜이란?

클래스가 충족해야 하는 최소한의 요구사항을 정의하는 규칙들의 집합

protocol 키워드를 사용하여 선언함
클래스가 반드시 포함해야하는 매서드와 프로퍼티를 정의함

	protocol EatSomething {
    	var food: String { get }
        func eat() -> String
    }
    
    class Person: EatSomething {
    	// EatSomething 프로토콜을 채용한 Person 클래스 선언
        // 프로토콜에 있는 프로퍼티와 메서드를 반드시 포함해야 함
        
        var food: String // get 저장 프로퍼티
        
        init(food: String) {
        	self.food = food
        }
        
        func eat() -> String {
        	"Eat " + food
        }
    }

protocol - 약속, extension - 약속+행동

익스텐션(Extension)

클래스에 새로운 기능을 추가하는 방법 - extension

필요한 기능들을 만들어서 계속 써야할 때 (메인 색 지정, Double 타입에서의 제곱 값 계산 등)

	extension Double {
    	var squared: Double {
        	get {
            	return self * self
            }
        }
        
        var cubed: Double {
        	self * self * self
        }
    }

익스텐션에는 저장 프로퍼티를 포함할 수 없기 때문에 하위 클래스로 상속받는 경우도 잘 사용해야함

기존에 있는 타입에만 적용 가능, 새로운 기능(요구사항)을 추가하는 것
자주 쓸거같으면 새로 만들어서 반복해서 사용해야징~!

상속 관련 용어 정리

  • super : 상위 클래스의 메서드를 그대로 활용하겠다!
  • final : 이 키워드가 붙은 메서드는 상속을 해도 override 하지 못함
  • static : 이 키워드가 붙은 메서드는 상속을 해도 변경이 불가함, 재정의 불가함

static 과 클래스 메서드는 새로운 클래스 인스턴스를 만들어서 사용하면 안됨

	class Student {
    	static func function1 {
        
        }
        
        class func function2 {
        
        }
    }
    
    let keen: Student = Student()
    
    keen.function1 // 에러
    keen.function2 // 에러
    
    Student.function1
    Student.function2 // static, class 메서드는 이렇게만 사용 가능

상속은 객체지향 프로그래밍에서 객체 재사용성 개념을 확장시켜줌

profile
iOS Developer

0개의 댓글