프로필사진

IT Anthology/encyclopedia

[OOP] 객체 지향 프로그래밍에 대한 기본 개념

다각 2022. 3. 1. 18:02

* 이 글은 코드잇의 <객체 지향 프로그래밍> 코스를 수강하고 정리한 글입니다.
* 나중에라도 제가 참고하기 위해 정리해 두었으며, 모든 내용을 적은 것이 아닌,
필요하다고 생각되는 부분만 추려서 정리한 것임을 미리 밝힙니다.


객체란?

: 우리가 살아가면서 보는 모든 존재로, 속성과 행동으로 구성된 존재
: 예시1) 자동차 객체의 속성은 색깔, 의자 개수, 차의 크기 등의 속성이 있으며,
<시동이 걸리는> 행동과 <엑셀을 밟으면 앞으로 나아가는> 행동을 가지고 있음
: 예시2) 인스타그램 유저 객체의 속성은 이메일 주소, 비밀번호, 친구 목록 등이 있으며,
<친구를 추가하는> 행동과 <좋아요 누르는> 행동을 가지고 있음
-> 물리적으로 존재하지 않는다 해도 속성과 행동으로 구성된 존재이므로 객체이다.

객체 지향 프로그래밍이란

객체 지향 프로그래밍의 정의

: 프로그램을 여러 개의 독립된 객체들과, 그 객체들 간의 상호작용으로 파악하는 프로그래밍 접근법이다.
즉, 프로그램을 객체들과 객체들 간의 소통으로 바라보는 것!

객체 지향 프로그래밍의 예시

: 예시) 총 게임 객체 지향 프로그래밍을 한다고 했을 때, 만들 수 있는 객체로는 게임 캐릭처, 총, 총알 등의 객체가 있다.
각 객체에 어떤 속성과 행동이 필요한 지 생각해보면 다음과 같다.

객체 속성 행동
게임 캐릭터 ID, 현재 사용 중인 총, 체력, 목숨 총을 발사한다, 달린다, 체력이 0이 되면 죽는다.
총 객체 모델명, 무게, 장전된 총알 개수 총알을 발사한다.
총알 객체 공격력 총알을 맞은 캐릭터의 체력을 공격력만큼 깎는다.

이후, 게임 캐릭터와 총, 총알이 어떻게 소통할지 생각을 해야 한다.
예시를 다시 살펴 보면,
(1) 게임 캐릭터는 총에게 "발사해"라는 신호를 보낸다.
(2) 총은 총알에게 "나가"라는 신호를 보낸다.
(3) 발사된 총알은 겨눠진 다른 게임 캐릭터에 공격력만큼 체력을 깎으라는 신호를 보낸다.

이렇게 객체지향적으로 설계, 즉 모델링(modeling)하게 되는 것이다.

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

위의 예시를 정리하면, 객체 지향 프로그래밍을 위한 발상의 순서는 다음과 같다.

  1. 필요한 기능(프로그램) 구현하는 데에 필요한 객체가 무엇무엇이 있는지 정의하기.
  2. 정의된 객체가 가지는 각각의 속성과 행동 정의하기
  3. 객체들이 서로 무엇을 소통할지 정해야한다.

파이썬에서의 객체 지향 프로그래밍

파이썬으로 객체 지향 프로그래밍을 배우는 이유는?

파이썬은 순수 객체 지향 언어이다. 이는, 파이썬의 모든 것이 객체라는 뜻이다!
우리가 무심코 사용하는 텍스트나 리스트들은 어떤 클래스의 인스턴스이다!!
type 함수를 이용해서 나오는 결과물은 다 그 인스턴스를 찍어낸 클래스의 이름.

파이썬에서 객체를 만들어내는 방식

파이썬에서는 붕어빵 틀과 같은 객체의 틀을 클래스라고 하며, 클래스에 속성을 부여해서 만들어낸 슈크림 붕어빵, 팥 붕어빵 등이 객체이다.
파이썬에서 객체인스턴스는 같은 의미로 혼용된다. (엄밀히 따지면 조금은 다른 의미... 인스턴스는 객체를 실체화 시킨 것)

여기서 참깐!! 객체와 인스턴스의 차이 예시

  1. 마우스(객체)를 만들어 보자.
  2. 마우스(객체)는 설계도(클래스)를 이용해서 표현할 수가 있지
  3. 마우스(객체)는 왼쪽 버튼, 오른쪽 버튼, 스크롤 휠 등의 버튼(변수)들이 있고, 버튼을 클릭하는 동작(메소드)과 버튼을 돌리는 동작(메소드)이 있다.
  4. 마우스(객체)를 만들면 우리가 만든 설계도(클래스)대로 동작할 테지!
  5. 마우스(객체)를 실제(인스턴스)로 만들어 보자!!
  6. 마우스(객체)를 실제 만들 때마다 시리얼 번호(주소)를 붙이자!

절차 지향 프로그래밍 vs. 객체 지향 프로그래밍

  절차 지향 프로그래밍 객체 지향 프로그래밍
  '객체' 개념은 없으나 '함수' 개념은 있음 '객체' 개념 있음
  프로그램에 필요한 데이터를 관련 있는 함수와 묶어서 관리하기 힘듦 서로 관련 있는 데이터와 함수를 객체로 묶어서 사용할 수 있음
  프로그램을 단지 명령어들을 순서대로 실행하는 것으로 봄 프로그램을 객체들이 순서대로 소통하는 과정으로 봄
  프로그램을 만들 때 데이터와 함수를 합칠 수 없음 프로그램을 만들 때 데이터롸 함수를 합칠 수 있음

여기서 잠깐! '프로그램을 객체 간의 소통으로 본다'는 것의 의미?
: 객체가 프로그램의 기본 단위가 되고, 이 객체 속을 들여다보면 서로 관련된 데이터(객체의 속성)와 동작(객체의 행동)이 모여있다. 그리고 프로그램을 이 객체들이 순서대로 소통하는 과정으로 간주한다.

: 프로그램 용도에 따라 적합한 방식이 다르나, 데이터와 동작의 연관성이 높고 이걸 객체라는 단위로 묶는 것이 낫겠다는 생각이 들면 객체 지향 프로그래밍을 하는 것이 좋다.
: 보통 복잡한 프로그램일수록 객체 지향 프로그램으로 하는 것이 더 낫다.

객체 지향 프로그래밍을 하기 위해 알아야할 4가지 기본 개념

  • 추상화 (Abstraction)
  • 캡슐화 (Encapsulation)
  • 상속 (Ingeritance)
  • 다형성 (Polymorphism)