객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 개발에 널리 쓰이는 프로그래밍 패러다임으로,  가장 큰 장점은 프로그램을 보다 유연하고 변경을 용이하게 만들 수 있다는 점입니다.

 

이러한 OOP는 추상화, 캡슐화, 상속, 그리고 다형성 등 여러 주요한 특징들에 기반합니다


 

1. 추상화 Abstraction

- 정의 : 객체의 공통된 속성과 기능을 추출하여 정의하는 것.

 

추상화는 문제에 알맞게 클래스를 모델링하고, 가장 연관성 있는 상속 수준에서 작업함으로써 복잡한 현실을 단순화하고, 특정한 세부사항보다 객체의 필수적인 질에 집중합니다.


2. 캡슐화 Encapsulation

 - 정의 : 서로 연관된 속성과 기능들을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것.

 

캡슐화는 해당 데이터에 대해 작동하는 방법으로 데이터를 번들링하거나 개체의 구성 요소 중 일부에 대한 직접적인 접근을 제한하는 것을 포함하며, 이는 데이터에 대한 우연한 수정을 방지할 수 있습니다.

 

캡슐화를 사용하는 이유는 크게 두 가지로 정리될 수 있습니다.

  • 데이터 보호 Data Protection : 외부로부터 클래스에 정의된 속성과 기능들을 보호
  • 데이터 은닉 Data Hiding : 내부의 동작을 감추고 외부에는 필요한 부분만을 노출

 


3. 상속 Inheritance

 - 정의 : 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 것.

 

상속은 자식 클래스로 하여금 부모 클래스로부터 속성과 행동(메서드)를 상속받도록 하여 코드 재사용 및 클래스의 계층화를 가능하게 합니다. 특히, 코드 재사용의 경우 반복적인 코드를 최소화하고 공유하는 속성과 기능에 대한 간편한 접근을 가능하게 합니다.

 

이를 통해 기존 클래스의 행동을 재사용, 확장, 그리고 수정할 수 있는 새로운 클래스의 생성을 촉진합니다.


4. 다형성 Polymorphism

 - 정의 : 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질.

 

다형성은 객체들이 그들의 부모 클래스의 인스턴스로 다뤄지게 하는 것으로, 다중 클래스들이 공통된 super 클래스의 인스턴스로 다뤄지도록 만듭니다. 이를 통해 유연성을 높이고 단일 인터페이스가 관련 활동 그룹의 일반적인 동작을 나타낼 수 있습니다.

 


Q1. 추상화, 캡슐화, 그리고 은닉화의 차이점은 무엇인가요?

더보기

추상화, 캡슐화, 은닉화 모두 객체 지향 프로그래밍에서 중요한 개념입니다.

 

추상화는 객체들의 공통된 특성을 파악하고, 불필요한 세부 정보를 숨기고 핵심적인 내용만 표현하는 것입니다.

캡슐화는 데이터와 그 데이터를 처리하는 함수를 하나로 묶는 것으로, 이를 통해 데이터를 보호하고 외부에서의 접근을 제어할 수 있습니다. 

은닉화는 캡슐화의 결과로 나타나는 현상으로, 객체의 상세한 구현 내용을 외부에 감추는 것을 말하며, 이를 통해 객체 간의 상호작용을 안전하게 보호할 수 있습니다.

 

정리하면, 추상화는 핵심적인 부분만 표현하여 복잡성을 줄이고, 캡슐화와 은닉화는 데이터를 보호하고 외부 접근을 제어하여 시스템의 안정성을 높입니다.


참고 출처

 - What is object-oriented programming? OOP explained in depth

 - 객체 지향 프로그래밍의 4가지 특징 | 추상화, 상속, 다형성, 캡슐화

 - 캡슐화와 은닉화의 차이점