본문 바로가기
프로그래밍 놀이터/iOS

[Objective-C] 객체 기반 소프트웨어 작성

by 돼지왕 왕돼지 2017. 12. 23.
반응형

 [Objective-C] 객체 기반 소프트웨어 작성



출처 : OS X 구조를 이해하면서 배우는 Objective-C Chap 1.

Abstraction, ANSI C, C, c 언어 역시, C++, C99, clang, c언어 규격, encapsulation, gcc, gcc llvm, gnu, information Hiding, instance, instantiation, ivar, k&r c, LLVM, Mac OS X, object-oriented analysis, object-oriented design, Object-Oriented Programming, Objective-C, OOA, OOD, OOP, receiver, Remind, sender, what 만 제공하는 모듈, [Objective-C] 객체 기반 소프트웨어 작성, 객체 개념, 객체 모델화, 객체 속성, 객체지향 분석, 객체지향 설계, 객체지향 인터페이스, 객체지향 프로그래밍, 기능 중심, 도서 정리, 독립적, 리시버, 메시지 송신 구현, 모듈 정보 은폐, 모듈과 객체, 센더, 소프트웨어, 소프트웨어 모듈, 송신자, 수신자, 인스턴스, 인스턴스 변수, 인스턴스화, 정보 은폐, 최소 공개, 추상화, 캡슐화, 클래스, 클래스 정의와 인터페이스


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 에 있는 새로운 기능을 사용할 수 있다.

또한 블록 객체처럼 애플 사만의 독자적인 확장 기능도 있다.





반응형

댓글