TIL/UIKit 내용 정리

UIKit Deep Dive: 절차지향과 객체지향 그리고 프로토콜지향

여의도사노비 2022. 7. 10. 20:44
728x90

UIKit을 공부하기 전에 기본적인 정보부터 알고 넘어가는 것이 좋다는 글들이 많아 참고하여 공부계획을 세웠다.

 

첫번째로 절차지향이다.

 

절차적 프로그래밍(節次的 프로그래밍, 영어: procedural programming)은 절차지향 프로그래밍 혹은 절차지향적 프로그래밍이라고도 불리는 프로그래밍 패러다임의 일종으로서, 때때로 명령형 프로그래밍과 동의어로 쓰이기도 하지만, 프로시저 호출의 개념을 바탕으로 하고 있는 프로그래밍 패러다임을 의미하기도 한다. 

(출처 : https://ko.wikipedia.org/wiki/%EC%A0%88%EC%B0%A8%EC%A0%81_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)

 

절차적 프로그래밍 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

정리하자면

  • 결국 절차 지향 프로그래밍이란 순차적인 처리가 중요하며 프로그램 전체가 유기적으로 연결된 방식이다.
  • 대표적인 절차지향 언어에는 C언어가 있다.
  • 과거에는 절차지향 언어를 사용하여도 하드웨어, 소프트웨어 간의 개발 속도에 큰 차이가 없었지만. 최근에는 하드웨어의 빠른 발전 속도를 따라잡고자 더 빨리 개발 가능한 객체지향 언어를 사용하게 되었다.
  • 장점으로는 컴퓨터의 처리구조와 유사해 실행속도가 빠르다는 것, 단점으로는 유지보수가 어렵고 디버깅이 어렵다는 것이다.

 

두번째로 객체지향이다.

 

객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

객체 지향 프로그래밍은 프로그램을 유연하고 변경이 쉽게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점이 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다.

(출처: https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)

 

자료 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

정리하자면

  • 객체지향이란 실제 세계를 모델링하여 소프트웨어를 개발하는 방식이다.
  • 4가지 특성을 지닌다.
    • 캡슐화 : 관련된 데이터와 알고리즘이 하나의 묶음으로 정리된 것. 데이터와 알고리즘을 외부에서 알 수 없도록 감추고, 외부 세계와의 상호작용은 메소드를 통해 이루어짐.
    • 상속 : 이미 작성된 클래스를 이어 받아 새로운 클래스를 생성하는 기법, 기존 코드를 재활용하기에 용이함.
    • 다형성 : 상속과 연관된 개념으로, 하나의 객체가 다른 여러 객체로 재구성되는 것.
    • 추상화 : 실존하는 객체의 여러 특성 중, 프로그램을 만드는데 필요한(공통적인) 부분만 파악해서 추출하고 필요하지 않은 것은 제거하는 것.

       

  • 장점으로는 코드의 재활용성이 높고 디버깅이 쉬워 절차지향에 비해 개발이 쉽다는 것, 단점으로는 처리속도가 절차지향보다 느리고 설계에 많은 시간이 소모된다는 점이다.

 

마지막으로 프로토콜 지향이다.

 

프로토콜이란 특정 기능에 필요한 메소드, 프로퍼티 등을 정의해 놓은 것을 말한다. (구현 X, 선언 O)

 

그렇다면 프로토콜 지향 프로그래밍이란?

필요한 부분만을 프로토콜로 분리하여 프로그래밍 하는 것을 말한다.

프로토콜을 체택할 경우 프로토콜이 가지고 있는 내부 프로퍼티와 메소르를 반드시 구현해야한다.

프로토콜 지향 프로그래밍은 기능을 프로토콜이라는 단위로 묶어 표현하고 초기 구현을 해 둘 수 있으니 상속이라는 한계점을 탈피할 수 있습니다.

(참조: https://velog.io/@ellyheetov/Protocol-Oriented-Programming, https://blog.yagom.net/531/)

 

정리하자면

  • 프로토콜을 채택할 경우 프로토콜이 가지고 있는 메소드를 사용 가능하다.
  • 프로토콜 지향 프로그래밍을 하는 이유는 결국 기능의 모듈화가 더 명확해지기 때문이다.
  • 장점으로는 Super Class에 독립적이고 값 타입을 사용 가능하며 값 타입 사용시, 상속을 할 수 없으므로 매번 기능을 다시 구현해야 하는 한계를 극복한다는 것이다. 또한 기능의 모듈화 기능이 있다.