인터페이스
스위프트에서는 프로토콜이 그 역활을 한다고 한다.
자바의 경우 인터페이스가 존재하지만 스위프트는 그 역활을 프로토콜이 비슷하게 하는듯
스위프트 - 자바 인터페이스 차이 알아보자!
자바는 인터페이스 - 기본값 설정 가능
스위프트 프로토콜 - 기본값 설정 불가능
객체간의 인터페이스 추상화
예를 들면 학생 관시 시스템을 만들 때 구조체로 할 경우
struct Student {
var name: String
var age: Int
var grade: String
}
이 구조체 만으론 학생 정보를 관리하기에는 불편함이 있다. 예를 들어 학생 정보를 검색하거나 정렬하는등의 작업을 할 때 마다 이 구조체를 계속해서 수정하거나 새로운 함수를 작성해야한다.
이를 해결하기위해 인터페이스를 추상화하여 구현할 수 있다.
이 경우 학생 정보를 저장하고 관리하는 구조체 대신, 프로토콜을 선언하여 학생 정보에 대한 추상적 인터페이스를 제공할 수 있다
protocol StudentProtocol{
var name: String { get set }
var age: Int { get set }
var grade: String { get set }
func introduce() -> String
}
이제 학생 정보를 관리하는 구조체를 새로 작성하고 이 프로토콜을 채택하여 구현할 수 있다.
struct StudentStruct: StudentProtocol {
var name: String
var age: Int
var grade: String
func introduce() -> String {
return "이름: \(name), 나이: \(age), 학년: \(grade)"
}
}
이렇게 하면 프로토콜을 사용해 학생 정보에 대한 추상적인 인터페이스를 정의하고 구조체를 사용하여 이 인터페이스를 구현할 수 있다.
결론적으로 객체간의 인터페이스를 추상화한다는 것은 객체들이 서로 상호작용할 때 필요한 기능들을 명확하게 정의하고 분리하여, 코드의 재사용성과 유지보수성을 높이기 위한것이다.
프로토콜을 사용하여 다양한 타입에서 동일한 인터페이스를 제공할 수 있다. 이 때 프로토콜에서 연관타입과 제네릭을 사용하면 동일한 기능을 제공하면서 타입에 대한 유연성을 보장할 수 있다.
객체간의 인터페이스를 추상화하면 해당 인터페이스에 필요한 기능을 구현하는 다양한 객체를 만들 수 있다. 이런 객체들은 서로 다른 구현방식을 가지더라도 동일한 인터페이스를 제공하기 때문에 코드를 재사용하고 유지보수하기 쉬워진다. 또한 인터페이스에 필요한 기능을 명확하게 정의함으로써, 객체 간의 결합도를 낮추어 유연성을 높히고 객체 지향 설계의 핵심 원칙중 하나인 개방-폐쇄 원칙(OCP)을 만족시킬수 있다는 것이다.