Swift 객체지향 프로그래밍

  • 프로그래밍에도 코드를 조금 더 효율적으로 만들고 작성하기 위한 패러다임이 존재한다.
  • 절차 지향형 프로그래밍, 객체지향형 프로그래밍, 함수형 프로그래밍, 논리형 프로그래밍 등이 존재한다.
  • 한편, Swift 언어는 객체지향형, 함수형, 프로토콜 지향 프로그래밍을 모두 다룰 수 있는 언어이다.
  • 단, iOS 프레임워크가 객체지향형 프로그래밍으로 구현되어 있어서, 객체지향 프로그래밍을 하도록 권장한다.

Swift 객체지향 프로그래밍

  • 객체지향 프로그래밍은 프로그램을 명령어의 집합으로 보는 것을 넘어, 여러 객체들의 모임으로 보는 것이다.
  • 각각의 객체는 메시지를 주고 받을 수 있으며, 데이터를 처리할 수 있다.

객체지향 프로그래밍의 기본 구성 요소

  • 객체지향 프로그래밍의 기본 구성 요소에는 클래스, 객체, 메소드, 메시지 등이 존재한다.
  • 클래스는 같은 종류의 집단에 속하는 속성과 행위를 정의한 것으로, 사용자 정의 데이터형이라고 할 수 있다.
  • 객체는 클래스의 인스턴스로, 자신만의 속성과 행위를 갖고 있다.
  • 또, 위 클래스와 객체의 설명에서 속성과 행위는 각각 변수와 함수라고 할 수 있다.

클래스 vs 객체

swift-oop
  • 클래스와 객체는 쉽게 헷갈릴 수 있는 개념이다.
  • 클래스와 객체는 위에서도 소개했듯이 엄밀하게 따지면 다른 개념이다.
  • 사용자 정의 데이터형인 클래스의 인스턴스가 객체인 것이다.
  • 클래스와 객체는 실생활의 붕어빵 만드는 기계와 붕어빵에 비유해볼 수 있다.
  • 붕어빵을 만드는 기계는 클래스이고, 붕어빵은 기계로 만들어진 실제 객체인 것이다.
  • 자동차 도면과, 실제로 출고된 자동차도 클래스와 객체의 또다른 예시가 될 수 있다.
  • 즉, 클래스 파일을 메모리에 올리면 객체화가 되고,
  • 객체들의 속성과 명령어가 실행되면서 프로그램이 실행되는 것이다.

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

  • 객체지향 프로그래밍의 특징에는 5가지 큰 특징이 있다.
  • 추상화, 캡슐화, 은닉화, 상속성, 다형성이 그 주인공이다.
  • 추상화는 객체들의 공통적인 부분을 뽑아내서 따로 구현해놓는 것을 말한다.
  • 그러나 공통적인 부분만 뽑아내기 때문에 구체적인 정보를 담지는 못하고,
  • 추상적인 정보가 주로 모여있어 '추상'화가 특징인 것이다.
  • 캡슐화와 은닉화는 보통 같이 발생하는 특성이다.
  • 객체의 속성과 행위를 하나로 묶고(캡슐화), 실제 구현 내용 일부를 외부에 감추는(은닉화) 것이다.
  • 상속성은 상위의 것을 하위의 것이 물려받을 수 있는 특징을 말한다.
  • 주로 하나의 클래스가 갖고 있는 속성과 행위를 다른 클래스가 물려받을 때 사용한다.
  • 다형성은 하나의 메소드나 클래스를 다양한 방법으로 동작시키는 것을 의미한다.
  • 오버로딩이나 오버라이딩이 이것의 대표적인 예시이다.
  • 오버로딩은 같은 이름의 함수를 파라미터에 따라 다양하게 구현하는 것을 의미하고,
  • 오버라이딩은 상위 클래스가 가지고 있는 메소드가 하위 클래스로 상속되어,
  • 하위 클래스에서 재정의해서 사용하는 것을 의미한다.

Swift 클래스의 구조

객체지향 프로그래밍 언어인 Swift 클래스의 기본적인 구조는 다음과 같습니다.

class ClassName : superClass
{
	var vName1 = 1
	var vName2 = 4
    
	func fName1() -> Any
	{
	}
    
	func fName2() -> Any
	{
	}	
}