[Objective-C] 객체 기반 소프트웨어 작성
출처 : OS X 구조를 이해하면서 배우는 Objective-C Chap 1.
Notice : 정리자(돼지왕 왕돼지)가 remind 하고 싶은 내용이나 모르는 내용 기반으로 정리하는 것이기 때문에 구체적인 내용은 책을 사서 보시기를 권장드립니다.
1.1 객체 개념
* 1.1.1. 소프트웨어를 기능 중심으로 설계 했을 때의 문제점
-
기능은 상당히 쉽게 바뀔 수 있다.
따라서 기능 중심으로 설계한 소프트웨어는 변경에 취약해서 유지 보수하는 데 비용이 많이 든다.
* 1.1.2. 객체로 모델화
-
객체를 사용해 작성한 모델은 사람이 생각하는 개념 사이의 관계를 반영한 것이므로 기능을 변경하더라도 큰 영향을 받지는 않는다.
* 1.1.3. 메세지로 통신
-
메시지는 객체 사이의 통신을 위한 유일한 수단이다.
-
객체는 메시지를 받으면 메시지 내용에 따라 처리를 하고 결과값을 돌려준다.
메시지는 인수로 객체(또는 값)을 함께 전달할 수 있다.
-
메시지를 보내는 객체가 센더(sender: 송신자) 이고, 받는 객체가 리시버(receiver: 수신자)이다.
* 1.1.4. 모델의 추상화
-
객체지향 분석(OOA : Object-Oriented Analysis) : 객체 개념으로 어떤 소프트웨어를 만들까 분석하는 것.
-
객체지향 설계(OOD : Object-Oriented Design) : 소프트웨어를 객체 집합이라고 생각해서 모듈 구성을 정하고 소프트웨어 설계를 하는 것.
-
객체지향 프로그래밍(OOP : Object-Oriented Programming) : 객체지향 개념을 프로그래밍 단계에서 사용하는 것.
-
객체지향 인터페이스 : 부품과 프로그램 관계를 객체 사이의 메시지 통신으로 생각해서 구성한 인터페이스
-
객체지향에서는 요구 분석, 설계, 프로그래밍에서 사용하는 모델에 일관성이 있어서 상호 관계를 이해하기 쉽고 변경이나 확장이 용이하다.
-
추상화 (Abstraction) : 문제에서 관계없는 정보를 빼고 대상의 (필요한) 본질만 추려내는 것.
1.1.5. 객체 속성
-
속성을 나타내는 다른 객체의 참조(포인터)를 저장한 장소가 인스턴스 변수(instance variable, 약자로 ivar) 이다.
1.1.6. 클래스
-
같은 변수 및 메서드를 가진 객체 “틀” 을 클래스(class) 라고 부른다.
-
객체 틀인 클래스에서 구체적인 객체를 만드는 것이 구체화 또는 인스턴스화(instantiation)이다.
클래스에서 구체화해서 만든 객체를 인스턴스 객체(instance object) 또는 간단히 인스턴스라고 한다.
1.2. 모듈과 객체
* 1.2.1. 소프트웨어 모듈
-
모듈은 특정 역할을 수행하며 다른 부분에 영향을 주지 않고 독립적으로 동작하며 교체할 수 있다.
기능을 제공하는 단위로 소프트웨어를 독립적으로 구성하는 각 부분을 모듈이라 한다.
* 1.2.2. 독립성 높은 모듈
-
“독립성 높은 모듈을 조합해서 소프트웨어를 구성하는 방법이 좋다."
모듈에서 독립성이란 모듈 내부 구현 변경이 다른 모듈에 영향을 주지 않는 것이다.
-
모듈에는 어떤 기능(What)을 제공하는가라는 측면과 그것을 어떻게(How) 구현하는가라는 측면이 있다.
이런 What 과 How 를 명확히 구분하여, What 만 제공하는 모듈이 독립성이 높은 모듈이다.
-
독립성이 높은 모듈은 그것이 어떤 기능(What)을 제공하는가만 알면 사용할 수 있기에 규모가 큰 소프트웨어를 만들기 쉽다.
그 기능을 어떻게(How) 구현하는가는 중요하지 않다. ( 사용자 입장에서 )
따라서 제공하는 기능은 같지만 성능이 좀 더 좋은 모듈이 있다면 구현 방법에 관계없이 교환할 수 있다.
어떤 모듈에 문제가 생겼을 경우에도 그 모듈만 고쳐서 새로운 걸로 바꾸면 되므로 소프트웨어의 신뢰성과 보수성이 높아진다.
* 1.2.3. 모듈 정보 은폐
-
독립성이 높은 모듈 작성의 원칙은..
1. 모듈을 사용하기 위한 최소한의 정보만 모듈 외부에 제공
2. 그 기능을 어떻게 구현하는지는 외부로 노출하지 않는다.
-
위의 원칙을 정보 은폐(information hiding) 또는 캡슐화(encapsulation)이라고 한다.
-
모듈 쪽에서 보면 제공할 기능만 구현되어 있으면 되므로, 예를 들어 더 빠른 알고리즘을 찾았다면 그걸로 바꾸거나 메모리 효율을 먼저하고 싶을 때 다른 구현 방법을 사용한다든지 하는 식의 변경이 쉽다.
또한 모듈을 사용하는 쪽에서도 내부 구현까지 보지 않고 제공된 기능만 알면 사용할 수 있으므로 모듈의 재이용성이 편리해지고 소프트웨어 부품화도 쉬워진다.
* 1.2.4. 클래스 정의와 인터페이스
-
객체지향 언어 프로그램에서 클래스가 프로그램을 구성하는 단위인 모듈이다.
* 1.2.5. 메시지 송신 구현
* cf : C 언어의 새로운 규격
-
K&R C 라고 하면 개정 전 1판의 C 언어 작성법이다.
여기서 K&R 은 C 언어 창시자인 커니핸(Kernighan)과 리치(Rithchie) 이다.
-
1989년~1990년에 걸쳐 ANSI (미국 규격협회)와 ISO (국제표준화기구)는 C 언어의 새로운 규격을 공개했다.
이것을 ANSI C 라고 한다.
-
1999년에 ISO 는 기능을 확장한 표준 규격을 공개했는데, 이것을 C99 라고 한다.
현재 대다수 컴파일러에서는 새로운 기능인 C99 을 사용할 수 있다.
-
Mac OS X 에서 제공하는 컴파일러는 GNU 프로젝트인 gcc 를 바탕으로 만들었지만 Xcode 4.2 이후에는 LLVM 컴파일러인 clang 을 사용한다.
어느 쪽 컴파일러도 C, Objective-C, C++ 을 컴파일해서 Mac OS X, 아이폰, 아이패드 앱을 만들 수 있다.
clang 에서는 C99 에 있는 기능을 대부분 구현하고 있으므로 C 프로그램을 만들 때 뿐만 아니라 Objective-C 프로그램을 만들 때에도 C99 에 있는 새로운 기능을 사용할 수 있다.
또한 블록 객체처럼 애플 사만의 독자적인 확장 기능도 있다.
'프로그래밍 놀이터 > iOS' 카테고리의 다른 글
[Objective-C] 상속과 클래스 (0) | 2017.12.25 |
---|---|
[Objective-C] Objective-C 프로그램 (0) | 2017.12.24 |
[xcode] suppressing warning - incompatible pointer types sending … (0) | 2017.12.22 |
[ios] TableView 의 Height dynamic 하게 바꾸기 (0) | 2017.12.21 |
[ios] UITextView dynamic height change (0) | 2017.12.20 |
댓글