티스토리 뷰

개발

객체지향 프로그래밍 이란 ?

ThisisEmma 2024. 11. 10. 20:55
반응형

**객체 지향 프로그래밍(OOP)**은 데이터와 해당 데이터에 대해 작동하는 메서드를 나타내는 "객체" 개념을 기반으로 하는 프로그래밍 패러다임입니다. OOP의 주요 아이디어는 프로그래밍 환경 내에서 실제 엔터티와 해당 상호 작용을 모델링하여 코드를 보다 모듈화하고 재사용 가능하며 관리하기 쉽게 만드는 것입니다.

 

OOP의 주요 개념

클래스 및 객체
클래스 : 클래스에서 생성된 객체가 갖게 될 속성(데이터)과 메서드(동작)를 정의하는 청사진 또는 템플릿입니다.
객체 : 클래스의 인스턴스입니다. 클래스 템플릿을 사용하여 생성되며 자체 상태를 가진 특정 엔터티를 나타냅니다.

 

캡슐화
캡슐화는 데이터(속성)와 해당 데이터에 대해 작동하는 메서드를 단일 단위 또는 클래스로 묶는 것을 의미합니다. 이 데이터에 대한 액세스는 클래스로 제한하여 제어되며 특정 메서드(getter/setter)를 통해서만 상호 작용을 허용합니다.

 

상속
상속을 통해 한 클래스(하위 클래스/자식 클래스)가 다른 클래스(상위 클래스/상위 클래스)의 속성과 메서드를 상속할 수 있으므로 코드 재사용이 촉진되고 클래스 간 관계가 설정됩니다. 예를 들어, "Vehicle" 클래스는 "Car" 및 "Motorcycle"과 같은 하위 클래스를 가질 수 있습니다.


다형성
다형성을 통해 메서드를 호출하는 개체에 따라 메서드가 다르게 작동할 수 있습니다. 이는 메서드 재정의(하위 클래스가 상위 클래스의 메소드를 재정의하는 경우) 및 메서드 오버로딩(동일한 메소드에 서로 다른 매개변수를 기반으로 하는 여러 정의가 있는 경우)의 형태를 취할 수 있습니다.

 

추상화
추상화는 필수 기능만 모델링하고 불필요한 세부 사항은 무시하여 복잡한 현실을 단순화합니다. OOP에서는 메소드를 구현하지 않고 정의하는 추상 클래스나 인터페이스를 생성하여 하위 클래스가 세부 사항을 처리하도록 함으로써 추상화를 달성합니다.

 

OOP의 이점

모듈화 : 코드를 독립적인 클래스로 구성할 수 있으므로 유지 관리 및 테스트가 더 쉽습니다.
재사용성 : 클래스와 개체를 다양한 프로젝트에서 재사용할 수 있습니다.
확장성 : 기존 클래스를 확장하면 새로운 기능을 추가하는 것이 더 쉬워집니다.
유지관리성 : 캡슐화를 통해 프로그램의 각 부분을 독립적으로 개발할 수 있으므로 디버깅 및 업데이트의 복잡성이 줄어듭니다.

 

코드의 예(Python)

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass  # Placeholder for method

class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

dog = Dog("Buddy")
cat = Cat("Whiskers")

print(dog.speak())  
# Output: Buddy says Woof!print(cat.speak())  
# Output: Whiskers says Meow!

 

여기서 'Animal'은 상위 클래스이고, 'Dog'와 'Cat'은 'Animal'을 상속받은 하위 클래스입니다. 'speak' 메서드는 각 하위 클래스에서 재정의되어 동물마다 다른 소리를 반영하고 다형성과 상속을 보여줍니다.

 

결론

OOP를 사용하면 실제 엔터티와 그 관계를 미러링하여 복잡한 시스템을 더 쉽게 모델링할 수 있습니다. 이 프로그래밍 패러다임은 확장성, 가독성 및 유지 관리 가능성의 장점으로 인해 소프트웨어 개발에 널리 사용됩니다.

반응형