객체지향 프로그래밍(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
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 클래스, 객체, 인스턴스의 차이 (0) | 2024.01.29 |
---|---|
[Java] OOP의 5가지 원칙 (SOLID) (0) | 2024.01.25 |
[Java] 자바 접근 제어자의 유형과 특징 (0) | 2024.01.22 |
[Java] String vs. StringBuilder vs. StringBuffer 차이 (0) | 2024.01.18 |
[Java] 자바의 컴파일 과정 & JVM 메모리 구조 (0) | 2024.01.17 |