객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란, 프로그램을 객체의 모임으로 구성하여 객체 간 상호작용을 통해 개발하고 구현하는 방법론 중 하나이다. 주요 언어로는 Java, C++, Python, Ruby 등이 있다. 절차 지향 프로그래밍과 반대된다.
객체 지향 프로그래밍의 장점으로는 소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉽다. 복잡한 구조를 단계적·계층적으로 표현하고, 멀티미디어 데이터 및 병렬 처리를 지원한다. 현실 세계를 모형화하므로 사용자와 개발자가 쉽게 이해할 수 있다.
객체 지향 프로그래밍의 특징으로는 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism), 추상화(Abstraction)가 있다.
또 객체 지향 설계 원칙은 시스템 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜야 할 다섯 가지 원칙으로, 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고도 불린다.
객체 지향 프로그래밍의 특징
특징 | 의미 | 장점 |
캡슐화 (Encapsulation) |
데이터와 데이터를 처리하는 함수를 하나로 묶는 것 | - 캡슐화된 객체는 재사용이 용이하고, 인터페이스를 제외한 세부 내용이 은폐되어 외부에서의 접근이 제한적이기 때문에 외부 모듈의 변경으로 인한 파급 효과가 적다. - 객체들 간 메시지를 주고받을 때 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체간의 결합도가 낮아진다. |
상속 (Inheritance) |
이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것 | - 상속을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성으로 사용할 수 있다. - 하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있다. - 상위 클래스의 속성과 연산을 하위 클래스가 사용할 수 있기 때문에 객체와 클래스의 재사용을 높인다. |
다형성 (Polymorphism) |
메시지에 의해 객체가 연산을 수행하게 될 때 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 것 | - 객체는 동일한 메소드명을 사용하며 같은 의미의 응답을 한다. - 응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행할 수 있도록 한다. |
추상화 (Abstraction) |
개념을 단순화하거나 일반화하여 중요한 부분을 강조하는 것 | - 여러 객체 사이에서 공통된 특징을 식별하고 하나의 일반적인 개념으로 나타낸다. |
객체 지향 설계 원칙(SOLID 원칙)
단일 책임 원칙 (Single Responsibility Principle, SRP) |
한 클래스는 하나의 책임만 가져야 한다. |
개방-폐쇄 원칙 (Open-Closed Principle, OCP) |
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. |
리스코프 치환 원칙 (Liskov Substitution Principle, LSP) |
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. |
인터페이스 분리 원칙 (Interface Segregation Principle, ISP) |
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. |
의존 역전 원칙 (Dependency Inversion Principle, DIP) |
프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. |
카테고리 분류가 애매하지만 설계에 두면 얼추 맞지 않을까 싶어 우선 여기에 작성하고자 한다. 추후 다른 카테고리로 변경될 수도 있다.
'설계' 카테고리의 다른 글
화이트박스 테스트(White Box Test)와 블랙박스 테스트(Black Box Test) (0) | 2024.02.05 |
---|---|
모듈(Module) (0) | 2024.02.02 |
트랜잭션 스크립트 패턴과 도메인 모델 패턴 (1) | 2024.01.15 |