본문 바로가기
공부/[개발 관련]

[개발 관련] 객체지향 프로그래밍에 대하여

by 인생은아름다워 2022. 1. 15.

✏️  객체지향 프로그래밍?

객체지향 프로그래밍 패러다임이란? 프로그램을 만드는 것을 어떤 시각으로 바라볼 것인지? 이런 관점을 의미하는 것.

그렇다면 객체랄 뭘까? 객체 : 세상에 존재하는 특성과 행위를 가지는 모든 것

 

기존의 프로그래밍은 여러가지 명령, 그리고 그 순서의 집합이었는데 이 프로그래밍이 생활에 밀접해지며 프로그래밍을 통해 많은 문제들을 구현하게 되면서 세상의 모든 것을 프로그래밍으로 해결하고자 하면서 객체지향 프로그래밍이 생겨났다.

즉, 세상의 모든 것(객체)를 프로그래밍으로 표현하고, 그 객체들간의 상호작용을 적절히 잘 표현하는 것이 객체지향 프로그래밍 패러다임 이라고 볼 수 있을 것이다.

 

다시 말해서 객체지향 프로그래밍 패러다임으로 프로그래밍을 하려면, 어떤 객체를 잘 표현하고 그 객체들의 상호작용을 잘 구현하면 되는 것이다. 여기서 객체를 잘 만든다는 것, 객체를 만들 때는 다음의 네 가지 과정을 거치게 된다.

 

일반화(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 = "파킹"
	}

}

 

 

🍎  결론

객체지향 프로그래밍이라는 말을 정말 수도 없이 많이 들어봤는데, 그래도 대충 어떤 말인지는 알 것 같다.

이게 정확하게 뭐다! 라고 정의할 수 있는 개념은 아닌 것 같고, 앞으로 프로그래밍을 하면서 많은 고민을 하고, 그 고민들을 통해 객체지향 프로그래밍의 시각에서 프로그래밍 하려고 노력하는 것이 중요한 것 같다!

댓글