객체지향 프로그래밍 (Object-Oriented Programming, OOP)
- 소프트웨어 개발 방법론 중 하나로, 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
- 객체를 중심으로 데이터와 기능을 캡슐화하여 객체 간 상호작용을 통해 소프트웨어를 구성하는 방식.
주요키워드 및 원칙
-
클래스 (Class)
객체를 정의하는 설계도 혹은 틀을 의미하며 클래스는 객체가 가질 수 있는 속성(멤버 변수)과 행위(멤버 함수)를 정의.
-
객체 (Object)
클래스를 기반으로 생성된 구체적인 실체를 의미하며 객체는 속성과 행위를 가지고 다른 객체와 상호작용이 가능.
-
캡슐화 (Encapsulation)
객체의 속성과 행위를 하나로 묶고, 외부에서 직접 접근하지 못하도록 제한하는 것을 의미하며 이를 통해 객체의 내부 구현을 숨길 수 있음.
-
상속 (Inheritance)
부모 클래스에서 정의된 속성과 행위를 자식 클래스에서 재사용할 수 있도록 하는 것을 의미하며 상속을 통해 코드의 재사용성을 높이고, 유지보수를 용이하게 할 수 있음.
-
다형성 (Polymorphism)
여러 객체가 동일한 메서드를 호출하더라도 각자 다른 동작을 하도록 하는 것을 의미하며 다형성은 코드의 가독성을 높이고, 유지보수성을 향상시킴.
-
추상화 (Abstraction)
객체의 복잡한 내부 동작을 단순화하여 핵심적인 기능만 노출시키는 것을 의미하며 추상화를 통해 객체의 복잡도를 낮추고, 코드의 재사용성을 높일 수 있음.
객체지향 설계 5원칙(SOLID 원칙)
- 객체 지향 프로그래밍에서 지켜야 할 다섯 가지 원칙을 나타내는 약어로 소프트웨어 설계와 유지보수의 용이성, 확장성, 재사용성 등을 증가시키기 위해 개발자들이 따라야 할 규칙을 제시.
종류
- SRP(Single Responsibility Principle) : 단일 책임 원칙으로 하나의 클래스는 하나의 책임만 가져야 함.
- OCP(Open Closed Principle) : 개방-폐쇄 원칙으로 확장에는 열려 있고, 변경에는 닫혀 있어야 함.
- LSP(Liskov Substitution Principle) : 리스코프 치환 원칙으로 자식 클래스는 언제나 부모 클래스를 대체할 수 있어야 함.
- ISP(Interface Segregation Principle) : 인터페이스 분리 원칙으로 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안됨.
- DIP(Dependency Inversion Principle) : 의존 역전 원칙으로 고차원 모듈은 저차원 모듈에 의존하면 안되며, 추상화는 구체적인 사항에 의존하면 안됨.
정리
SOLID 원칙을 준수하면, 소프트웨어 시스템은 변경에 유연하고, 유지보수와 확장이 쉽게 이루어질 수 있으며 코드의 가독성과 재사용성도 높아지기 때문에, 객체 지향 프로그래밍에서는 SOLID 원칙을 중요하게 다룸.
장단점
- 다른 사람이 만든 클래스를 가져와서 이용 할 수 있고 상속을 통해 확장이 가능.
- 코드 재사용이 용이하고 수정 부분이 클래스 내부에 멤버 변수 또는 메서드로 존재하여 유지보수 용이.
- 클래스 단위로 모듈화시켜서 개발할 수 있으므로 대형 프로젝트에 적합.
- 처리 속도가 상대적으로 느리고 객체가 많으면 용량이 커질 수 있으며 설계 시 많은 시간과 노력이 필요.