[Swift] 접근제어자 (+Flutter)

jae·2024년 12월 3일

swift

목록 보기
10/14

레츠스위프트에서 주니어개발자면 스위프트에 접근제어자에 대해 확실하게 인지하는 것이 좋다고 연사자분이 하신 말씀을 듣고 하는 접근제어자 정리

접근 제어자란?

Access Control
객체 지향 프로그래밍의 캡슐화를 지원하기 위해 접근 제어자를 제공한다

스위프트의 접근 제어자는 클래스뿐만 아니라 구조체, 열거형, 프로토콜 등에도 동일하게 적용되고
외부 코드로부터 내부 구현을 보호하고 안정성과 유지보수성을 높일수 있다.

Swift의 접근 제어자

public class PublicClass {
    open func openMethod() {} 
    // 다른 모듈에서 상속 받거나 오버라이딩 가능
    
    public func publicMethod() {} 
    // 다른 모듈에서 접근 가능하지만 오버라이딩 불가
    
    internal func internalMethod() {}
    // 기본 접근 제어자로 같은 프로젝트 내에서 접근 가능
    
    fileprivate func fileprivateMethod() {} 
    // 같은 파일 내에서만 접근 가능하며 파일 단위를 캡슐화할 때 사용.
    
    private func privateMethod() {} 
    // 선언된 곳 안에서만 접근 가능
}

모듈 : 외부 프레임워크, 라이브러리,다른 프로젝트

fileprivate, private는 왜 필요할까

당연히 캡슐화를 위해서 필요하다
외부에서는 알수도 없지만 내부에서만 보안적으로 쓸수 있게 하기 위해 존재한다
fileprivate 는 파일내에서만 쓰는 로직들이나 값들을 저장하고
private 해당 private를 선언한 스코프에서 사용한다

스위프트는 외부에서 왜 접근이 될까?

당연히 스위프트 개발할다보면 기능들을 외부로 뺴기 위해 패키지를 직접 만들기도하고 프레임워크들도 외부에서 접근을 하기에
접근이 가능하게 해줄 접근제어자들이 존재한다

+ Flutter의 접근 제어자

class ControlClass {
  void publicMethod() {} // 어디서나 접근 가능
  void _privateMethod() {} // 같은 라이브러리 내에서만 접근 가능
}

이름 앞에 밑줄(_)을 붙여서 private으로 만들고
private은 같은 라이브러리(패키지) 내에서만 접근 가능

0개의 댓글