Layer 7-객체지향이란?
프로그래밍을 접해 본 사람이라면 "객체 지향 프로그래밍"이라는 말을
들어본 적이 있을 것이다. 하지만, 객체 지향이라는 개념을 정확히
이해하는 사람은 그렇게 많지 않을 것이다.
과연 객체 지향이란 무엇일까?
객체 지향 프로그래밍
조금 말이 어려운가?
간단히 말해 객체 지향 프로그래밍이란 객체를 만들어 프로그래밍
하는 방법을 말한다.
객체란? 현실에 물리적으로 존재하거나(자동차, 책, 사람), 추상적인 것(회사, 날짜, 사랑)과 같은
것들에서 속성과 동작을 가지는 모든 것을 말한다.
따라서 객체 지향 프로그래밍이란 현실에 존재하는 이런 객체를
컴퓨터로 모방하는 프로그래밍 방식이다.
그렇다면 어떤 식으로 모방을 하는 것일까?
객체 지향 언어에서는 주로 클래스, 객체라고 부르는 이 두 가지가 있다.
그렇다면 클래스는 무엇이고, 객체는 무엇인지 지금부터 알아보자.
먼저, 클래스(class)는 추상적인 개념이며,
객체(Object)는 추상적인 개념을 실제로 구현한 것이라고 보면 되겠다.
무슨 말인지 이해가 가는가? 저 글만 보고 이해가지 않는 게 정상이다.
많은 사람들이 이 클래스와 객체을 다양한 비유를 사용해 설명한다.
어떤 사람은 자동차 설계 도면과 자동차.
어떤 사람은 과자틀(class) -> 과자 틀로 만들어진 과자들(instance),
어떤 사람은 도장(class)과 종이에 찍은 도장 모양(instance),
어떤 사람은 붕어빵을 만드는 붕어빵 틀과 붕어빵이라고도 표현을 한다.
우리가 자동차를 만든다고 생각해보자.
여기서 이 자동차를 만드는 설계도를 "클래스"라고 부른다.
그리고 이 설명서를 이용해 만든 자동차가 "객체"가 된다.
위의 예시도 똑같다.
어떤 객체를 만드는 틀 또는 설명서가 되는 이것을 우리는 클래스라고
부르며, 그 틀을 이용해서 만든 결과물을 객체라고 부른다.
객체 지향 프로그래밍에서 이 객체는 객체 자신의 속성과 동작을 가진다.
가령, 사람이라는 현실 객체를 컴퓨터 프로그래밍으로 옮긴다고 하면
다음과 같이 클래스(틀, 설계도)를 만들 수 있을 것이다.
클래스 사람
속성
-이름
-주민등록번호
동작
-숨쉬기
-걷기
-뛰기
이런 식으로 말이다.
객체와 클래스가 조금 이해가 됐는가?
여담이지만, 객체를 Instance, Object이 두 단어를 혼용해서 사용했는데 실제로 조금 다른 뜻을 가집니다.
※ 객체와 인스턴스는 같은 말은 아니지만 위 문서에서는 같은 의미로 사용 했으며, 설명이 어렵고 개념이 애매하다고 생각하여 객체와 인스턴스의 차이를 다루는 과정은 넣지 않았습니다.
객체지향의 특징
1. 캡슐화(Encapsulation)
: 속성(데이터)와 함수를 하나로 묶은 것
예를 들면, 사람이라는 클래스에 속성(이름, 주민등록번호)와
객체의 동작을 클래스라는 설계도로 하나로 묶은 것을 말한다.
2. 정보은닉(Information Hiding)
: 객체 외부에 자신의 정보를 숨기고 자신의 연산만을 통해 접근
을 허용한다는 것이다.
객체 외부에서 객체의 데이터에 함부로 접근할 수 없다.
3. 상속(Inheritance)
: 이미 정의된 클래스의 모든 속성과 연산을
하위 클래스가 물려 받는 것이다.
4. 다형성(Polymorphism)
: 오버로딩, 오버라이딩과 같은 프로그래밍 기법을 이용해
같은 이름으로 다른 동작을 구현할 수 있다.
객체 지향을 쓰면 좋은 점
객체 지향 프로그래밍 언어에서는 속성과 이를 처리하거나 어떤 결과를 나타내는
함수가 하나의 묶음으로 존재한다.
따라서 여러 기능적인 부분들을 따로 만들고, 마지막에 이를 불러와
객체을 만드는 모듈화가 가능하다.
예를 들어 자동차 객체를 만든다고 할 때,
자동차의 구성인 엑셀, 브레이크, 핸들과 같은 부분부분들을
따로 설계해서 마지막에 합쳐 자동차 객체를 만드는 것과 같은 방법으로 프로그래밍이 가능하다.