본문 바로가기
개린이 이야기

객체지향프로그래밍(OOP)

by iOS 개린이 2022. 9. 20.

개발을 하다 보면 객체지향 프로그래밍이란 말을 정말 많이 들어본다. 객체지향 프로그래밍이란 무엇일까

 

1. 객체지향프로그래밍(oop)

-컴퓨터 프로그래밍 패러다임의 하나이다.

-프로그래밍에서 필요한 데이터를 추상화시켜서 객체들을 만들고, 그 객체들 간의 상호작용을 통해 구성되는 프로그래밍 방법.

-여러 객체들의 모임으로 각 객체들은 메시지를 주고받거나, 데이터를 처리할 수 있다.

-목적은 코드의 재사용성과 중복제거이다.

-대표적인 구성요소로 class, object, method 등이 있다.

 

1) class

-class는 청사진으로 어떤 집단의 속성과 행위를 정의해 놓은 것이다. (속성과 행위는 property와 method라고 할 수 있다.)

-class는 어떤 틀이라고 할 수 있다. 쉽게 예를 들자면 공장에서 별 모양의 젤리를 만들어내는데 여기서 별 모양 틀을 가진 기계가 class인 것이다. 

 

2) object (객체)

-object는 해당 class를 인스턴스로 받아 메모리에 할당시켜 프로그램에서 사용되는 데이터이다.

-class를 실체화한 것 즉, class라는 틀에 찍힌 젤리로 실제 객체라고 할 수 있다.

-class가 객체화를 통해 메모리에 올라가고, 각 객체들의 속성과 행위가 상호작용하면서 프로그램이 실행되는 것이다.

 

 

2. 객체지향 프로그래밍의 특징

-크게 추상화, 캡슐화(은닉화), 상속, 다형성이라는 4가지 특징을 가지고 있다.

 

1) 추상화

-불필요한 부분을 무시하고, 필요한 공통적인 특성만 다루어서 복잡성을 줄이며, 목적에 집중할 수 있도록 단순화시키는 것이다.

-객체의 공통적인 속성과 기능을 추출해서 정의하는 것이다.

ex) 사자, 고양이, 호랑이라는 객체들은 모두 공통적으로 포유류로 추상화시키는 것

-추상화의 예로 protocol을 들 수 있다. protocol은 protocol 내 프로퍼티의 type만 지정해주고 채택한 곳에서 구현하는 것인데, 여기서 type을 정의하는 것이 추상화라고 볼 수 있다.

 

2) 캡슐화

-객체 상태를 나타내는 속성 정보를 private 하게 관리하는 것을 말한다. 

-프로그램을 만드는 개발자와 실제로 사용하는 유저가 서로 같은 정보를 볼 수 없게 하는 것이다. 은닉화라는 특성과 더불어서 굳이 유저가 알 필요가 없는 데이터에 접근하지 못하게 해서 개발자에게만 필요한 메시지를 얻을 수 있다.

ex) print("데이터 전송완료")

 

3) 상속

-어떤 super class를 sub class가 상속받아서 super class에 있는 속성과 기능을 sub class가 동일하게 사용할 수 있게 한다.

-상속은 수직으로 확장하는 방식이고, extension은 수평으로 확장하는 방식이다.

 

4) 다형성

-다형성은 어떤 한 기능을 다양한 방법으로 동작시키는 것을 말한다.

-override가 다형성의 대표적인 예시로 super class에 있는 method를 sub class에서 재정의 해서 사용하는 것이다.

-overloading도 다형성의 대표적인 예시로 동일한 이름으로 method들이 존재한다고 할 때, 매개변수의 이름, 타입, 개수 등의 차이에 따라서 method가 실행되는 것이다. 

 

 

장점

-재사용성 : 상속을 통해 다른 class의 속성과 기능을 이용할 수 있고, 확장도 사용할 수 있다.

-수정해야 할 부분이 class내부에 프로퍼티 혹은 메서드로 존재한다. 따라서 해당 부분을 수정하는 일이 쉽고 그로 인해 유지보수가 쉬워진다.

 

단점

-처리속도가 상대적으로 느리다.(많은 오버헤드 발생)

-객체가 많으면 용량이 커질 수 있다.

 

 

 

 

 

 

-참고:

Swift 객체지향 프로그래밍 | Hohyeon Moon

[Swift] 객체지향 프로그래밍(OOP, Object-Oriented Programming) in Swift - jinShine

[Swift] OOP(객체지향 프로그래밍)과 POP(프로토콜지향 프로그래밍) (tistory.com)