나의 기록, 현진록

[Swift] 1.2.1 객체지향 / 객체지향 프로그래밍 패러다임 본문

Programming/Swift

[Swift] 1.2.1 객체지향 / 객체지향 프로그래밍 패러다임

guswlsdk 2021. 6. 29. 00:37
반응형

객체 지향은 현대 프로그래밍 언어에서 대부분 차용하고 있다.

 

객체지향 프로그래밍 패러다임

객체지향 프로그래밍 패러다임은 컴퓨터 프로그래밍 패러다임의 한 종류로 객체지향 프로그래밍(OOP : Object-Oriented Programming)이라고도 불립니다. 객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 기존의 명령형 프로그래밍 패러다임의 시각에서 벗어나 여러 개의 독립된 단위인 객체의 모임으로 파악하고자 하는 시각입니다. 각각의 객체는 서로 메시지를 주고 받고 데이터를 처리할 수 있습니다.

 

객체지향 프로그래밍은 프로그램을 유연하고 쉽게 변경할 수 있도록 작성할 수 있어 대규모 소프트웨어 개발에 많이 사용됩니다. 또한 객체만 잘 이해하면 프로그래밍을 더 쉽게 배울 수 있고, 소프트웨어 개발과 유지보수를 간편하게 할 수 있으며, 직관적으로 코드를 분석할 수 있다는 장점이 있다.

 

소프트웨어의 질을 향상하려면 강한 응집력(Strong Cohesion)과 약한 결합력(Weak Coupling)을 지향해야 합니다. 객체지향 프로그래밍은 클래스에 하나의 문제 해결을 위한 데이터와 메서드를 모아놓은 방식으로 응집력을 강화합니다. 또 각 클래스는 독립적이 되도록 디자인해 결합력을 약화합니다. 그러나 실제 세계의 모습을 프로그램 안에 구현하고자 했던 객체지향 프로그래밍 패러다임이지만, 지나친 프로그램의 객체화 경향 때문에 오히려 실제 세계의 모습을 그대로 반영하기 어렵다는 비판을 받기도 합니다. 

 

객체지향 프로그래밍의 주요 특징으로는 자료 추상화, 상속, 다형성, 동적바인딩 등이 있으며 객체지향 프로그래밍 패러다임을 차용한 언어에는 스몰토크, Objective-C, C++, C#, Java, Python, Ruby, Swift 등이 있다.

 

 

클래스와 객체

클래스(Class) : 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성과 행위를 정의한 것입니다. 객체지향 프로그램의 기본 사용자 정의 데이터 타입이라고 할 수 있습니다. 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인되어야 합니다.

 

객체(Object) : 클래스의 인스턴스(실제로 메모리에 할당되어 동작하는 모양을 갖춘 것, instance)입니다. 객체는 자신 고유의 속성이 있으며 클래스에서 정의한 행위를 할 수 있습니다. 스위프트에서는 "객체"라는 용어보다는 '클래스의 인스턴스'라는 표현을 사용합니다.

더보기

객체와 인스턴스는 동의어가 아니다. '객체 == 클래스의 인스턴스', '객체 != 인스턴스'이다. 즉, 인스턴스는 구조체의 인스턴스, 열거형의 인스턴스 등이 있기 때문에 객체는 인스턴스 중에서도 클래스의 인스턴스만 가리키는 말이다.

 

메서드(Method) 또는 메시지(Message) : 객체가 클래스에 정의된 행위를 실질적으로 하는 함수입니다. 메서드(메시지)를 통해 객체에 명령을 전달할 수 있습니다. 객체 간에 명령 전달 또는 데이터 전달은 메서드(메시지)를 통해 이루어지며 명령을 전달하거나 데이터를 전달하는 행위를 '메서드를 호출한다' 또는 '메시지를 전달한다'라고 표현합니다.

 


다음은 스위프트에서 객체지향 프로그래밍 패러다임을 사용한 예이다.

결과

 

 

코드를 보면 알 수 있듯이 스위프트뿐만 아니라 객체지향 프로그래밍 패러다임을 차용한 언어는 필수로 명령형 프로그래밍 패러다임을 사용한다. 프로퍼티, 변수 등에 해당하는 메모리 값의 변화(상태변화)가 있기 때문입니다.

 

클래스는 객체가 만들어지기 위한 청사진으로 비유할 수 있다. 클래스는 실제 메모리에 객체를 할당해 인스턴스를 만들기 위한 일종의 설계 코드이다. 클래스에 구현된 코드대로 실제로 객체가 메모리에 올라가 활동하게 됩니다.

 

 

 

 

 

반응형