Swift 객체지향 프로그래밍 (iOS 앱 개발)

개발자의 일상, @munondio 팔로우 해보세요!

프로그래밍에도 코드를 조금 더 효율적으로 만들고 작성하기 위한 패러다임이 존재하는데요. 프로그래밍 패러다임에는 절차 지향형 프로그래밍, 객체지향형 프로그래밍, 함수형 프로그래밍, 논리형 프로그래밍 등이 존재합니다.

한편, Swift 언어는 객체지향형, 함수형, 프로토콜 지향 프로그래밍을 모두 다룰 수 있는 언어입니다. 단, iOS 프레임워크가 객체지향형 프로그래밍으로 구현되어 있어서, 객체지향 프로그래밍을 하도록 권장합니다.

Swift 객체지향 프로그래밍

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

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

객체지향 프로그래밍의 기본 구성 요소에는 클래스, 객체, 메소드, 메시지 등이 존재하는데요.

클래스는 같은 종류의 집단에 속하는 속성과 행위를 정의한 것으로, 사용자 정의 데이터형이라고 할 수 있습니다.

객체는 클래스의 인스턴스로, 자신만의 속성과 행위를 갖고 있습니다.

또, 위 클래스와 객체의 설명에서 속성과 행위는 각각 변수와 함수라고 할 수 있습니다.

클래스 vs 객체

swift ooc programming

클래스와 객체는 쉽게 헷갈릴 수 있는 개념입니다. 클래스와 객체는 위에서도 소개했듯이 엄밀하게 따지면 다른 개념인데요. 사용자 정의 데이터형인 클래스의 인스턴스가 객체인 것입니다.

클래스와 객체는 실생활의 붕어빵 만드는 기계와 붕어빵에 비유해볼 수 있습니다. 붕어빵을 만드는 기계는 클래스이고, 붕어빵은 기계로 만들어진 실제 객체인것이죠. 자동차 도면과, 실제로 출고된 자동차도 클래스와 객체의 또다른 예시가 될 수 있습니다.

즉, 클래스 파일을 메모리에 올리면 객체화가 되고, 객체들의 속성과 명령어가 실행되면서 프로그램이 실행되는 것입니다.

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

객체지향 프로그래밍의 특징에는 5가지 큰 특징이 있는데요. 추상화, 캡슐화, 은닉화, 상속성, 다형성이 그 주인공입니다.

추상화는 객체들의 공통적인 부분을 뽑아내서 따로 구현해놓는 것을 말합니다. 그러나 공통적인 부분만 뽑아내기 때문에 구체적인 정보를 담지는 못하고, 추상적인 정보가 주로 모여있어 '추상'화가 특징인 것입니다.

캡슐화와 은닉화는 보통 같이 발생하는 특성인데요. 객체의 속성과 행위를 하나로 묶고(캡슐화), 실제 구현 내용 일부를 외부에 감추는(은닉화) 것입니다.

상속성은 상위의 것을 하위의 것이 물려받을 수 있는 특징을 말하는데요. 주로 하나의 클래스가 갖고 있는 속성과 행위를 다른 클래스가 물려받을 때 사용합니다.

다형성은 하나의 메소드나 클래스를 다양한 방법으로 동작시키는 것을 의미하는데요. 오버로딩이나 오버라이딩이 이것의 대표적인 예시입니다. 오버로딩은 같은 이름의 함수를 파라미터에 따라 다양하게 구현하는 것을 의미하고. 오버라이딩은 상위 클래스가 가지고 있는 메소드가 하위 클래스로 상속되어 하위 클래스에서 재정의해서 사용하는 것을 의미합니다.

Swift 클래스의 구조

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

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