객체 지향 개념
사람은 포유류에 속하는 '동물'이다.
사람이 다른 동물과 구별되는 고유한 특징은?
'상징 체계'를 만들고 공유하는 능력 - 언어, 음악, 문자, 수학 등등..
사람은 상징 체계를 만들고 발전시켜서 다음 세대에게 물려준다!
이것을 가능하게 만든 것이 바로 '추상화'(abstraction) 능력
즉, 추상화는 대상에서 특징만을 뽑아낸 것을 말한다.
인간은 '추상'을 만들고, 공유하고, 발전시키는 고유한 능력이 있다.
객체 지향(Object Oriented)이란?
여기서 Oriented는 '위주' 혹은 '선호'에 가깝다. (방향성 X)
따라서 '객체 위주'라고 이해하는 것이 편함
흔히 약자로 많이 불리는 OOA, OOD, OOP와 같은 것들은 이렇게 정리할 수 있다.
OOA(Object Oriented Analysis) : 객체 갖고 분석하기
OOD(Object Oriented Design) : 객체 갖고 설계하기
OOP(Object Oriented Programming) : 객체 갖고 프로그램하기
즉, Object Oriented란 '객체를 갖고 무언가 하자'는 것!
객체지향 키워드
클래스(class)
= 추상(abstract)
표현 대상들의 공통적인 '특징을 서술'(추상)한 것
추상 : 사용자가 구체적인 내용을 생각하지 않고도 사용할 수 있는 기능
프로시져 추상화 : 함수
데이터 추상화 : 구조체, 배열, 포인터
오브젝트(object)
= 클래스의 인스턴스(instance)
즉, 클래스가 실체로 만들어진 것을 말함
같은 의미들
attribute = data = member variables = state = field
behavior = operation = member function = method
클래스 = 개념 = 타입
객체 = 실체 = 변수
//클래스
class Dog {
...
}
//오브젝트
Dog d;
오브젝트는 데이터와 데이터에 대한 조작을 묶어놓은 것
오브젝트 모양은 클래스에 서술되어 있음
다음 3가지를 지원하는 언어를 '객체지향 프로그래밍 언어'라고 말한다.
캡슐화(encapsulation)
'데이터와 데이터를 다루는 방법'을 묶어 놓은 것
관련있는 것을 묶어서 정리하는 것을 말한다.
class Dog{
int x, y; // 데이터
public:
void move(int, int); // 다루는 방법
void bark(); // 다루는 방법
};
상속성(inheritance)
하나의 클래스가 가지고 있는 특징들(데이터+다루는 법)을 그대로 다른 클래스가 물려 받는 것
물려받으면 재사용이 가능하고, 새로 다루는 법을 추가할 수 있는 유연성도 갖춘다.
다형성(polymorphism)
상속성의 계층을 따라서 각각의 클래스에 한가지 이름을 줄 수 있는 것
'각 클래스에 동일한 이름의 메소드를 사용할 수 있는 것'을 말함
즉, 같은 명령을 각기 다른 오브젝트에 줄 수 있는 것!!
Dog d;
d = new Poodle()
d.bark() // 월월
d = new Bulldog()
d.bark() // 왈왈
객체지향은 프로그래밍 패러다임 중 하나
구조적 프로그래밍 : 파스칼, C
객체지향 프로그래밍 : C++, 자바
선언형 프로그래밍 : SQL
객체기반 프로그래밍 : 자바스크립트
위에서 말했던 OOP가 바로 객체지향 프로그래밍을 말하며, 자바와 C++이 여기에 속한다.
객체 지향의 장점
자연스러운 모델링
생산성 향상
점진적 개발
보안
유지보수의 용이성
구조적 / 객체 지향의 분석과 설계의 차이점
구조적(Structured) | 객체지향(Object-Oriented) |
---|---|
기능적 분할 | 객체와 객체간 역할/관계 중심 |
절차 중심 | 객체 중심 |
처리 위주, 데이터가 드러남 | 데이터 감추기, 모듈화 |
단일성, 순차적 | 재사용성, 순서없음 |
객체 지향 요약
식별하고 일반화 하고 (object, class),
대상들 간의 관계를 설정하고 (inheritance, embedded),
상호작용하도록 한다 (behavior)
대표적 개발 모델으로는 '폭포수 모델', '나선형 모델' 등이 있다.
끝으로 객체 지향이란 한줄로 아래와 같이 정리할 수 있다.
"사람이 세계를 보고 이해하는 방법을 흉내 낸 방법론"
'정보' 카테고리의 다른 글
[Git] git bash 사용법 (2) | 2019.05.18 |
---|---|
삼성 청년 소프트웨어 아카데미(SSAFY) 1기 합격 (60) | 2018.12.02 |
[git] error: failed to push some refs to (0) | 2018.10.08 |
Regex (정규표현식) (0) | 2018.08.31 |
구글 클라우드 플랫폼(GCP)으로 NVIDIA GPU 사용해보기 (5) | 2018.08.14 |