객체지향 (OOP)란 무엇인가?

컴퓨터 프로그래밍의 패러다임 중 하나인 절차지향(C) 언어에서는 각 명렁어의 실행 순서를 기반으로 동작합니다. 하지만 객체 지향 프로그래밍(Object-Oriented Programming)은 데이터와 이를 처리하는 루팅들을 하나의 독립된 객체로 동작합니다. 이를 통해 재사용성 증가라는 이점이 생기며 큰 프로젝트에 많이 사용됩니다.

1. 추상화 (Avstraction)

  • 대상의 특성 중 불필요한 부분을 무시하고 필요한 공통점만을 다룹니다. 그래서 현실의 복잡성을 극복하고 목적에 집중 할 수 있도록 합니다.
  • 복잡성을 다루기 위한 추상화의 2가지 차원
    • 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통한 단순화
    • 중요한 부분의 강조를 위해 불필요한 세부 사항을 제거하는 단순화
  • 추상화는 문제 영역과 관점에 의존적이므로 어떤 영역에서는 중요한 속성이 다른 영역에서는 그렇지 않을 수 있다. 따라서 원하는 목적이나 기능에 따라 추상화 모델은 서로 다를 수 있다.

2. 캡슐화 (Encapsulation)

  • 객체 스스로가 자신의 상태를 책임지게 하여, 해당 객체의 역할 수행에 집중할 수 있도록 자율성을 높이는 것입니다.
  • 캠슐화의 2가지 관점
    • 상태와 행위의 캡슐화 (데이터 캡슐화) - 객체는 상태와 행동(변수와 함수)을 하나의 단위로 묶는 자율적 실체
    • 사적인 비밀의 캡슐화 (은닉화) - 외부에서 객체의 상태를 마응대로 변경할 수 없도록 보호
  • 외부 객체가 메시지를 보냈을 때, 실제 내부에서 상태가 어떻게 바뀌고 어떤 행동을 하는지 스스로만 알 뿐 외부로 노출하지 않는다. 도한 자신의 상태는 스스로만 변경할 수 있도록 한다. 요청자는 무엇을 요청하는지만 전달하며, 수신자는 어떻게 처리할지를 결정하면 됩니다.
  • 객체의 자율성이 높아질수록 객체간 협력이 유연/간결해집니다. 따라서 재사용성 역시 좋아집니다.

3. 상속성 (Inheritance)

  • 부모 클래스의 속성과 기능을 상속받아 동일하게 사용하는 것입니다.
  • 새로운 클래스는 상속을 통해 부모 클래스의 속성과 기능을 물려받습니다.
  • 범용적인 클래스를 작성한 뒤 상속을 활용하면, 여러 클래스에 중복되는 속성과 기능을 반복적으로 구현하지 않아도 쉽게 적욜할 수 있습니다.

4. 다향성 (Polymorphism)

  • 동일 요청에 대해 서로 다른 방식으로 응답할 수 있도록 만드는 것 입니다.
  • 동일한 요청이 들어왔을 때 그것을 구현하는 방법에 차이를 두어 다른 결과를 만들어내는 것을 말합니다.
  • 매서드 오버 라이딩오버 로딩이라는 형태로 다향성을 지원하며 언어에 따라 오버라이딩만 지원하기도 합니다.
    • 오버 라이딩: 상위 클래스에게 상속 받은 동일한 매서드 재정의
    • 오버 로딩: 동일한 메소드가 매개변수의 차이에 따라 다르게 동작

5. 출처