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

객체지향 프로그래밍에 대해

최근 회사에서 python으로 개발을 하고있다.
python 언어를 처음 써본지라, 공부할게 많고 OOP를 잘 모르는 지라 절차지향 프로그래밍으로 개발을 했는데... 최종적으로는 OOP 개발을 하기 위해 공부하는 과정에서 아래 글을 끄적여 본다.

객체지향 프로그래밍

- 실제 세계를 모델링 하는 방식으로 프로그래밍 하는 방법
- 데이터, 기능을 하나의 클래스로 정의하고 객체를 생성하며, 이런 객체들의 상호작용을 통해 프로그래밍 한다

객체지향 특징

  • 추상화
      - 객체의 모든 정보가 아닌, 필요한 데이터와 기능을 정의하는 것
      - 노트북을 객체로 정의할떄, 노트북의 모든 기능을 뽑아서 정의하는 것이 아니라 필요로한 데이터와 기능만을 추려서 정의하는것을 추상화라한다.

  • 캡슐화
      - 객체의 데이터를 공용 메소드를 통해서만 변경하도록 하는 방법 (데이터 캡슐화)
      - 캡슐화와 정보은닉은 동일한 개념이 아님
      - 정보은닉은, 복잡하거나 변경가능한 설계 개념을 안전한 인터페이스 뒤로 숨기는 설계원리로 정보은닉의 목적은 변경의 유연성을 제공하는 것이다.

  • 상속
      - 부모(상위)의 개념을 자식(하위)이 그대로 물려받는 것
      - 왜 쓰는가? 코드의 재사용과 확장을 쉽게 하기위해서
      - Parent 라는 부모 클래스가 있다고 하자. Child라는 Parent의 자식 클래스는 Parent가 만들어놓은 기능을 그대로 물려받을 수 있다. (코드의 재사용)
      - Parent의 기능을 Child에서 기능 변경없이 확장할 필요가 있다고 하자. 오버라이딩을 통해 Parent 기능은 그대로 유지하고 확장할 부분만 Child에서 구현하면 된다. (확장)

  • 다형성
      - 하나의 객체의 기능이 다양한 객체의 기능을 수행하는 것
      - 왜 쓰는가? 코드의 간결함과 라인 수를 줄일 수 있다. 객체를 매개변수로 받는 함수 A가 있다고 하자. 이 함수를 여러 객체가 사용한다고 한다면, 객체 수만큼 함수를 정의해야 한다. 하지만 다형성을 통해 하나의 객체가 여러 객체의 타입을 받을 수 있으므로 불필요한 중복 코드를 제거할 수 있다.
      - 다형성은 상속과 인터페이스로 구현가능하다. 상속의 경우 부모 클래스가 여러 자식 클래스들의 객체를 가리킬 수 있으며, 인터페이스 역시 자신의 메소드를 구현하는 모든 클래스를 가리킬 수 있다.

  • 추상 클래스와 인터페이스?
      - 추상 클래스는 하나 이상의 추상 메소드를 가진 클래스.
      - 추상 메소드란, 메소드의 정의만 선언한 후, 구현은 자식클래스에게 맡긴다.
      - 인터페이스는 모든 메소드가 추상 메소드로, 모든 메소드의 기능은 구현을 하는 클래스에게 위임한다.

레퍼런스



댓글 없음:

댓글 쓰기