본문 바로가기
PROGRAMMING/PYTHON

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

by 안녕나는현서 2021. 7. 30.
728x90

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

 

1. 자료 추상화

  • 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
  • 불필요한 정보를 숨기고 중요한 정보만을 표현 -> 프로그램을 간단하게
  • 자료 추상화를 통해 정의된 자료형 -> 추상 자료형
    • 추상 자료형은 자료 표현과 자료형의 연산을 캡슐화한 것 -> 접근 제어, 정보 은닉
    • 일반적으로 추상 자료형은 클래스
    • 추상 자료형의 인스턴스는 객체
    • 추상 자료형에서 정의된 연산은 메소드(함수)
    • 메소드의 호출을 생성자라고 함

 

2. 상속

  • 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능
  • 상속을 받는 새로운 클래스 : 서브클래스, 파생 클래스, 하위 클래스, 자식 클래스
  • 새로운 클래스가 상속하는 기존의 클래스 : 슈퍼클래스, 기반 클래스, 상위 클래스, 부모 클래스
  • 상속을 통해 자식 클래스를 이용해 프로그램의 요구에 맞추어 클래스 수정 가능
  • 클래스 간의 종속 관계 형성함으로써 객체 조직화 가능

 

3. 다중 상속

  • 클래스가 2개 이상의 클래스로부터 상속받을 수 있게 하는 기능
  • 클래스들의 기능이 동시에 필요할 때 용이
  • 클래스의 상속 관계에 혼란을 줄 수 있음 (ex 다이아몬드 상속)

 

4. 다형성 개념

  • 다양한 형태로 나타날 수 있는 특징
  • 어떤 한 요소에 여러 개념을 넣어 놓는 것
  • 하나의 클래스에 행위를 여러 개 정의하거나, 상위 클래스의 행위를 하위 클래스에서 재정의
  • 일반적으로 오버라이딩이나 오버로딩
    • 오버라이딩 : 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것
    • 오버로딩 : 같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것
  • 다형 개념을 통해 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있음

 

5. 동적 바인딩

  • 실행 시간 중에 일어나거나 실행 과정에서 변결될 수 있는 바인딩
  • <-> 정적 바인딩 : 컴파일 시간에 완료되어 변화하지 않는 바인딩
  • 프로그램의 한 개체나 기호를 실행 과정에 여러 속성이나 연산에 바인딩함으로써 다형 개념 실현

 

<객체 지향 프로그래밍 5원칙 : SOLID>

 

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

  • 객체는 오직 하나의 책임을 가져야함 (오직 하나의 변경의 이유만을 가져야함)
  • 클래스의 목적을 명확히 함으로써 구조가 난잡해지거나 수정 사항이 불필요하게 넓게 퍼지는 것을 예방하고 기능을 명확히 분리할 수 있게 함
  • 하나의 클래스가 두 가지 이상의 책임을 지게 되면
    • 클래스의 목적이 모호해지고
    • 기능을 수정할 때 영향을 받는 범위가 커져서 유지보수가 힘들어지며
    • 작성자조차도 정확히 무엇을 하는 클래스인지 설명할 수 없는 스파게티 코드가 되어버림

 

2. OCP(Open-Closed Principle) : 개방-폐쇄 원칙

  • 객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야함 (객체 기능의 확장을 허용하고 스스로의 변경은 피해야함)

 

3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙

  • 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있음 (부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 잘 작동해야함)

 

4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙

  • 클라이언트에서 사용하지 않는 메서드는 사용해선 안됨 -> 인터페이스를 다시 작게 나누어 만듦

 

5. DIP(Dependency Inversion Principle) : 의존성 역전 원칙

  • 추상성이 높고 안정적인 고수준의 클래스는 구체적이고 불안정한 저수준의 클래스에 의존해서는 안됨
  • (상대적으로 고수준인) 클라이언트는 저수준의 클래스에서 추상화한 인터페이스만을 바라보기 때문에, 이 인터페이스를 구현한 클래스는 클라이언트에 어떤 변경도 없이 얼마든지 나중에 교체될 수 있음

 

 

 

https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

객체 지향 프로그래밍 - 위키백과, 우리 모두의 백과사전

객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러

ko.wikipedia.org

https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%9B%90%EC%B9%99

 

728x90

'PROGRAMMING > PYTHON' 카테고리의 다른 글

[Python] packing과 unpacking  (0) 2021.08.16
[Python] input() vs sys.stdin.readline()  (0) 2021.08.16
[Python] 정규 분포, 확률 분포, 사분위 수  (0) 2021.05.10
[Python] JSON, open API 다루기  (0) 2021.04.28
[Python] Matplotlib  (0) 2021.04.26

댓글