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

Today I learn :)

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

프로그래밍에서 필요한 데이터와 기능을 추상화시켜 객체로 만들고
객체 간의 상호작용을 이용해 프로그램을 만드는 방법이다.

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

  • 추상화
    • 가장 핵심적이고 공통된 부분을 간추려 내는 것
  • 상속
    • 기존 클래스가 가진 필드와 메서드를 새로운 클래스가 이용할 수 있게 하는 기능
    • 새로운 클래스는 상속받은 데이터와 기능을 수정하거나 새로운 데이터와 기능을 추가할 수 있다
  • 캡슐화
    • 관련된 필드와 메서드를 하나로 묶는 것
    • 구현 내용을 숨기고 인터페이스를 통해 사용하도록 하는 것
    • 응집도가 높고 결합도가 낮아진다
  • 다형성
    • 하나의 요소를 다양하게 정의하고 상황에 따라 사용할 수 있다
    • 오버라이딩, 오버로딩 형태로 제공

객체지향 프로그래밍의 장점은 무엇인가요?

  • 코드 재사용이 쉽다
    • 중복된 코드가 필요한 경우에 상속을 통해 클래스를 만들면 된다
    • 추상화하여 클래스를 만들기 때문에 다양한 객체에 적용할 수 있다
  • 코드 유지보수가 쉽다
    • 부모, 자식 클래스에서 공통된 부분을 부모 클래스에서 한 번에 수정할 수 있다
  • 대규모 프로젝트에 적합하다
    • 클래스 간 결합도가 낮기 때문에 다수가 개발에 참여하는 경우 업무 분담하기 좋다

객체지향 프로그래밍의 단점은 무엇인가요?

  • 많은 오버헤드가 발생한다
    (오버헤드: 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리 등)
    • 객체 간 정보 교환이 모두 메시지 교환을 통해 일어나기 때문이다
  • 객체가 상태를 갖기 때문에 버그가 발생할 가능성이 있다
    • 내부 변수로 인해 객체가 예측할 수 없는 상태를 갖기 때문이다
    • 함수형 프로그래밍의 등장 배경이 된다
  • 상속을 통한 재사용의 단점
    • 부모 클래스 변경이 어렵다
      자식 클래스에게 영향을 주기 때문이다
    • 클래스가 비대해진다
      부모 클래스를 전부 상속받아야 하기 때문이다
    • 잘못된 관계가 생긴다
      자식 클래스가 부모 클래스와 IS-A 관계가 아닌 경우가 생길 수 있다

다시 읽어보고 생각해보자


참고

위키백과_ 객체 지향 프로그래밍
객체 지향 프로그래밍이 뭔가요?
Object Oriented Programming
#객체 지향에 대한 이해/ 객체 지향적 설계

Leave a comment