객체지향 프로그래밍이란?
permalink: /:categories/:title/
객체지향 프로그래밍 (Object Oriented Programming)
장고를 공부하다가 객체지향이란 말이 오랜만에 언급되어 겸사겸사 정리하려 한다.
우선 절차지향 프로그래밍은 한 프로그램 전체가 유기적으로 작동되는 것이다. 반면 객체지향 프로그래밍은 독립된 객체 하나하나가 선언되고, 그 객체들 간 유기적인 상호작용응 통해 프로그램이 작동하는 것이다.
객체지향에서는 클래스가 선언되고, 그 클래스 내에서는 사용되는 변수, 함수(method)가 선언된다. 클래스 각자가 동작하는 것이라고 이해하면 쉽다. 이를 통해 얻는 가장 큰 장점은 코드 재사용이 가능해서 유지 보수를 감소시킨다는 점이다.
객체 지향 프로그래밍은 다음과 같은 네 가지 특성을 가진다.
-
Abstraction(추상화)
: 공통적인 특징을 찾아내어 클래스를 설계할 수 있다는 것이다. 예로, 핸드폰에서는 다양한 기능을 수행한다. 이때, 촬영 기능에 쓰이는 변수와 함수들을 묶고, 전화 기능에 쓰이는 변수와 함수들을 묶을 수 있다. 이렇게 공통의 속성이나 기능을 묶는 방법으로 설계하는 것을 의미한다. -
Encapsulation(캡슐화)
: 객체의 내용 중 숨기고 싶은 부분에 대해서는 외부에서 접근 할 수 없게 할 수 있다. 해당 부분에 대해서는 객체 내 함수에 의해서만 접근 가능하도록 하는 것이다. 정보 은닉을 가능케한다.public, private, protected
와 같은 문법으로 접근 권한을 조정한다. -
Inheritance(상속)
: 클래스를 재사용하는 것이다. 클래스를 상속받게 되면, 멤버 변수들을 그대로 물려 받을 수 있는 등 코드를 재활용할 수 있다. 같은 기능을 하는 변수나 함수를 그대로 사용할 수 있다. -
Polymorphism(다형성)
: 같은 모양의 함수가 상황에 따라 다르게 동작하는 것을 의미하며, 오버로딩과 오버라이딩이 있다. 이 개념은 구분하기 헷갈리는 개념이므로 짚고 넘어가자.
- 오버로딩(Overloading): 같은 이름의 함수를 여러 개 정의하고, 그 매개 변수의 유형과 개수를 다르게 해서 다양하게 사용하는 것을 의미한다. 즉, 함수의 이름은 같지만 함수의 매개변수 숫자, 타입이 달라 상황에 맞게 사용된다.
- 오버라이딩(Overriding): 상위 클래스의 메소드를 하위 클래스에서 똑같은 이름으로 재정의 하는것을 의미한다.