본문 바로가기
Software Engineering

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

by 차가운개발 2024. 10. 23.

 

객체 지향 프로그래밍(OOP)은 프로그램을 객체라는 단위로 구성하여 소프트웨어를 개발하는 프로그래밍 패러다임입니다. 객체는 데이터(속성)와 이를 조작하는 함수(메서드)를 하나로 묶은 독립적인 단위로, 현실 세계의 개념을 프로그래밍에 적용합니다.

 

ㅇ 핵심 개념

추상화(Abstraction)

  • 복잡한 시스템에서 필요한 핵심적인 부분만을 모델링하여 표현하는 것
  • 불필요한 세부사항을 감추고 중요한 정보에 집중하여 코드의 복잡성을 줄인다.

캡슐화(Encapsulation)

  • 데이터와 메서드를 하나로 묶고 외부로부터 직접적인 접근을 제한하는 것
  • 데이터의 무결성을 보호하고 객체 간 의존성을 낮춘다.
  • private으로 변수에 직접접근을 막고 메서드를 통해서 조작한다.

상속(Inheritance)

  • 기존 클래스의 속성과 메서드를 새로운 클래스가 물려 받는 것
  • 코드의 재사용성을 높이고 계층적인 관계를 표현한다.
  • Animal 클래스의 자식인 Dog, Cat 클래스는 Animal의 특징을 그대로 가지면서 추가적인 기능을 구현한다.

다형성(Polymorphism)

  • 동일한 인터페이스나 메서드에 대해 여러 가지 형태로 구현할 수 있는 능력
  • 코드의 유연성과 확장성을 높여준다.
  • 추상메서드를 자식 클래스에서 구체적으로 구현한다.

 

ㅇ 장점

  • 코드 재사용성 증가: 상속과 조합을 통해 기존 코드를 재사용할 수 있다.
  • 유지 보수성 향상: 모듈화된 객체 단위로 코드를 작성하므로 수정이 용이함.
  • 현실 세계 모델링 용이: 현실 세계의 개념을 그대로 프로그램에 반영할 수 있다.
  • 확장성 강화: 새로운 기능이나 객체를 쉽게 추가할 수 있다.
  • 데이터 보호: 캡슐화를 통해 데이터의 무결성을 유지하고 보안을 강화한다.

 

ㅇ 객체 지향 설계 원칙

SOLID 원칙

  1. 단일 책임 원칙(Single Responsibility Principle)
    • 클래스는 하나의 책임만 가져야 한다.
    • 변경의 이유가 하나뿐이어야 한다.
  2. 개방-폐쇄 원칙(Open-Closed Principle)
    • 소프트웨어 요소는 확장에 열려 있어야 하고, 수정에 닫혀 있어야 한다.
    • 기존 코드를 수정하지 않고 기능을 추가할 수 있어야 한다.
  3. 리스코프 치환 원칙(Liskov Substitution Principle)
    • 자식 클래스는 부모 클래스의 기능을 온전히 수행해야 한다.
    • 부모 타입의 객체를 자식 타입으로 치환해도 프로그램이 정상적으로 동작해야 한다.
  4. 인터페이스 분리 원칙(Interface Segregation Principle)
    • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
    • 사용하지 않는 메서드에 의존하지 않도록 인터페이스를 분리한다.
  5. 의존 역전 원칙(Dependency Inversion Principle)
    • 고수준 모듈은 저수준 모듈에 의존하면 안 되며, 둘 다 추상화에 의존한다.
    • 구체적인 구현보다 인터페이스나 추상 클래스에 의존한다.

 

ㅇ 한계와 고려사항

 

  • 복잡성 증가 가능성: 과도한 클래스와 객체 사용으로 오히려 코드가 복잡해질 수 있다.
  • 성능 오버헤드: 추상화 계층이 많아지면 메모리 사용량과 실행 시간이 증가할 수 있다.
  • 객체 간의 의존성 관리 필요: 객체 사이의 관계가 복잡해지면 유지 보수가 어려워질 수 있다.
  • 개념 이해의 중요성: OOP의 개념을 제대로 이해하지 못하면 잘못된 설계로 이어질 수 있다.

 

 

 

'Software Engineering' 카테고리의 다른 글

Third Party  (2) 2024.10.23
DevOps  (1) 2024.10.23
애자일(Agile) 방법론  (1) 2024.10.23
TDD(Test-Driven Development)  (0) 2024.10.23
클린코드 & 시큐어 코드 & 리팩토링  (0) 2024.10.23