무슨소린지 못알아듣겠어서 공부하고 정리.
인터페이스
Swift에서 인터페이스는 Protocol이다.
JAVA에는 인터페이스가 존재하는데, Swift의 Protocol과 비슷한 기능을 한다.
자바의 인터페이스와 프로토콜은 비슷하지만 차이가 있다.
기본값을 설정한다 ?
자바의 인터페이스는 기본값을 설정할 수 있다고 한다. Swift의 Protocol은 기본값을 설정할 수 없다.
요구사항의 구현정도?
자바의 인터페이스는 요구한 구현을 모두 정의해야한다.
Swift의 Protocol은 optional로 선택 구현이 가능하다.
객체간의 인터페이스 추상화
객체간의 인터페이스를 추상화한다는 것은, 객체간의 상호작용에서 필요한 기능들을 분리하고 명확하게 정의한다는 것이다.
예를 들어, 학생 정보를 저장하고 관리하는 프로그램을 만든다고 가정한다.
이 때 학생 정보를 저장하는 구조체를 선언할 수 있다.
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)을 만족시킬 수 있다.