본문 바로가기
프로그래밍

객체지향 프로그래밍의 특징

by 테크 가디언 2024. 5. 21.

객체지향 프로그래밍(OOP, Object-Oriented Programming)은 소프트웨어 설계 방법론 중 하나로, 데이터를 객체(object)로 묶어 객체 간의 상호작용을 통해 프로그램을 구성하는 방식입니다. OOP의 주요 특징을 자세히 살펴보면 다음과 같습니다.

 

1. 클래스와 객체

클래스(Class)

클래스는 객체를 생성하기 위한 청사진(blueprint)입니다. 속성(데이터)과 메서드(함수)를 정의합니다.

객체(Object)

클래스에서 정의된 대로 생성된 인스턴스(instance)입니다. 객체는 클래스의 구조를 기반으로 하며, 클래스에서 정의한 속성과 메서드를 가집니다.

 

2. 캡슐화(Encapsulation)

정의

객체의 속성과 메서드를 하나로 묶고, 외부로부터 직접 접근을 제한하여 객체 내부의 데이터와 기능을 보호하는 것입니다.

장점

데이터의 무결성을 유지하고, 객체의 내부 구현을 숨겨서 외부로부터 변경에 대한 영향을 최소화할 수 있습니다. 이를 통해 모듈화된 코드를 작성할 수 있습니다.

 

3. 상속(Inheritance)

정의

새로운 클래스가 기존의 클래스의 속성과 메서드를 물려받아 재사용하는 것입니다. 기존 클래스는 부모 클래스(슈퍼클래스, base class), 새로운 클래스는 자식 클래스(서브클래스, derived class)라고 합니다.

장점

코드의 재사용성을 높이고, 공통된 기능을 부모 클래스에 정의함으로써 중복 코드를 줄일 수 있습니다.

 

4. 다형성(Polymorphism

정의

같은 이름의 메서드가 서로 다른 클래스에서 다르게 동작하도록 하는 기능입니다. 주로 상속과 오버라이딩(Overriding)을 통해 구현됩니다.

 

오버로딩(Overloading): 같은 이름의 메서드가 매개변수의 유형이나 개수에 따라 다른 방식으로 동작하는 것입니다. 이는 컴파일 타임에 결정됩니다.

오버라이딩(Overriding): 자식 클래스가 부모 클래스의 메서드를 재정의하는 것입니다. 이는 런타임에 결정됩니다.

장점

인터페이스의 일관성을 유지하면서 다양한 객체가 동일한 메시지에 대해 서로 다른 방식으로 응답할 수 있게 합니다.

 

5. 추상화(Abstraction)

정의

객체의 세부적인 내부 구현을 감추고, 외부에 필요한 인터페이스만을 제공하는 것입니다. 추상 클래스(Abstract Class)나 인터페이스(Interface)를 사용하여 구현합니다.

장점

복잡한 시스템을 단순화하여 이해하기 쉽게 하고, 중요한 부분에만 집중할 수 있게 합니다. 인터페이스를 통해 서로 다른 객체들이 동일한 방식으로 상호작용할 수 있게 합니다.

 

6. 메시지 전달(Message Passing)

정의

객체 간의 상호작용이 메시지 전달을 통해 이루어집니다. 객체는 메시지를 통해 다른 객체의 메서드를 호출합니다.

장점

객체 간의 결합도를 낮추고, 유연한 설계를 가능하게 합니다.

 

7. 동적 바인딩(Dynamic Binding)

정의

프로그램 실행 시점에 호출될 메서드가 결정되는 것입니다. 이는 주로 다형성과 연관이 있으며, 런타임에 메서드가 결정됩니다.

장점

유연성과 확장성을 높여줍니다. 실행 중에 객체의 타입에 따라 적절한 메서드가 호출됩니다.

 

8. 컴포지션(Composition)

정의

다른 객체를 포함하여 복합 객체를 구성하는 것입니다. 이는 "has-a" 관계로 설명됩니다.

장점

상속의 대안으로 사용되며, 더 유연한 설계를 가능하게 합니다. 상속보다 낮은 결합도로 인해 유지보수가 용이합니다.

 

이러한 특징들을 종합하면 객체지향 프로그래밍은 코드의 재사용성, 확장성, 유지보수성을 높여주는 강력한 설계 방법론입니다. 이를 통해 복잡한 소프트웨어 시스템을 보다 효율적으로 설계하고 구현할 수 있습니다.

반응형