# 객체지향의 개념
# 1. 객체지향(Object-Orientation)
# ⏹ 객체지향이 뭔데?
- 시스템 모델링의 기술
- 여러 객체가 서로 상호 작용하는 시스템
- 객체지향 모델은 객체끼리 interaction 한다.
💡 Key Word
System, Model, Interaction, objects
- 절차지향이 아닌 객체를 중심으로 문제를 해결하면 더 좋음
- 그래서 C++, C#도 생김
- 시스템 : 해결해야할 문제에 대한 포괄적인 개념!
# 2. 모델(Model)이란
- 어떤 것에 대한 추상적인 개념!
- 무엇을 개발하기 전에 그 무엇에 대해 이해할 수 있는 것이 목적
- 가상일 수 있고 물리적일 수 있음!
# ⏹ 예를 들면
- 모델 : 사람 → 객체(Object) : 영준
- 모델 : Car → 객체(Object) : 마세라티
- 두 Object는 **상호작용(interaction)**할 수 있다.
- 영준이가 차를 탄다.
💡 객체 지향 모델링은 사람이 생각하는 방식과 유사하다!
# 3. 객체지향의 장점
# ⏹ 객체지향 장점은?
- 사람의 생각과 같은 현실에 매핑 됨
- 객체 지향 방식으로 생각하면 쉽게 문제를 해결할 수 있음
- 그래서!
- 개발하기 쉽고
- 이해하기 쉽다
# 4. 객체(Object)란
# ⏹ 객체라는건 정확히 뭔데?
2가지 형태로 Object가 존재한다.
- 물리적인 유형
- 사람, 자동차 등
- 비물리적인 유형
- 시간, 날짜 등
# ⏹ 어떻게 구성되어있어?
3가지 기본 구성이 있음
- 상태 (State) - Attributes -
변수
- 행동 (behaviour) - Operations -
함수
- 유일한 정체성 (Unique Identity)
💡 Example
State(Attributes) : Name, Age
behaviour(Operations) : Walks, Eats
Identity : 주민번호
# 5. 정보 은닉(Information Hiding)
# ⏹ 정보 은닉
- Information is stored within the object
- 객체 내부에 정보가 저장된다.
- It is hidden from the outside world
- 외부로부터 숨겨짐
- It can only be manipulated by the object itself
- 입력과 출력에 대해 객체 자체에서 조작할 수 있음
💡 구현의 세부 사항을 몰라도 된다는 의미다
이는 큰 프로젝트에서 협업할 때 엄청 중요한 설계임!
ex) REST API
# ⏹ Getter와 Setter
- 직접적으로 접근할 수 없고 get, set을 사용해야함
# ⏹ 정보 은닉의 장점!
- Simplifies the model by hiding implementation details
- 구현 세부 정보를 숨겨 모델을 단순화한다.
- It is a barrier against change propagation.
- 공개할 정보와 숨길 정보를 나눠준다.
--
# 6. 캡슐화(Encapsulation)
정보은닉과 캡슐화의 차이를 정확히 이해해보자.
# ⏹ 캡슐화
- 개체 내부에서 데이터와 동작이 긴밀하게 결합된다.
- Data
(=변수)
and behaviour(=함수)
are tightly coupled inside an object
- Data
- 운영의 정보 구조와 구현 세부 정보는 모두 외부로부터 숨겨져 있다.
- Both the information structure and implementation details of its operations are hidden from the outer world
캡슐화는 Data와 Behaviour가 객체안에 단단히 결합되어있다.
- 객체지향에 대해 생각해보자.
- Procedural(절차지향) 프로그래밍과 비교하면
- 우리가 솔루션을 디자인하면 몇가지 기능을 정의해야 할 것 이다(함수/변수)
- 대부분의 경우 함수와 변수가 논리적으로 연결되고 정의된다.
- 이 때 함수안에서 새로운 변수를 정의하고 return 할 수 있는데
- 이 때 함수(행위) ↔ 변수(data)가 밀접하게 연관되어 있다고 한다.
- 절차지향(Procedural) 방식은?
- 기능적으로 연관이 아무리 커도 함수와 변수를 함께 결합할 수 없다.
- 왜냐하면 C언어에는 Structure(구조)가 있기 때문에 변수와 함께 그룹화 할 수 있지만 함수와 변수를 함께 그룹화될 수 없다.
객체에는 두가지가 있다.
- Behaviour (함수) = Method = function
- Attribute (변수)
- Behaviour = 함수로 정의해서 객체의 연산이나 동작을 작성
- Attribute = 변수로 정의해서 객체의 상태를 작성
💡 이렇게 변수와 함수를 결합할 수 있는 방법이 캡슐화의 주 개념이다.