객체 지향 프로그래밍은 상태(필드)와 행위(메서드)를 가진 객체를 중심으로 프로그램을 설계하는 프로그래밍 패러다임이다.
각 객체에 역할과 책임을 부여하고, 이 객체들이 서로 협력하는 방식으로 프로그램을 구성
1. 캡슐화
- 객체의 상태와 행위를 하나의 단위로 묶는 것
- 내부 구현은 숨기고 외부에서 접근할 수 있는 인터페이스만 제공
- 장점 : 객체의 무결성을 보고하고 코드의 유지보수성 높임
2. 추상화
- 불필요한 세부 사항을 감추고 핵심적인 기능만 간추려내는 것
- 객체의 공통적인 특징을 추출하여 인터페이스 또는 추상 클래스로 정의하고, 구체적인 세부 사항은 구현체에 위임함
- 장점 : 객체의 핵심 기능에만 집중 가능
✨ 추상클래스 : 공통된 기능을 재사용하려는 목적. 일반 메서드/추상 메서드 포함 가능하며 인스턴스 변수 가능(is - a)
✨ 인터페이스 : 구현을 강제하려는 목적. 추상 메서드와 default메서드 포함 가능, 상수만 가능(can - do, 다중 상속)
3. 다형성
- 하나의 인터페이스아 여러 형태로 동작할 수 있는 것
- 오버로딩, 오버라이딩을 사용하여 같은 메서드명이더라도 객체에 따라 다르게 동작 가능
✨ 오버로딩 : 클래스 내에서 같은 이름의 메서드를 여러 개 정의하는 것(매개변수의 개수, 타입, 순서 차이)
✨ 오버라이딩 : 상위 클래스의 메서드를 하위 클래스에서 재정의하는 것
4. 상속
- 상위 클래스의 특징을 하위 클래스가 물려받아 확장하는 것
- 기존 기능 + 새로운 기능 추가 가능
- 장점 : 확장성이 뛰어남. 중복을 제거하여 코드의 재사용성 높임
다이아몬드 문제
- 다중 상속에서 발생하는 모호성 문제를 의미한다.
- C++ : 다중상속을 지원하는 언어이르모 직접 해결 필요
- Java : 클래스에 대한 다중 상속을 지원하지 않고 인터페이스에서만 허용
'cs(with 매일메일)' 카테고리의 다른 글
| [260220금] 서버리스란 무엇인가요? (0) | 2026.02.20 |
|---|---|
| [260219목] 널 오브젝트 패턴이란 무엇인가요? (0) | 2026.02.19 |
| [260217화] 이진 트리에 대해서 설명해 주세요. (0) | 2026.02.19 |
| [260216월] 열 기반 DB와 행 기반 DB의 차이점은 무엇인가요? (0) | 2026.02.19 |
| [260213금] 페이지 교체 알고리즘에 대해서 설명해 주세요. (0) | 2026.02.19 |