모두의 코드 C++ 강의를 보고 정리한 글입니다.
1세대 컴퓨터 언어 : 에니악, 손으로 진공관 상 전선 연결 배치로 소스코드 작성함
2세대 컴퓨터 언어 : 내장 메모리가 생기고 프로그래밍 가능해짐, 어셈블리어(Assembly language)가 생김
3세대 컴퓨터 언어 : 절차 지향 언어(Procedural programming language), 파스칼 언어 이후 C언어가 생김
3.5세대 컴퓨터 언어 : 객체 지향 언어(OOP), C++, C#, java, python 등
객체란 어떠한 속성값과 행동을 가지고 있는 데이터입니다.
이 속성값이나 행동에는 변수나 자료 구조, 함수 또는 메서드 등이 해당됩니다.
이 객체를 통해 현실 세계의 것들을 표현하기 위해 추상화(abstraction)라는 과정이 필요합니다.
컴퓨터로는 세상의 100%를 나타낼 수 없기에 적절하게 처리하는 것입니다.
예를 들어 자동차에서 엔진, 바퀴, 브레이트 등으로 구성되있지만 결국에 우리는 '자동차 운전'만으로 생각하므로 함수로 추상화시킬 수 있고, 자동차 기름 양, 자동차 운전 거리 등은 변수로 추상화시킬 수 있습니다.
아래 그림은 객체를 형상화한 그림입니다.
정보를 가진 변수들을 둘러싸는 메서드들이 기능을 수행한다고 보시면 됩니다.
이러한 객체의 내부에 있는 변수나 함수를 인스턴스 변수, 인스턴스 메서드라고 부릅니다.
또한 그림에서 변수들을 메서드가 둘러싸는 이유는 '보호'때문입니다.
예를들어 '외부'에서 객체의 인스턴스 변수의 값을 바꾸지 못하고 인스턴스 메서드로만 바꿀 수 있는겁니다.
Animal animal; // 다른 객체 하나 선언
// 초기화 과정 생략
animal.food += 100; // --> 다른 객체의 인스턴스 변수의 값을 변경 불가능
animal.increase_food(100); // --> 다른 객체의 인스턴스 메서드 호출하여 변경 가능
이렇게 간접적으로 접근하는 것을 '캡슐화'라고합니다.
캡슐화를 하는 이유는 다양하지만 대표적으론 다른 객체의 내부를 몰라도 사용이 가능하다는 장점 때문입니다.
예를 들어
// animal 객체의 변수들을 증가시킴
animal.food += 100;
animal.weight += 10;
// animal 같은 기능을 수행하는 인스턴스 함수들
AnimalAddFood(100);
AnimalAddWeight(10);
이런식으로 animal 객체의 변수들을 처리하는 내부 로직을 몰라도 같은 기능을 수행하는 인스턴스 함수만 호출해도 똑같은 결과를 얻을 수 있습니다.
굳이 처리로직을 하나하나 알 필요없이 대상 객체의 메서드만 알아도 처리가 가능한 것입니다.
출처