객체 지향 프로그래밍 이란, 객체들이 모여서 상호 협력하면서 데이터를 처리하는 방식의 프로그래밍 설계 방법을 일컫는다.
좀 더 쉽게 말하자면, 프로그램을 묶음 단위로 잘게 쪼개서, 추후에 가져다 쓰기 편하게 만들어 놓은 프로그래밍 방식이라고 보면 된다.
이처럼 레고 블럭 조립하듯이 컴포넌트를 유연하고 변경이 용이하기 때문에, 현업에서 대규모 소프트웨어 개발에 많이 사용된다.
클래스(Class)
문법을 지원하는 것 처럼 대부분의 프로그래밍 언어는 객체 지향 언어 방식을 지원하고 있다.
즉, 객체 지향 프로그래밍 개념을 배우면, 그 기술을 다양한 많은 언어에 적용할 수 있다는 뜻이기도 하다.
객체 지향 프로그래밍
<---반대--->절차 지향 프로그래밍
프로그래밍에서의 추상화는 클래스를 정의할 때 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화 하는 것을 말한다.
클래스들의 중요하고 공통된 성질들을 추출하여 부모(슈퍼) 클래스를 선정하는 개념과, 이벤트 발생의 정확한 절차나 방법을 정의하지 않고 대표할 수 있는 표현으로 대체하는 것을 말한다.
객체 지향 프로그래밍의 추상화는 크게 두가지로 나뉘는데, 객체의 관련 속성 만 '표시' - 데이터 추상화
하고 불필요한 세부 정보는 '숨긴다' - 제어 추상화
가 있다.
상속(Inheritance)은 하나의 클래스가 가진 특징(함수, 변수 및 데이터)을 다른 클래스가 그대로 물려 받는 것을 말합니다.
이미 정의된 상위 클래스의 특징을 하위 클래스에서 물려받아 코드의 중복을 제거하고 코드 재사용성을 증대시킵니다.
다형성(Polymorphism)은 하나의 객체(클래스)가 다양한 형태로 동작하는것을 의미합니다. 이는 객체가 가진 특성에 따라 같은 기능이 다르게 재구성되는 것을 의미합니다.
동일한 메서드나 함수 명을 사용하더라도, 클래스마다 그 메서드가 다르게 동작하는 것이 다형성의 핵심입니다.
SOLID의 종류
- 단일 책임의 원칙 (Single Responsibility Principle, SRP)
- 개방-폐쇄 원칙 (Open-Closed Principle, OCP)
- 리스코프 치환 원칙 (Liskov substitution principle, LSP)
- 인터페이스 분리 원칙 (Interface segregation principle, ISP)
- 의존성 역전 원칙 (Dependency Inversion Principle, DIP)
어플리케이션에서 객체는 프로그램의 동작에 영향을 주지 않으면서, 하위 타입의 객체로 바꿀 수 있어야 한다.
S
가 T
의 하위 유형이라면, 프로그램의 기능에 변화를 주지 않고서도 T
타입의 객체를 S
객체로 대체할 수 있어야합니다.