객체 지향 프로그래밍
객체지향 프로그래밍에서는 객체들이 톱니바퀴처럼 작동한다.
출처 : 야곰, [ 스위프트 프로그래밍 한빛 미디어 (2022) 44쪽 ~ 46쪽
객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 기존의 명령형 프로그래밍 패러다임의 시각에서 벗어나 여러 개의 독립된 단위인 객체의 모임으로 파악하고자 하는 시각이다. 각각의 객체는 서로 메시지를 주고 받고 데이터를 처리할 수 있다.
객체지향 프로그래밍은 프로그램을 유연하고 쉽게 변경할 수 있도록 작성할 수 있어서 대규모 소프트웨어 개발에 많이 사용된다. 또한 객체만 잘 이해하면 프로그래밍을 더 쉽게 배울 수 있고 소프트웨어 개발과 유지보수를 간편하게 할 수 있으며 직관적으로 코드를 분석할 수 있다는 장점이 있다.
소프트 웨어 공학의 관점에서 소프트 웨어의 질을 향상하려면 강한 응집력과 약한 결합력을 지향해야 한다. 객체 지향 프로그래밍은 클래스에 하나의 문제 해결을 위한 데이터와 메서드를 모아놓은 방식으로 응집력을 강화한다. 또 각 클래스는 독립적으로 되도록 디자인해 결합력을 약화한다.
객체 지향 프로그래밍의 주요 특징으로는 자료 추상화, 상속, 다형성, 동적 바인딩 등이 있으며 객체 지향 프로그래밍 패러다임을 차용한 언어에는 C++, C#, 자바, 파이썬, 루비, 스위프트 등이 있다.
스위프트 뿐만 아니라 객체 지향 프로그래밍 패러다임을 차용한 언어는 필수로 명령형 프로그래밍 패러다임을 사용한다. 프로퍼티, 변수 등에 해당하는 메모리 값의 변화가 있기 때문이다.
클래스는 객체가 만들어지기 위한 청사진으로 비유할 수 있다. 클래스는 실제 메모리에 객체를 할당해 인스턴스를 만들기 위한 일종의 설계코드이다. 클래스에 구현된 코드대로 실제로 객체가 메모리에 올라가 활동하게 된다. 클래스에 정의된 모양대로 객체가 생성되고 객체간의 메시지를 통해 프로그램의 각 명령이 실행된다.
클래스 : 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성과 행위를 정의한 것이다. 객체 지향 프로그램의 기본 사용자 정의 데이터 타입이라고 할 수 있다. 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인되어야 한다.
객체 : 클래스의 인스턴스(실제로 메모리에 할당되어 동작하는 모양을 갖춘 것)이다. 객체는 자신 고유의 속성이 있으며 클래스에서 정의한 행위를 할 수 있다.
메서드 또는 메시지 : 객체가 클래스에 정의된 행위를 실질적으로 하는 함수이다. 메서드를 통해 객체에 명령을 전달할 수 있다. 객체 간에 명령 전달 또는 데이터 전달은 메서드를 통해 이루어지며 명령을 전달하거나 데이터를 전달하는 행위를 '메서드를 호출한다.' 또는 '메세지를 전달한다.'라고 표현한다.