http://pdf-world.net/download.php?id=33940 을 번역한 글입니다.
(일부 오역이 있을 수 있습니다.)
객체 지향 프로그래밍 컨셉
아래의 네가지 중요한 컨셉들은 객체 지향 프로그래밍의 패러다임을 구성합니다.
1. 객체 지향 프로그램들은 객체의 집합들로 만들어진다.
2. 이 객체들은 프로그램의 작업을 수행하기위해 다른 객체들과 소통한다. 이 소통은 메세지를 통해서 이루어진다.
3. 객체는 클래스라고 불리는 템플릿으로 정의된다.
4. 클래스들은 부모 클래스(super class)로 부터 그들의 행동 일부를 상속받을 수 있다.
객체
학생, 비행기, 바위, 강사 등 : 현실 세계는 객체로 구성되어 있습니다.
이들은 모두 상태와 행동을 가집니다.
소프트웨어 객체(혹은 단훈한 객체)는 소프트웨어 값의 묶음(상태)와 관계된 메소드들(행동)이 있습니다.
메소드는 단순히 소프트웨어 객체에 속한 함수 또는 과정입니다.
(조건 메소드는 객체 지향 프로그래밍에서 매우 일반적입니다.)
객체의 사용자는 자신의 공개 애플리케이션 프로그래밍 인터페이스(API)를 통해 액세스 할 수 있습니다. API의 공개된 메소드(그리고 일부 변수들)들은 객체의 내부 상태를 변경할 수 있습니다.
사용자는 직접적으로 객체의 상태를 변경할 수 없습니다.
"데이터 감추기" / "캡슐화"
"카운터" 객체. 이 모델은 숫자의 업/다운 카운터.
* 2개의 숨겨진 상태
"currentCount", "countDir"
* API를 구성하는 3개의 공개적으로 접근 가능한 메소드들
"setCountDirection", "clearCounter", "applyClock".
API가 정의되면, 언제든지 내부 구현을 변경할 수 있습니다. API는 객체 디자이너와 객체 사용자 사이의 "약속"입니다.
"은행계좌" 객체. 은행 계좌 객체들.
* 하나의 숨겨진 상태:
"currentBalance", 계좌의 금액
* 하나의 숨겨진 메소드: "calcInterest".
* API를 통해 만들어진 2개의 공개적인 메소드:
"depositCash", "withdrawCash"
사용자는 두 가지 공개적으로 액세스 할 수 있는 메소드를 통해 금액을 수정할 수 있습니다. 빈 계정,등등의 상황으로부터 인출을 방지하기 위해 검사를 할 수 있습니다.
객체의 이점
소프트웨어에 관련된 변수와 메소드의 캡슐화는 두가지 주요한 이점을 가지는 강력하면서도 간단한 방법입니다 :
1. 모듈화: 객체를 위한 소스코드는 다른 오브젝트의 소스코드로부터 독립적으로 쓰여지고 유지됩니다. 또한 객체는 쉽게 시스템에 접근할 수 있습니다.
2. 정보 은닉 : 객체가 다른 객체와 통신하는 데 사용할 수있는 공용 인터페이스(API)가 있습니다. 그러나 객체는 다른 객체에 영향을 주지 않고 언제든지 변경가능한 개인적인 정보와 메소드를 지닐 수 있습니다.
메세지
소프트웨어 객체는 서로 메시지를 전송하여 상호 작용하고 통신합니다.
만약 객체 A가 객체 B의 메소드중 하나를 수행하길 원한다면, A는 B에게 동작을 요청하는 메시지를 보냅니다.
때때로 정확히 동작을 수행할 수 있도록 수신 객체에 대한 추가 정보가 필요합니다.
이 정보는 메서드에 매개 변수로 메시지와 함께 전달됩니다.
메세지는 3가지 부분으로 구성됩니다.
1. 메시지가 처리되는 객체 (내 "BankBalance"개체)의 이름
2. 수행 할 메소드의 이름 (depositCash)
3. 필요한 매개 변수 (예를 들어, 400)
Classes
프로그램은 일반적으로 같은 종류의 많은 Object들을 필요로 합니다. 수많은 것들을 저장하는 프로그램은 다른 고객들에 의한 많은 잔고 Objects들을 가지고 있습니다. 그러나 모든 함수와 변수들은 같은 패턴들을 공유하고 있습니다.
이 말에서 이야기하고 싶은 것은, Class Instance에 존재하는 Object들은 각각 독립적인 ojbect로 동작한다는 것입니다.
모든 Ojbect들은 독립적이지만 그들은 같은 공간속에 있습니다.
우리는 그들이 생성과 어떠한 틀을 공통적으로 가지고 있다는 것을 알았다. 여기서 '생성'이란 말은 Class를 의미합니다.
클래스는 청사진입니다. 클래스는 모든 종류의 함수와 변수들을 정의할 수 있습니다.
(일반적으로) 위에서 말한 클래스는 그 스스로 object는 아닙니다. 새로운 객체를 선언하기위해 당신은 2개의 절차를 밟아야 합니다.
1. 클래스에서 object들을 정의하고 그것들은 변수와 함수에 사용해야합니다.
2. 예를 들어 클래스는 ojbect들을 만들 수 있습니다. 클래스를 만들어 그 안에 새로운 Object들을 만들 수 있는 것입니다.
모든 새로운 Class들은 변수들을 가지게 됩니다. 모든 object들은 선언된 변수들을 이용하여 함수를 작성해야 합니다.
또한 클래스들은 Class함수와 Class변수에 의해 정의됩니다.
1. 클래스 변수는 하나지만 모든 클래스에서 공유가 가능합니다.
클래스 변수는, 프로그램 내에서 그 변수를 출력할 수 있습니다. 프로그램은 오로지 하나의 표준 출력 스트림을 가지며 이 것이 변수 사용의 가장 좋은 예입니다.
"Hello world" 는 class 변수 하나만을 출력합니다. 클래스의 "println"라는 함수를 사용해서 출력을 하게 됩니다.
2. 클래스가 생성되는 클래스 함수는 하나입니다.
다음 "Hello World"예제 내에 "main"함수를 보면 클래스의 instance를 만들기 위해 사용되었습니다.
Class Diagrams
1. "Doughnut Diagrams,"
2. Object Modeling Technique (OMT) diagrams,
3. Unified Modeling Language (UML) diagrams.
상속
OOP에서는 클래스들이 각각 마다 다른 의도를 가지고 작성이 됩니다.
그들은 다른 클래스의 attributes들을 상속받을 수 있으며, 필요해 의해 특수화가 될 수 있습니다.
위 그림은 matrix라는 클래스를 아래에 있는 클래스들이 상속을 받은 그림입니다.
아래에 있는 클래스들은 자신의 부모격인 Matrix class에 있는 모든 함수와 변수를 사용할 수 있습니다. 그러면서도 아래에 있는 클래스들은 각각 자기가 하고자 하는 행동을 함수로 따로 더 작성할 수가 있게 됩니다.
상속을 하게 됨으로써 얻는 이득
1. 서브클래스들이 공통적으로 사용되는 행동을을 슈퍼클래스에 기술할 수 있습니다. 상속을 이용하면 부모클래스에 있는 코드들을 재사용할 수 있게 됩니다.
2. 프로그래머들은 슈퍼클래스를 "Abstract Class(추상 클래스)"로 만들 수 있습니다. 추상클래스에는 제네릭한 행동(함수)를 정의할 수 있습니다. 이렇게 abstract한 함수를 기술하게 되면 각 클래스들은 공통의 함수를 사용하게 되지만 각 클래스마다 다른 행동을 정의할 수 있습니다. (이를테면 각 클래스들이 가진 모델이 다를 때, 슈퍼클래스에서는 Generic타입으로 모델을 사용하는 함수를 받게되고 각 클래스에서 abstract메소드들을 이용해 각 클래스의 모델에 맞도록 사용이 가능합니다.)
'옛글 > 번역본' 카테고리의 다른 글
프로그래밍 Design Pattern 이해하기 - 1 스트래티지패턴 (0) | 2014.07.29 |
---|---|
Java Generic Programming Guide #1 (0) | 2013.11.14 |
안드로이드 아키텍쳐 (Analysis of the Android Architecture) #2-2 안드로이드 구조 (3) | 2013.10.25 |
안드로이드 아키텍쳐 (Analysis of the Android Architecture) #2-1 안드로이드 구조 (0) | 2013.10.15 |
안드로이드 아키텍쳐 (Analysis of the Android Architecture) #1 안드로이드 개요 (2) | 2013.10.14 |