본문 바로가기

IT/Swift

[swift] Mutating, Memberwise Initializers, Access Control

[swift 기초문법] - mutating, Memberwise Initializers, 접근제어(Access Control)

 

 

 

< mutating 키워드 >

구조체와 열거형같은 값타입(value type)은 속성값을 바꿀 수 없습니다.

이런 조건 하에 속성값을 바꾸고 싶으면 mutating이라는 키워드를 앞에 붙여서 메소드를 선언하면 속성값을 바꿀 수 있습니다.

 

struct testStruct{

    var total = 0

    mutating func addValue(_ value: Int){

        total+=value

    }

}

 

 

 


<멤버와이즈 이니셜라이져 (Memberwise Initializers)>

프로퍼티의 이름으로 매개변수를 가지는 이니셜라이져로써

구조체는 사용자 정의 이니셜라이저를 구현하지 않으면 멤버와이즈 이니셜라이져를 자동으로 제공합니다.

클래스는 지원하지 않습니다.

 

<초기화 위임>

코드의 중복 사용을 피하기 위해 이니셜라이저가 다른 이니셜라이저에게 일부 초기화를 위임하는 것을 말합니다.

이니셜라이져 안에서만 사용 가능합니다

 

self.init

 

 

접근제어(Access Control)

 

1. public (공개 접근 수준) : 

다가능

 

2. open (개방 접근 수준) : 

클래스와 클래스의 멤버에서만 사용 가능하다. 

open으로 정의된 클래스는 해당 클래스가 정의된 모듈 밖의 다른 모듈에서도 상속 가능하다.

open으로 정의된 클래스 멤버는 해당 멤버가 정의된 모듈 밖의 다른 모듈에서도 재정의 가능하다.

open으로 정의를 했다는 것은 그 클래스를 다른 모듈에서도 부모 클래스로 사용하려고 했다고 할 수 있다. 

 

3. internal (내부 접근 수준) : 

모든 요소의 기본 수준으로 생략되어있으면 내부 접근 수준이다.

외부 모듈에서는 접근 불가능하다.

 

4. fileprivate (파일외부비공개 접근수준)

구현된 소스파일 내부에서만 사용할 수 있다.

 

5. private (비공개 접근수준) : 

기능이 정의되고 구현된 범위 내에서만 사용 가능

 

 

 

 

Module

Swift에서의 모듈은 코드의 묶음 단위로 프레임워크, 라이브러리, 애플리케이션 처럼 배포할 코드들의 묶음을 나타낸다. 

하나의 프레임위크는 하나의 모듈이고 Xcode로 만든 프로젝트 역시 하나의 모듈이다.

보통 import를 통해 외부 모듈을 사용한다.

 

Access Levels

Swift는 코드 내의 요소에 대해 다섯가지 접근 레벨을 제공한다.

이 접근 레벨은 요소가 정의 된 소스 파일과 관련이 있으며, 또한 소스 파일이 속한 모듈과도 관련이 있다.

 

키워드접근수준범위

open 개방 접근 수준 모듈 외부에서도 접근 가능
public 공개 접근 수준

모듈 외부에서도 접근 가능

internal 내부 접근 수준 하나의 모듈 내부에서만 접근 가능
fileprivate 파일내부 접근 수준 하나의 파일 내에서만 접근 가능 
private 비공개 접근 수준 정의한 블록 내부에서만 접근 가능 

 

 

 

#swift 기초

#swift 강의

#ios programming

'IT > Swift' 카테고리의 다른 글

[swift] ARC(Automatic Reference Counting)  (0) 2019.08.21
[swift] Closure, Capture list  (0) 2018.04.02
[swift] Property  (0) 2018.03.12
[swift] Optional, Optional Chaining  (0) 2018.03.08
[swift] Method, Struct, Class  (0) 2018.03.07