객체 지향 프로그래밍(OOP: OBject Oriented Programming)
- 컴퓨터 프로그래밍 패러다임 중 하나
- 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
- 문제를 여러 개의 객체 단위로 나누어 처리하는 방식
장점
- 코드 재사용이 용이
- 남이 만든 클래스를 가져와 이용 가능
- 상속을 통해 확장해서 사용 가능
- 유지보수가 쉬움
- 객체 단위로 구분되므로 코드를 수정할 때 해당하는 클래스에서 필요한 부분만 수정하면 된다.
- 절차 지향 프로그래밍은 코드를 수정할 때 일일이 찾아 수정해야 함.
- 대형 프로젝트에 적합
- 클래스 단위로 모듈화 하여 개발 가능
- 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무 분담이 쉽다.
단점
- 처리 속도가 상대적으로 느림
- 객체가 많으면 용량이 커짐
- 설계 시 많은 시간과 노력, 즉 비용이 듦.
특징
추상화
- 불필요한 정보는 숨기고 중요한 정보만을 표현하여 간단히 만드는 것
- 객체들의 공통된 속성과 행위(필요한 정보)를 묶어 클래스로 설계하는 과정 자체
캡슐화
- 두 가지 개념
- 객체들의 공통된 속성(변수 또는 필드)과 행위(메서드)를 클래스(캡슐)로 묶는 것
- 객체의 재사용에 유리
- 실제 구현 내용의 일부를 외부로부터 감추어 은닉하는 것
- 접근 제어자(ex. private)를 통해 외부에 노출하지 말아야 하는 정보 또는 기능을 제어 권한이 있는 객체에서만 접근할 수 있도록 함.
- 객체들의 공통된 속성(변수 또는 필드)과 행위(메서드)를 클래스(캡슐)로 묶는 것
상속
- 상위 개념의 특징을 하위 개념이 물려받은 것
- 새로운 클래스가 기존 클래스의 자료와 연산을 물려받아 이용할 수 있게 하는 기능
- 부모 클래스의 속성과 기능을 자식 클래스가 이어받아 사용
- 일부를 변경해야 할 경우 자식 클래스에서 재정의하여 사용
- 다중 상속
- 하나의 자식 클래스가 여러 개의 부모 클래스를 갖는 것
- 자바에서는 지원하지 않음
- 다이아몬드 문제
- A(부모 클래스)-> B, C(자식 클래스)
- B, C(부모 클래스) -> D(자식 클래스, 다중 상속)
- 만약 B와 C가 A로부터 메서드를 각각 오버라이딩하여 구현하였다면 D는 어떤 부모의 메소드를 써야 하나? -> 충돌!
- 다이아몬드 문제
다형성
- 하나의 변수명 또는 함수명이 상황에 따라 다른 의미로 해석될 수 있는 것
- 오버라이딩(Overriding)과 오버로딩(Overloading)으로 구현
- 오버라이딩: 부모 클래스의 메서드를 자식 클래스에서 같은 메서드 이름과 매개변수로 재정의하는 것.
- 오버로딩: 같은 이름의 함수를 여러 개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것.
출처
'Backend > 🌏OOP' 카테고리의 다른 글
[OOP] 의존성 주입 (0) | 2021.11.16 |
---|---|
[OOP] 클래스, 객체, 인스턴스 (0) | 2021.11.16 |