Study/CS
[CS] 프로그래밍 패러다임 - 객체지향 프로그래밍
dev_kong
2023. 1. 10. 14:33
728x90
728x90
객체지향 프로그래밍
객체지향 프로그래밍이란?
OOP(Object-Oriented Programming)라고도 불리는 객체지향 프로그래밍은
프로그램의 상호작용을 객체들의 집합으로 표현하며,
데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식의 프로그래밍 패러다임이다.
설계에 많은 시간이 소요되고, 처리속도가 느리지만
유지보수성이 뛰어나고, 확장에 유연하다는 장점이 있다.
객체지향 프로그래밍의 특징
추상화
추상화란 객체의 핵심적인 개념 또는 기능을 추출하여 간추려 정의하는 것.
객체들은 공통된 클래스를 토대로 생성되는데, 이때 객체들이 어떤 공통된 특징을 가지고 있어야 한다고 정의하는 것이다.
캡슐화
객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것을 말한다.
캡슐화가 중요한 이유는 불안정한 부분(implementation)과 안정적인 부분(public interface)를 분리하여
관리하기 때문에 변경의 여파를 줄일 수 있고 불필요한 정보를 은닉할 수 있기 때문이다.
상속성
상위 클랫의 특성을 하위 클래스가 이어 받아서 재사용하거나 추가, 확장하는 것을 말한다.
코드의 재사용성이 증대 되고, 계층적인 관계생성, 유지보수성 향상에 있어 중요하다.
다형성
개인적으로 객체지향의 하이라이트라고 생각하는 특징이다.
하나의 메서드나 클래스가 다양한 방법으로 동작하는 것을 말한다.
대표적으로 오버로딩, 오버라이딩이 있다.
SOLID 설계원칙
클린코드로 유명하신 로버트 마틴센세가 명명한 객체지향 프로그래밍 설계 원칙 다섯가지이다.
SRP
- Single Responsibility Principle, 단일 책임 원칙
- 한 클래스는 하나의 책임만 가져야한다.
- 하나의 책임이 모호하게 들릴 수 있는데 중요한 기준은 변경이다.
변경이 있을 때 파급 효과가 적으면, 단일 책임 원칙을 잘 따른것.
OCP
- Open-Closed Principle, 개방-폐쇄 원칙
- 소프트웨어 요소는 확장에는 열려있으나, 변경에는 닫혀 있어야 한다.
- 즉, 기존의 코드는 변경하지 않으면서도, 확장은 쉽게 할 수 있어야 한다.
- 다형성의 활용이 필요함
LSP
- Liskov Substitution Principle, 리스코프 치환 원칙
- 프로그램의 객체는 프로그램의 정확성을 깨뜨리리 않으면서, 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
- 예) 자동차 인터페이스의 엑셀은 앞으로 가라는 기능, 뒤로가게 구현하면 LSP 위반(프로그램의 정확성을 깨뜨림)
ISP
- Interface Segregation Principle, 인터페이스 분리원칙
- 특정 클라이언트를 위한 인터페이스 여러개가, 범용 인터페이스 하나보다 낫다.
DIP
- Dependency Inversion Principle, 의존역전 원칙
- 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게하는 원칙
- 쉽게 말해, 구현클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻
- 역할과, 구현 중 역할에 의존하게 해야 한다.
728x90
728x90