Objective-C 데이터 캡슐화

모든 Objective-C 프로그램은 다음 두 가지 기본 요소로 구성됩니다.

  • Program statements (code) − 이것은 동작을 수행하는 프로그램의 일부이며 메서드라고합니다.

  • Program data − 데이터는 프로그램 기능의 영향을받는 프로그램의 정보입니다.

캡슐화는 데이터를 조작하는 데이터와 함수를 결합하고 외부 간섭 및 오용으로부터 안전하게 보호하는 객체 지향 프로그래밍 개념입니다. 데이터 캡슐화는 중요한 OOP 개념으로 이어졌습니다.data hiding.

Data encapsulation 데이터와이를 사용하는 기능을 번들링하는 메커니즘입니다. data abstraction 인터페이스 만 노출하고 구현 세부 정보를 사용자에게 숨기는 메커니즘입니다.

Objective-C는 다음과 같은 사용자 정의 유형 생성을 통해 캡슐화 및 데이터 숨김 속성을 지원합니다. classes. 예를 들면-

@interface Adder : NSObject {
   NSInteger total;
}

- (id)initWithInitialNumber:(NSInteger)initialNumber;
- (void)addNumber:(NSInteger)newNumber;
- (NSInteger)getTotal;

@end

변수 total은 비공개이며 클래스 외부에서 액세스 할 수 없습니다. 즉, 프로그램의 다른 부분이 아닌 Adder 클래스의 다른 멤버 만 액세스 할 수 있습니다. 이것은 캡슐화가 달성되는 한 가지 방법입니다.

인터페이스 파일 내의 메서드에 액세스 할 수 있으며 범위 내에서 공용입니다.

의 도움으로 작성된 개인 방법이 있습니다. extensions, 우리는 다음 장에서 배울 것입니다.

데이터 캡슐화 예

공용 및 개인 멤버 변수로 클래스를 구현하는 Objective-C 프로그램은 데이터 캡슐화 및 데이터 추상화의 예입니다. 다음 예를 고려하십시오-

#import <Foundation/Foundation.h>

@interface Adder : NSObject {
   NSInteger total;
}

- (id)initWithInitialNumber:(NSInteger)initialNumber;
- (void)addNumber:(NSInteger)newNumber;
- (NSInteger)getTotal;

@end

@implementation Adder
-(id)initWithInitialNumber:(NSInteger)initialNumber {
   total = initialNumber;
   return self;
}

- (void)addNumber:(NSInteger)newNumber {
   total = total + newNumber;
}

- (NSInteger)getTotal {
   return total;
}

@end

int main(int argc, const char * argv[]) {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];        
   Adder *adder = [[Adder alloc]initWithInitialNumber:10];
   [adder addNumber:5];
   [adder addNumber:4];
   
   NSLog(@"The total is %ld",[adder getTotal]);
   [pool drain];
   return 0;
}

위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.

2013-09-22 21:17:30.485 DataEncapsulation[317:303] The total is 19

위 클래스는 숫자를 더하고 합계를 반환합니다. 공개 회원addNum 과 getTotal 외부 세계에 대한 인터페이스이며 사용자는 클래스를 사용하기 위해이를 알아야합니다. 개인 회원total 외부 세계에는 숨겨져 있지만 수업이 제대로 작동하려면 필요합니다.

전략 설계

우리 대부분은 실제로 공개 할 필요가없는 한 클래스 멤버를 기본적으로 비공개로 만드는 비열한 경험을 통해 배웠습니다. 그냥 좋다encapsulation.

Objective-C를 포함한 모든 OOP (Object-Oriented Programming) 언어의 핵심 기능 중 하나이기 때문에 데이터 캡슐화를 이해하는 것이 중요합니다.