Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Jiseong & 고사리] 공용 인터페이스를 스위프트의 프로토콜과 동일하게 생각하시나요? #32

Open
gogosilver opened this issue Dec 14, 2021 · 5 comments

Comments

@gogosilver
Copy link
Collaborator

공용 인터페이스엔 객체의 공통된 메서드나 프로퍼티를 넣어주고 사용하는데, 이 공용 인터페이스를 자바의 인터페이스 역할을 한다고 알려진 스위프트의 프로토콜과 동일하게 생각하시는지 궁금합니다.

저희는 "그렇다" 고 느꼈는데, 여러분의 의견이 궁금하여 단순한 질문이지만 해봅니다.

@gogosilver gogosilver added this to the 05 책임과 메시지 milestone Dec 14, 2021
@yanghojoon
Copy link
Collaborator

Java 언어를 한 번도 사용해보지 않아 정확하진 않지만 개념 자체는 거의 유사하다고 생각합니다!

다만 Java에선 추상 메서드 뿐만 아니라 default 메서드도 존재하고, 프로퍼티도 get, set으로만 표시하지 않고 직접 값을 넣어줄 수 있는 것으로 찾아봤습니다.

따라서 Swift의 프로토콜보단 기능?이 조금 더 많지만 역할 자체는 유사하다고 생각합니다!

@hayeonhee
Copy link
Contributor

hayeonhee commented Dec 15, 2021

우선 저는 자바의 인터페이스를 모릅니다. 😢
검색해서 보여지는 자바의 인터페이스는 스위프트의 프로토콜과 상당히 유사해보여요.


저는 책에서 공용 인터페이스 부분을 읽을 때는 프로토콜로 한정짓지 않고, 공용 인터페이스는 외부에서 사용될 & 그래서 외부로 보여질 최소한의 (객체가 수신할 수 있는) 메세지의 목록을 나타내는 부분 이라고 이해했습니다.
지성과 고사리의 질문을 읽으며 생각해보니.. 프로토콜도 위에 나열한 기능을 수행한다는 것이 떠올랐고요.
그래서 저도 호댕의 의견처럼 역할 자체는 유사하다!라고 생각이 됩니다.

@July911
Copy link
Collaborator

July911 commented Dec 15, 2021

저는... 프로토콜이라기 보다는
접근제어자가 private 하지 않은 메서드라고 이해했습니다.

@jsim27
Copy link
Collaborator

jsim27 commented Dec 15, 2021

저도 줄라이와 같은 의견입니다.
protocol뿐만 아니라 모든 객체는 공용 인터페이스를 가진다고 생각했습니다.

예시를 하나 만들어보았는데요,

class 로봇청소기 {
    private func moveForward() {
        ...
    }
    private func rotate() {
        ...
    }
    private func vaccum() {
        ...
    }
    func cleanRoom() {
        while true {
            moveForward()
            rotate()
            vaccum()
        }
        ...
    }
    func togglePower() {
        ...
    }
}

위의 로봇청소기 타입의 객체들은 5개의 메서드를 갖고 있지만, 외부에 공개된 것은 cleanRoom(), togglePower() 둘입니다.
그래서 이 객체들의 공용 인터페이스는 'cleanRoom(), togglePower()' 라고 생각했습니다.

물론 프로토콜이 여러 객체가 같은 공용 인터페이스를 사용하여 다형성과 대체 가능성을 확보하도록 돕는것은 맞지만,
공용 인터페이스를 프로토콜이라고 한정짓기보다는 조금 더 넓은 의미에서 이해하는게 맞다고 생각했어요.

@yeahg-dev
Copy link
Collaborator

yeahg-dev commented Dec 15, 2021

저도 자바의 인터페이스는 잘 모르지만...🥲
공용인터페이스라는 개념에 더 포커스를 맞춰서 제가 이해한 바를 공유하겠습니다!

줄라이와 나무의 의견과 동일한데요~
공용인터페이스를 객체의 은닉화와 캡슐화의 관점에서 외부에 공개되어도 되는 부분,
외부와 소통할 수 있는 공개된 접점이라고 이해를 했습니다.

프로토콜이 공용인터페이스를 다른 객체들간에 동일하게 공유할 수 있는 수단이 될 수는 있지만,
프로토콜 자체를 공용인터페이스로 보기는 힘들다고 생각합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants