# 객체지향의 개념

# 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
  • 운영의 정보 구조와 구현 세부 정보는 모두 외부로부터 숨겨져 있다.
    • 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 = 변수로 정의해서 객체의 상태를 작성

💡 이렇게 변수와 함수를 결합할 수 있는 방법이 캡슐화의 주 개념이다.

Last Updated: 6/18/2023, 2:13:15 PM