✏️ 객체지향 프로그래밍?
객체지향 프로그래밍 패러다임이란? 프로그램을 만드는 것을 어떤 시각으로 바라볼 것인지? 이런 관점을 의미하는 것.
그렇다면 객체랄 뭘까? 객체 : 세상에 존재하는 특성과 행위를 가지는 모든 것
기존의 프로그래밍은 여러가지 명령, 그리고 그 순서의 집합이었는데 이 프로그래밍이 생활에 밀접해지며 프로그래밍을 통해 많은 문제들을 구현하게 되면서 세상의 모든 것을 프로그래밍으로 해결하고자 하면서 객체지향 프로그래밍이 생겨났다.
즉, 세상의 모든 것(객체)를 프로그래밍으로 표현하고, 그 객체들간의 상호작용을 적절히 잘 표현하는 것이 객체지향 프로그래밍 패러다임 이라고 볼 수 있을 것이다.
다시 말해서 객체지향 프로그래밍 패러다임으로 프로그래밍을 하려면, 어떤 객체를 잘 표현하고 그 객체들의 상호작용을 잘 구현하면 되는 것이다. 여기서 객체를 잘 만든다는 것, 객체를 만들 때는 다음의 네 가지 과정을 거치게 된다.
일반화(Generalization) : 객체의 공통 특징을 뽑아내는 것
추상화(Abstraction) : 일반화 된 객체에서 내가 원하는, 내가 필요한 특성만을 추리는 것
은닉화(Hiding) : 주요 사항이 겉으로 드러나지 않도록 감추는 것
캡슐화(Encapsulation) : 은닉화된 특성을 외부에서 사용할 수 있도록 방법을 제공하고 외부와 소통하도록 하는 것
자 이러한 네 가지 과정을 거쳐서 자동차 라는 객체를 만들어 볼까 한다!
자동차의 공통된 특징은 뭐가 있을까?
타입, 색깔, 기능, 연비, 무게, 가격, 인승, 주행거리 등... (일반화)
이 중에서 내가 프로그래밍 할 때 필요한 특성들만 골라보자! (추상화)
기능 : 전진, 후진, 파킹
색깔 : 검정색
주행거리 : 40000km
전/후진, 그리고 파킹같은 경우 기어변속이 필요하고, 여러 부품들의 변화가 있겠지만, 사용자 입장에서는 전진/후진 이라는 사실만 알면 된다! 그러니까 전진이든 후진이든 한다는 사실만 알고, 실제 차가 어떻게 동작하여 이동하는지는 알 필요가 없다.(은닉화)
마지막으로, 사용자 입장에서 전진/후진/파킹 을 할 수 있게끔 기능으로 존재는 해야지!(캡슐화)
이러한 과정을 Car라는 클래스로 구현해보면 아래와 같다.
import UIKit
class Car {
var color: UIColor = .white
var odo: Int = 0
var gear: String = "파킹"
func goFoward() {
self.gear = "전진"
}
func goBackward() {
self.gear = "후진"
}
func makeParking() {
self.gear = "파킹"
}
}
🍎 결론
객체지향 프로그래밍이라는 말을 정말 수도 없이 많이 들어봤는데, 그래도 대충 어떤 말인지는 알 것 같다.
이게 정확하게 뭐다! 라고 정의할 수 있는 개념은 아닌 것 같고, 앞으로 프로그래밍을 하면서 많은 고민을 하고, 그 고민들을 통해 객체지향 프로그래밍의 시각에서 프로그래밍 하려고 노력하는 것이 중요한 것 같다!
'공부 > [개발 관련]' 카테고리의 다른 글
[개발 관련] MVC(Model-View-Controller)디자인 패턴에 대하여 (0) | 2022.01.29 |
---|---|
[개발 관련] Design pattern(디자인 패턴)에 대하여 (0) | 2022.01.29 |
[개발 관련] Linter에 대하여 (0) | 2022.01.08 |
[PR: Pull Request에 대하여] PR의 목적과, 좋은 PR이란 어떤 것일까? (0) | 2022.01.04 |
공부/[개발관련][ Django(장고)] - 파이썬을 이용한 서버개발 3 - 장고의 기초적인 개발 순서 (0) | 2021.07.07 |
댓글