OOP 이론 1편(OOP, 객체, 클래스, 캡슐화)

서문🌙·2023년 3월 8일
0
post-thumbnail

0. Functional Programming(함수형 프로그래밍)

- Program = Data + Functions(procedures)
함수형 프로그래밍은 프로그램을 데이터와 함수(프로시저)의 결합으로 정의한다.

- Function(input, output, side-effect)
함수는 하나 이상의 입력을 받아들이고, 입력에 대한 결과를 반환하며, 외부 상태를 변경하지 않고 동일한 입력에 대해 항상 동일한 결과를 반환한다.


1. Object-Oriented Programming (객체 지향 프로그래밍)

- Program = object which interact with each other
객체지향 프로그래밍은 프로그램에 상호작용 하는 객체들로 정의한다.

- Object(객체) = Data(state) + Functions(behavior)

- Data(State)
객체는 상태를 나타내는 데이터를 포함하는데, 이는 객체의 속성이며, 상태를 결정한다.

- Function(Behavior)
객체는 특정 동작을 정의하는 함수를 포함한다. 이러한 함수는 객체의 행동을 결정하고, 객체 간의 상호작용을 관리한다.

  • 각 객체는 각자의 상태(state)를 가진다.
  • 각 객체는 각자의 동작(behavior)을 가진다.
  • 데이터는 객체 내부에서 캡슐화 된다.
    -> 객체는 데이터와 관련된 함수를 하나로 묶어 캡슐화 하는데, 이를 통해 데이터와 함수가 논리적으로 그룹화 되어 외부에서의 접근을 제어할 수 있다.
  • 함수를 객체의 동작(behavior)을 정의한다.

2. Object(객체)

- 객체가 가지는 것

  • State(상태, 객체가 가지고 있는 데이터나 속성)
    - attributes(속성, 멤버 변수들)
    • ex) center, radius
  • Behavior(동작, 객체가 수행할 수 있는 작업이나 행동)
    - operations (작업, 멤버 함수들)
    • ex) draw(), move(), resize()
  • Identity(식별성, 객체를 식별할 수 있는 고유한 특성으로, 각 객체는 자신만의 식별자를 가진다)
    - 메모리 주소 혹은 식별자 값으로 식별
    • 다수의 객체들이 같은 상태를 가지고 있더라도, 그들은 독립적으로 구분된다.
    • ex) 스마트폰1, 스마트폰2는 같지 않음.

3. Class(클래스)

  • 서로 다른 객체들은 클래스 내에 분류된다.

  • 객체는 클래스의 인스턴스이다. (클래스는 객체를 생성하기 위한 붕어빵 틀 같은 역할이다.)

  • 클래스가 정의하는 것들

  • name(이름)
    - 클래스에는 고유한 이름이 있으며, 이를 통해 프로그램에서 클래스를 식별함.
  • attrivutes(속성)
    - 클래스는 속성을 정의할 수 있으며, 클래스에 속하는 각 객체가 가지는 상태나 데이터를 나타냄.
  • operations(작업)
    - 클래스는 객체가 수행할 수 있는 작업이나 동작을 정의하며, 이는 클래스의 메서드로 구현됨.

4. Encapsulation(캡슐화)

  • 캡슐화(정보 은닉)
    • 연관된 데이터와 동작들을 하나로 결합하고, 클라이언트 측에게 상세한 데이터와 구현체는 숨기는 것을 의미한다.
  • 객체의 캡슐화
    • 데이터와 동작의 구현체(Data and implementation of operations)
      • 객체는 관련된 데이터와 작업을 하나로 묶어 캡슐화 하는데, 이는 객체가 자신의 데이터를 처리하는 메서드를 포함하여 데이터와 작업을 함께 묶는 것을 의미한다.
  • Private한 Data
    • 객체는 내부 상태(state)를 외부에서 직접적으로 접근할 수 없게 Private로 설정하는데, 이를 통해 객체는 자신의 데이터에 대한 외부의 접근을 제어하고, 외부에서의 무결성을 유지할 수 있음.
  • 유지보수성 향상
    • 캡슐화는 코드의 유지보수성을 향상 시킬 수 있는데, 외부에서의 직접적인 접근을 제한함으로써, 객체 내부의 구현 내용이 변경되더라도 외부 인터페이스를 변경할 필요가 없어지며, 이는 코드 변경에 대한 영향을 최소화 하고, 소프트웨어의 유지보수를 용이하게 만든다.
  • 객체는 Public한 Interface를 제공함
    • 외부 Client의 객체는 외부에서 인터페이스의 속성 혹은 메서드를 메세지를 보냄으로써 사용할 수 있다.
  • Message(객체 간의 통신 수단)
    • 한 객체는 다른 객체에게 메세지를 보냄으로써 해당 객체의 메서드를 호출하거나 속성에 접근할 수 있음.

ETC)

  • Data(Attribute)외부에서의 무분별한 접근과 상태(state)의 변경을 막기 위해 필요한 상황이 아닌 경우 private로 선언하는 것이 일반적이다.
  • Operation(method)를 public으로 두는 것은 유지보수성을 좋게 하기 위함으로, Operation을 가져가서 부가적인 기능을 추가함으로써 또 다른 기능으로 사용 할 수 있기 때문이다.
profile
예외(exception)는 있다

0개의 댓글