[학습정리] 객체지향 프로그래밍의 이해

김정현·2024년 7월 22일

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

  • 해당 개념을 이해하기 전에 프로그래밍 패러다임 이 무엇인지 부터 알아야 할거같다.

프로그래밍 패러다임

  • 간단하게 말하면, 프로그램을 작성하는 방식이라고 말할 수 있다.
  • 통상, 프로그래밍 패러다임 이라고 하면 3가지를 말한다
    • 절차지향 프로그래밍(PP)
    • 객체지향 프로그래밍 ( OOP)
    • 함수형 프로그램밍(FP)

프로그래밍 패러다임의 분류

전체적으로 프로그래밍 패러다임을 분류해서 표를 만들어보면 이와같은 표의 형태로 표현할 수 있다.

오늘은 이중에서 명령형 프로그래밍 - 객체지향에 대해서 알아보려고 한다

선언형과 명령형의 차이는 다음에 제대로 공부해보도록 하겠다..


객체지향 프로그래밍 (OOP)

  • 데이터를 객체라는 독립적인 단위로 나누어서 객체들의 상호작용으로 프로그램을 작성해나가는 방식
  • 객체 = 속성(변수) + 기능(함수)를 함께 포함

객체지향의 추상화와 상속

  • 추상화

    • 추상화의 핵심개념은 공통적인 속성이나 기능을 모아서 추출한다는 것이다.
    • 위의 그림과 같이, 갤럭시와 아이폰이라는 객체를 하나로 묶을 때 공통적인 특징인 핸드폰으로 묶고 핸드폰의 시작/종료와 같은 고유한 기능을 핸드폰 내부에 함께 정의해놓을 수 있다.
  • 상속

    • 하나의 클래스(하위 클래스)가 다른 클래스(상위 클래스)의 속성메서드를 물려받고 이를 통해서 기존 클래스의 기능을 확장하거나 재사용할 수 있다.
    • 위의 그림과 같이 핸드폰(상위 클래스)에서 핸드폰의 공통된 기능을 정의해놓으면 갤럭시, 아이폰(하위 클래스)에서 공통된 기능을 정의할 필요가 없어지기 때문에 코드의 중복줄어들고 코드의 재사용성은 `늘어날 수 있다.

interface와 abstract class의 차이점

  • interface를 통한 구현abstract class를 통한 상속상위 - 하위 클래스 관계를 통해 공통적인 속성과 기능을 공유할 수 있지만, 인터페이스를 통한 구현반드시 인터페이스에 정의된 추상 메서드의 내용이 하위 클래스에서 정의 되어야 한다. 하지만 상속의 경우에는 상위 클래스의 속성과 메서드를 하위클래스에서 그대로 받아서 사용하거나 오버라이딩을 통해 선택적으로 재정의할 수 있다.(단, 추상메서드의 경우에는 반드시 구현해야한다.)

객체지향 SOLID 원칙

SRP

  • 클래스는 오직 한가지의 책임만을 가져야한다.

OCP

- 확장에서는 열려있고

  • 새로운 기능을 추가하거나 확장할 수 있어야 한다.

- 수정에는 닫혀 있다.

  • 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있어야한다.

LSP

  • 서브 타입(하위 클래스)은 언제나 자신의 기반 타입(상위 클래스)으로 교체할 수 있어야 한다.

ISP

  • 인터페이스를 각각 사용에 맞게 끔 분리를 해야한다.
    클라이언트의 목적과 용도에 적합한 인터페이스만을 제공

DIP

  • 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야한다.
profile
안녕하세요 반갑습니다

0개의 댓글