객체지향 프로그래밍
👉 소프트웨어를 설계하고 구현하는 프로그래밍 패러다임 중 하나로 현실 세계의 개념과 구조를 컴퓨터 프로그램에 반영하여 문제를 해결하는 방법
객체지향 프로그래밍의 장점
- 가독성
- 재사용성
- 유지보수성
객체지향
- 객체
- 클래스와 인스턴스
객체지향 프로그래밍의 주요 개념
1. 캡슐화
객체의 데이터와 메서드를 하나로 묶어 외부에서의 직접적인 접근을 제한하는 것
- 데이터의 은닉화
객체 내부의 데이터를 외부로부터 숨기고 접근 제어를 통해 보호할 수 있다.
코드 유지보수성 향상: 객체의 내부 구현을 변경해도 외부에 영향을 주지 않는다.
- 재사용성
객체를 다른 곳에 쉽게 적용할 수 있다.
- 에러의 최소화
잘못된 사용을 방지하고 에러를 최소화 한다.
2. 추상화
복잡한 시스템이나 개념을 단순화하고 중요한 특징을 강조하는 것
- 복잡성 감소
복잡한 시스템이나 개념을 단순화하여 이해하기 쉽게 한다.
- 핵심 강조
중요한 특징과 동작을 강조하여 가독성을 높이고 핵심 개념을 명확히 전달한다.
- 재사용성
추상화된 개념이 모듈화되어 있어 쉽게 재사용이 가능하다.
- 유지보수성 향상
구체적인 구현 세부사항을 추상화하여 변경 시 다른 부분에 영향을 덜 주고 유연성을 제공한다.
3. 상속
이미 존재하는 클래스의 특징과 동작을 다른 클래스가 상속받아 사용할 수 있는 것
- 재사용성
상위 클래스의 코드를 재사용하여 중복을 피하여 개발 시간을 단축 가능하다.
- 계층 구조 형성
클래스들 간에 계층 구조를 형성하여 코드의 구조를 명확히 하고 관리하기 쉽게 만든다.
- 다형성 구현
상속을 통해 다형성을 구현하여 동일한 인터페이스를 사용하면서 다양한 객체의 처리가 가능하다.
- 유지보수성 향상
계층구조를 형성하고 있어 코드 수정이 필요한 경우 해당 클래스만 변경하면 되어 유지보수가 쉽다.
4. 다형성
동일한 인터페이스를 사용하여 다양한 객체를 처리할 수 있는 것
오버라이딩
하위 클래스에서 상위 클래스의 메서드를 재정의할 수 있다. 동일한 메서드 이름을 사용하면서 다양한 동작을 구현할 수 있다.
업캐스팅
하위 클래스의 객체를 상위 클래스의 타입으로 처리할 수 있다.
상위 클래스의 인터페이스에 맞게 다양한 하위 클래스 객체를 사용할 수 있다.
동적 바인딩
실행 시간에 객체의 실제 타입에 따라 메서드 호출이 결정된다.
객체의 타입에 따라 적절한 메서드가 호출된다.