5월 13일 - 객체지향

Yullgiii·2024년 5월 14일
0
post-thumbnail

객체지향 프로그래밍 (Object-Oriented Programming, OOP)

정의

객체지향 프로그래밍(OOP)은 데이터와 그 데이터를 처리하는 메서드를 포함하는 객체들을 기반으로 소프트웨어를 설계하고 구현하는 프로그래밍 패러다임이다. 이 방식은 소프트웨어의 재사용성, 확장성 및 유지보수의 용이성을 증대시키는 데 초점을 맞추고 있다.

SOLID 원칙

SOLID 원칙은 객체지향 설계의 다섯 가지 핵심 원칙으로, 견고하고 유지보수가 용이한 소프트웨어를 설계하는 데 목표를 두고 있다.

  1. Single Responsibility Principle (단일 책임 원칙):

    • 한 클래스는 하나의 책임만 가져야 한다.
    • 클래스가 변경되는 이유는 하나여야 하며, 이는 클래스의 기능을 명확하게 구분짓는 데 도움을 준다.
  2. Open/Closed Principle (개방-폐쇄 원칙):

    • 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하지만 수정에는 닫혀 있어야 한다.
    • 기존의 코드를 변경하지 않고도 시스템의 기능을 확장할 수 있어야 한다.
  3. Liskov Substitution Principle (리스코프 치환 원칙):

    • 프로그램에서 부모 클래스의 인스턴스 대신 하위 클래스의 인스턴스를 사용할 수 있어야 한다.
    • 하위 클래스는 그들의 기본 클래스와 대체 가능해야 한다.
  4. Interface Segregation Principle (인터페이스 분리 원칙):

    • 클라이언트는 그들이 사용하지 않는 인터페이스를 구현하도록 강제되어서는 안 된다.
    • 인터페이스는 구체적이고 클라이언트에 특화되어야 한다.
  5. Dependency Inversion Principle (의존 역전 원칙):

    • 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다.
    • 추상화는 구체적인 사항에 의존하지 않아야 하며, 구체적인 사항은 추상화에 의존해야 한다.

다형성 (Polymorphism)

정의

다형성은 객체가 여러 가지 형태를 가질 수 있는 능력을 의미하며, 같은 인터페이스나 메서드 호출이 다른 실행 결과를 가져올 수 있도록 한다.

동적 다형성 (Dynamic Polymorphism)

  • 실행 시간에 결정되며, 메서드 오버라이딩을 통해 구현된다.
  • 예: 자바에서 Animal 클래스를 상속받는 DogCat 클래스가 speak() 메서드를 다르게 구현하여 사용할 때.

정적 다형성 (Static Polymorphism)

  • 컴파일 시에 결정되며, 메서드 오버로딩을 통해 구현된다.
  • 예: 같은 이름의 함수지만 다른 파라미터를 받아 다르게 동작하는 경우.

오버로딩과 오버라이딩

  • 오버로딩 (Overloading):

    • 동일한 함수명을 여러 번 정의하지만, 매개변수의 유형이나 개수가 다른 경우.
    • 컴파일 시간에 결정되며, 다형성의 한 형태를 제공한다.
  • 오버라이딩 (Overriding):

    • 상속받은 메서드의 기능을 하위 클래스에서 변경하는 것.
    • 실행 시간에 다형성을 제공하며, 상위 클래스의 메서드를 하위 클래스가 구체화한다.

클래스와 객체지향 언어

  • 모든 클래스가 있는 언어가 객체지향 언어는 아니다. 예를 들어, C는 구조체를 통해 제한적인 객체지향 기능을 사용할 수 있지만, 객체지향 언어로 분류되지는 않는다.
  • 반면, 객체지향 프로그래밍을 지원하는 언어들은 클래스를 기반으로 하여 인스턴스화 가능한 객체와 상속 구조를 제공한다.
profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글