[JAVA] 기초 1. 객체지향 프로그래밍의 핵심 개념 4가지
0. 객체 지향 프로그래밍(OOP)의 핵심 개념
0.1. 캡슐화 (Encapsulation)
:: 객체의 상태(=데이터)와 그 상태를 변경하는 메서드를 하나로 묶는 원칙
:: 정보 은닉 + 접근 제어를 통한 객체의 상태 보호 + 데이터 무결성을 제공
- 접근 제어자를 통해 데이터를 은닉
- 외부에는 최소한의 메서드만을 노출하여 데이터의 변경 및 접근을 제한
==> 단순히 숨기는 것이 아닌 "독립된 시스템 구축"에 있다
- 접근 제어자를 통해 구현
- public : 어디서도 접근
- protected : private + default의 접근성(상속 or 같은 패키지 내)
- default : 같은 패키지 내 접근 가능
- private : 동일한 클래스 내에서만 접근 가능, inner 클래스의 경우, 상위에서 접근 가능
0.2. 상속 (Inheritance)
:: 기존 클래스를 기반으로 새로운 클래스를 생성하는 기능
:: 기존 클래스의 속성(필드)과 메서드를 자식 클래스가 내려 받음
:: 코드의 재사용성 + 확장성 + 유지 보수성 향상 + 계층적 구조를 통한 다형성(Polymorphism) 구현
- 기존 클래스의 속성과 메서드를 재사용 + 확장하여 새로운 클래스 정의 가능
- 유사한 내용의 코드 중복을 줄이고 계층적인 관계를 형성
- 단점
1) 갖고 싶지 않은 필드와 메서드까지 상속 받음
2) 사용하지 않은 필드와 메서드까지 호출될 수 있음
- 상속 보다 조합을 활용하여 이를 해결
=> 상속의 경우 기존의 캡슐화를 그대로 유지
=> 조합의 경우 기존의 캡슐화 위에 또 캡슐화
- 상속 보다 조합을 활용하여 이를 해결
0.3. 추상화 (Abstraction)
:: 객체의 복잡한 내부는 은닉, 중요 기능만 노출(캡슐화와 같은..)
:: 정보 은닉 + 일관성 있는 인터페이스 제공 + 클래스 간의 결합도 감소
- 복잡한 구현은 숨기고, 핵심적인 기능만 외부에 제공
- 사용자는 복잡함을 알필요 없이 인터페이스만으로 객체와 상호작용 가능
- 내부의 동작 방식은 언제든지 바뀌어도 반환이 같다면 괜찮
구현 방법 | 내용 |
1) 추상 클래스(abstract class) | - 일부 메서드 구현 - 일부 메서드는 자식에서 구현을 강제 |
2) 인터페이스(interface) | - 모든 메서드가 충상적 - 구현 클래스에서 구현 |
* 구현 클래스 = concreate class
0.4. 다형성 (Polymorphism)
:: 하나의 객체가 여러 형태를 가질 수 있는 능력
:: 메서드 오버로딩과 메서드 오버라이딩으로 구현
:: 동일한 하나의 인터페이스로 다양한 구현체에 대응이 가능
:: 코드의 유연성 + 확장 가능
구현 방법 | 내용 |
1) 메서드 오버라이딩 (Overriding) |
- 자식 클래스에서 부모 클래스의 메서드를 재정의 - 동작을 변경하는 것. |
2) 메서드 오버로딩 (Overloading) |
- 동일한 메서드 이름을 사용 - 파라미터의 타입이나 개수가 달라지도록 메서드를 정의 |
3) 동적 바인딩 (Dynamic Binding) |
- 객체의 실제 타입에 따라 메서드가 결정되는 특성 - 실행 시간에 결정 |
* 깨알 사전
- 분업화(모듈화)
:: 모듈의 기반이 되는 클래스와 객체가 있을 때,
=> 한 객체는 하나의 일만 수행한다.
참고
ASAC 수업자료