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

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

전략 설계

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

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