OOP
Object Oriented : "객체 위주"라고 생각하는 것이 편하다.
Object Oriented Programming : "객체 위주로 프로그래밍"한다.
KeyWord#
#Class(클래스)
#Object(오브젝트,객체)
#Encapsulation(캡슐화)
#Inharitance(상속성)
#Polymorphism(다형성)
Class = 추상
1. Class(클래스)는 표현 대상의 특징에 대해 서술한다.
2. Object(오브젝트)는 클래스의 instance이다. 즉, 클래스가 실체로 만들어진 것.
class = concept(개념) = type(타입)
object = instance(실체) = variable(변수)
Object = 실체(instance)
1. 오브젝트는 데이터와 데이터의 조작의 묶음, 그 모양은 클래스에 서술 돼 있음.
Encapsulation(캡슐화)
1. '데이터'와 '데이터를 다루는 방법'을 묶는 것, 그리고 묶어서 이름을 부여하는 것.
즉 , 추상화(abstraction)
2. Data + operation on data
Inharitance(상속성)
1. 하나의 클래스가 가지고 있는 특징(data, operation)들을 그대로 다른 클래스가 물려 받는 것.
2. 계층의 의미도 가짐.
Polymorphism(다형성)
1. 다형성(polymorphism; 폴리모피즘)은 "여러 형태"를 나타내는 그리스어.
2. 상속성의 계층을 따라서 각 클래스에 동일한 이름의 메소드를 사용할 수 있는 것.
즉 , 같은 명령을 각기 다른 오브젝트에 줄수 있다는 뜻.
장점
- 자연스런 모델링 (Natural Modeling of Problem)
- 생산성 향상 (Higher Productivity), 직관적인 코드 분석 가능;
- 점진적 개발 (Incremental Development)
- 견고한 의미적 모델링 (Stable Semantic Modeling)
- 명확한 인터페이스 기술 (Clear Interface Description)
- 보안 (Secure System)
- 유지보수의 용이성 (Better Maintainability)
위의 장점들을 관통하는 객체 지향 프로그래밍의 중요한 특성은 강한 응집력(Strong Cohesion)과 약한 결합력(Weak Coupling)을 지향한다는 점이다.
소프트웨어 공학에서 말하는,
응집력(cohesion) : 프로그램의 한 요소가 해당 기능을 수행하기 위해 얼마만큼의 연관된 책임과 아이디어가 뭉쳐있는지를 나타내는 정도. 프로그램의 한 요소가 특정 목적을 위해 밀접하게 연관된 기능들이 모여서 구현되어 있고, 지나치게 많은 일을 하지 않으면 그것을 응집력이 높다고 표현한다.
결합력(coupling) : 프로그램 코드의 한 요소가 다른 것과 얼마나 강력하게 연결되어 있는지, 얼마나 의존적인지를 나타내는 정도. 결합력이 낮다는 것은 한 요소가 다른 요소들과 관계를 크게 맺고 있지 않은 상태를 의미한다.