개발을 하다 보면 객체지향 프로그래밍이란 말을 정말 많이 들어본다. 객체지향 프로그래밍이란 무엇일까
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)
'개린이 이야기' 카테고리의 다른 글
직렬(Serial)과 동시(Concurrent) (0) | 2022.09.22 |
---|---|
프로세스와 쓰레드, 동기와 비동기 (0) | 2022.09.21 |
AppDelegate와 Scene Delegate에 관하여 (0) | 2022.09.20 |
요리도감 프로젝트를 진행하면서 느낀점 (2) | 2022.09.19 |
모든 ios개발자가 알아야 할 중요한 사항 (0) | 2022.08.13 |