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

ro_ot ㅣ 2020. 10. 5. 11:21

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

객체 지향 프로그래밍

컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다.

각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

 

가장 큰 특징은 클래스를 이용해 연관 있는 처리부분(함수)과 데이터 부분(변수)를 하나로 묶어 객체(인스턴스)를 생성해 사용한다는 점이다.

또한, 프로젝트를 독립적인 객체 단위로 분리해서 작업할 수 있기 때문에 유지보수 측면도 뛰어나다.

더보기

객체 지향 프로그래밍과 클래스 기반 프로그래밍의 차이점


객체지향은 네 가지 특징(추상화, 캡슐화, 상속, 다형성)을 골고루 사용해 코딩하는 프로그래밍이다.

클래스 단위 프로그래밍은 이런 특징을 고려하지 않고 클래스만을 이용해 코딩하는 방식을 말한다.

 

클래스 단위 코딩을 객체지향 프로그래밍이라고도 부를 수 있다.

클래스를 만들어 코딩 하는 자체에 이미 객체지향의 네 가지 특징중 캡슐화와 은닉성을 사용하고 있기 때문이다.


 

 

객체 지향 프로그래밍의 장점

클래스에 문제 해결을 위한 데이터를 모아 놓은 데이터형 사용으로 인한 응집력(Strong Cohesion) 강화 및 클래스 간 독립적 디자인에 의한 결합력(Weak Coupling) 약화 가능

  • 프로그램을 유연하고 변경이 용이하게 만든다.
  • 소프트웨어 개발과 보수를 간편하게 한다.
  • 직관적인 코드 분석을 가능하게 한다.

객체 지향 프로그래밍의 단점

  • 처리속도가 상대적으로 느리다.
  • 객체가 많으면 용량이 커진다.
  • 설계시 많은 시간과 노력이 필요하다.

 

기본 구성 요소

  • 클래스(Class)
  • 객체(Object)
  • 메서드(Method), 메시지(Message)

 

특징

  • 자료 추상화 - 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것
  • 상속 - 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능
  • 다형성 개념 - 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩이나 오버로딩을 의미
  • 캡슐화(은닉화) - 내부의 동작 방법을 숨기고 사용자에게는 사용 방법만 노출시키는 것

 

추상화(abstractions)

  • 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어 이름을 붙히는 것
  • 기린, 사자, 호랑이, 강아지라는 각각의 객체를 동물이라는 추상적인 객체로 정의 하는 것
  • 공통된 속성과 행위를 추출하는 것

 

상속(inheritances)

  • 상위 객체의 속성을 하위 객체가 물려 받는 것
  • 부모 클래스의 속성을 자식 클래스가 물려 받아 재사용이 가능하며 자식 클래스에서 재정의 하여 사용이 가능하다.

 

다형성(polymorphism)

  • 상속 받은 기능을 변경 및 확장하는 것
  • 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있다.
  • 오버라이딩(overriding), 오버로딩(overloading) 이 가능하다.
더보기

오버라이딩


  • 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것
  • 부모 클래스로부터 상속을 받은 속성에 대해, 자식 클래스에서 물려받은 속성을 재정의 하는 것
  • 부모 클래스의 기능을 그대로 사용하면서 동시에 기능을 추가 가능하다.

 

오버로딩


  • 같은 이름의 메소드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것
  • 즉, 같은 클래스에서 같은 이름을 가진 메소드가 여러개 존재하고 있는 상태
  • 메소드의 이름은 같으나 매개변수(arguments)가 다르다.
  • 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것

 

캡슐화(encapsulation)

  • 하나의 객체가 특정한 목적을 달성하기 위해 변수, 함수를 하나로 묶는 것
  • 변수 및 함수가 분산돼 있어 재활용이 어려웠으나 캡슐화를 통해 기능과 특성을 한 곳에 모으고 분류함으로써 재활용이 원할해짐
  • 객체 지향 프로그래밍에서 기능과 특성의 모음을 "클래스"라는 "캡슐"에 분류해서 넣는 것
  • 클래스를 만들 때 목적을 명확하게 정하고 그에 따른 기능들을 관련성 있게 변수나 함수를 만들어야 함

 

클래스(Class)

  • 문제 해결을 위한 데이터를 만들기 위해 추상화를 거쳐 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것

 

인스턴스(객체)

  • 클래스에서 정의한 것을 토대로 실제 메모리상에 할당괸 것으로 실제 프로그램에서 사용되는 데이터

 

객체

  • 물리적으로 존재하거나(자동차, 책, 사람), 추상적인 것(회사, 날짜) 중에서 자신의 속성과 동작을 가지는 모든 것을 말함

'python' 카테고리의 다른 글

자주 사용하는 keyword  (0) 2020.10.06
Python 기초  (0) 2020.10.05
Python 변수  (0) 2020.09.29
python 가상환경(pyenv)  (0) 2020.06.12
웹 API  (0) 2020.02.21