BIBI BLOG

[Objective-C]인스턴스 변수의 접근 권한 및 속성(propert) 본문

iOS/Objective-c

[Objective-C]인스턴스 변수의 접근 권한 및 속성(propert)

BIBI⭐️ 2020. 9. 30. 18:03
728x90

■인스턴스 변수의 접근 권한

Objective-C에는 접근 권한과 관련된 '컴파일러 지시문(compiler directive)'라고 존재하는데, 이를 사용하여 인스턴스 변수의 접근권을 설정할 수 있습니다. 준비되어 있는 접근 권한 컴파일러 지시문에는 이하와 같은 것이 있습니다.

@private
외부로부터 완전히 은폐되어 사용할 수 없습니다. 클래스 내에서만 이용하는 경우에 사용합니다.

@protected
이 클래스와 서브 클래스 내에서만 사용할 수 있습니다.

컴파일러 지시문을 지정하지 않으면 기본적으로 @protected와 같기 때문에 @protected 쓰지 않아도 됩니다.

@public
외부에 공개되어 자유롭게 이용할 수 있습니다. 가장 제약이 없습니다.

@interface 클래스 {
    @public
    ... public으로 변수 선언 ...
    @protected
    ... protected하는 변수 선언 ...
    @private
    ... private으로 변수 선언 ...
}

클래스의 인스턴스 변수에 액세스하려면 「->」를 사용합니다. 

TestClass* obj = [TestClass myTestClass];
obj->message = @"Test Message";

■속성(propert)

속성은 인스턴스 변수에 액세스할 수단을 제공하는 '접근자 메소드 자동 구현 기능' 입니다.
※객체가 자신의 내부 속성값에 대해 읽거나 쓰게 하기 위해 제공하는 메소드를 접근자(accessor) 메소드라고 합니다.

@property (속성) 타입 속성명;
종류 옵션 설명
메소드 이름 지정 getter=[메소드 이름] getter/setter 메소드 함수 이름을 별도로 지정
setter=[메소드 이름]
gatter/setter 지정 readonly 읽기 전용
readwrite 일기쓰기,기본값
값 설정방법 weak 약한 참조,[removeFromSuperview]이용해 제거하면 메모리도 해제된다.
객체를 소유하지 않고 주소만 가지는 포인터 개념.
strong 강한 참조,[removeFromSuperview]이용해 제거해도 메모리는 해제되지 않는다.
객체를 소유하여 레퍼런스 카운터가 증가하는 프로퍼티.
copy 멤버변수가 인스턴스 포인터 값을 가질때, 인스턴스 복사
동시성 atomic getter/setter는 선형 스레드를 통해 독립 실행
nonatomic getter/setter는 다중 스레드를 통해 동시 실행 가능

※atomic 한 접근은 해당 값에 쓰기를 할 때 락을 걸어서 여러 스레드에서 동시에 액세스할 때 예기치 않게 데이터가 파괴되는 상황을 방지할 수 있지만 그만큼 로드도 많이 걸리게 되므로 특별한 경우를 제외하고는 잘 쓰이지 않는다.
※iOS5이후로 ARC로 인해 retain과assign프로퍼티는 사용되지 않는다.

참고 : bluefox124.wordpress.com/2018/05/03/objective-c-swift-6%ec%9e%a5-%ed%94%84%eb%a1%9c%ed%8d%bc%ed%8b%b0property-%ec%86%8d%ec%84%b1/

728x90

'iOS > Objective-c' 카테고리의 다른 글

[Objective-C]NSDate와 날짜다루기  (0) 2020.10.05
[Objective-C]NSMutableString다루기  (0) 2020.10.02
[Objective-C]NSString다루기  (0) 2020.10.01
[Objective-C]클래스 만들기  (0) 2020.09.29
Objective-C란?  (0) 2020.09.28
Comments