객체 지향 프로그래밍은 객체를 중심으로 프로그램을 설계, 개발하는 것을 말한다.
작은 문제들을 해결할 수 있는 인스턴스들을 만든 뒤 이 인스턴스들을 이용해 큰 문제를 해결하는 해결법이다.
클래스를 이용해 함수(처리), 변수(데이터)를 묶어 객체(인스턴스)로 만들어 사용한다는 점이 가장 큰 특징이다.
위 이미지를 예시로 들어 Class라는 설계도를 만든다.
다음으로 각 설계도에 맞춰 해당 인스턴스에 기능을 구현하는 메서드를 넣는다.
바퀴 클래스에는 바퀴 관련 메서드를 작성해 바퀴가 굴러가면 몸체와 핸들이 이동 방향이 바뀐다던지 바퀴의 방향이 달라진다 등의 인스턴스를 생성한다.
몸체 클래스에는 몸체 관련 메서드를 작성해 핸들이 꺾이면 앞 프레임이 꺾인다던지 등의 기능을 구현한 인스턴스를 생성한다.
핸들 클래스에는 핸들 관련 메서드를 작성해 핸들을 꺾었을 때 바퀴와 앞 몸체 방향 등의 기능을 구현한 인스턴스를 생성한다.
이렇게 완성된 세개의 클래스들을 이용해 자전거라는 프로그램을 완성하는게 객체지향이다.
위에서 간략하게 설명했듯이 핸들을 꺾었을 때 하위 클래스인 바퀴의 방향과 몸체의 방향이 바뀌는 것과 같은 상속성과 바퀴는 굴러가는 기능에 대해 외부 영향을 받을 필요가 없으므로 캡슐화를 사용한다던가 등의 객체 지향만의 특징이 있다.
어디까지나 '지향'이라는 성격을 가지고 있고 프로그래밍 문법이 아닌 가이드라인으로 문법적으로 지원하지 않는 언어인 C 언어로도 객체지향을 구현할 수 있다.
또한, 위 두 프로그래밍은 반대 개념이 아니다.
절차적 프로그래밍은 데이터를 중심으로 함수를 만들어 쓴다면, 객체 지향은 데이터와 함수들을 묶어 하나의 인스턴스로 만들어 쓰는 접근 방법이 다를 뿐 반대 개념이 아니다.
객체 단위로 나눠 작업하는 방식
코드의 재사용에 용이
유지보수가 쉬움
처리 속도가 느림
설계 단계에서 많은 시간 소요
순차적으로 프로그램이 동작하는 방식
처리 속도가 빠름
컴퓨터 처리구조와 비슷해 속도가 빠름
유지보수에 어려움
코드 재사용이 불가능 함
클래스는 객체를 생성하기 위한 템플릿으로, 데이터와 해당 데이터를 처리하는 메서드를 포함한다.
class로 선언된 것을 말한다.
클래스의 인스턴스로, 메모리에 할당된 실제 데이터를 말한다. 클래스로부터 생성되며, 각각 고유한 속성과 메서드를 가진다.
class 내부의 함수나 변수 등을 가리킨다.
상속은 하위 클래스가 상위 클래스의 특성을 상속받는 것을 말한다. 상속을 통해 코드의 재사용성을 높일 수 있고, 클래스 간 계층 구조를 만들 수 있다.
다형성은 동일한 이름의 메서드나 연선자가 서로 다른 클래스에서 다르게 동작할 수 있는 능력을 말한다. 상속과 연관되어 있으며, 부모 클래스의 참조 변수가 자식 클래스의 객체를 참조할 수 있는 특성을 가진다.
캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶는 것을 의미한다. 클래스는 외부에서 직접적으로 접근할 수 없는 멤버에 대해 접근을 제어함으로써 정보 은닉을 제공한다.
추상화는 객체의 주요 특징에만 집중하고 불필요한 세부 사항을 무시하는 것을 말한다. 추상화를 통해 프로그램을 더 쉽게 이해하고 관리할 수 있다.
객체 지향 프로그래밍에 대해 정리해보았다.
아직 개념적으로만 정리해놔서 이해가 부족한것 같다.
다음엔 객체 지향 프로그래밍을 더 자세히 이해하기 위해 예제 코드들을 작성해야겠다.