지금까지의 모든 답변은 "c와 c ++의 차이점은 무엇입니까?"라는 질문의 주제에 중점을 두었습니다. 실제로 차이가 무엇인지 아는 것처럼 들리지만 왜 그 차이가 필요한지 이해하지 못합니다. 그래서 다른 답변은 OO와 캡슐화를 설명하려고 시도했습니다.
귀하의 질문에 대한 세부 사항을 바탕으로 몇 가지 단계를 다시 거쳐야한다고 생각하기 때문에 또 다른 대답을 들려주었습니다.
C ++ 또는 OO의 목적을 이해하지 못합니다. 응용 프로그램은 단순히 데이터를 저장해야하기 때문입니다. 이 데이터는 변수에 저장됩니다. "왜 변수에 액세스 할 수 없게 만들고 싶습니까? 이제 더 이상 변수에 액세스 할 수 없습니다! 모든 것을 공개하거나 더 나은 글로벌 환경으로 만들면 어디서나 데이터를 읽을 수 있으며 아무런 문제가 없습니다." -현재 당신이 쓰고있는 프로젝트의 규모에 따라 당신은 옳을 것입니다. 아마도 많은 문제는 없을 것입니다 (또는 아직 문제를 알지 못했을 것입니다).
당신이 정말로 대답해야 할 근본적인 질문은 "왜 데이터를 숨기고 싶습니까? 그렇게한다면 나는 그것을 사용할 수 없습니다!"라고 생각합니다. 그리고 이것이 이유입니다.
새 프로젝트를 시작하고 텍스트 편집기를 열고 함수 작성을 시작한다고 가정 해 봅시다. 무언가를 저장해야 할 때마다 (나중에 기억하기 위해) 변수를 만듭니다. 일을 단순화하기 위해 변수를 전역으로 만듭니다. 앱의 첫 번째 버전이 훌륭하게 실행됩니다. 이제 더 많은 기능을 추가하기 시작합니다. 더 많은 기능이 있으며 이전에 저장 한 특정 데이터를 새 코드에서 읽어야합니다. 다른 변수를 수정해야합니다. 더 많은 기능을 계속 작성하십시오. 코드가 커질수록 다음 기능을 추가하는 데 시간이 오래 걸리는 것입니다. 코드가 커질수록 작동하던 것을 깨뜨리지 않고 기능을 추가하는 것이 점점 어려워집니다. 왜? 모든 것을 기억해야하기 때문에전역 변수가 저장되므로 모든 변수가 수정되는 위치를 기억해야합니다 . 그리고 어떤 순서 로 어떤 함수를 호출해도 괜찮은지 기억 하고 다른 순서로 호출하면 전역 변수가 아직 유효하지 않기 때문에 오류가 발생할 수 있습니다. 이것에 부딪친 적이 있습니까?
일반적인 프로젝트 (코드 라인)는 얼마나됩니까? 이제 자신보다 5000 ~ 50000 배 큰 프로젝트를 이미징하십시오. 또한 여러 사람들이 일하고 있습니다. 팀의 모든 사람들이 모든 변수가 무엇을하고 있는지 기억하거나 어떻게 알 수 있습니까?
위에서 설명한 것은 완벽하게 연결된 코드의 예입니다. 그리고 시간이 시작된 이후 (1970 년 1 월 1 일 시작된 것으로 가정), 인간은 이런 문제를 피할 수있는 방법을 찾고 있습니다. 이를 피하는 방법은 코드를 시스템, 서브 시스템 및 구성 요소로 분할하고 데이터에 액세스 할 수있는 기능 수를 제한하는 것입니다. 5 개의 정수와 어떤 종류의 상태를 나타내는 문자열이 있다면 5 개의 함수 만 설정하거나 값을 얻는다면이 상태로 작업하기가 더 쉬울까요? 또는 100 개의 기능이 동일한 값을 설정하거나 얻는 경우? OO 언어 (예 : C)가 없어도 사람들은 다른 데이터에서 데이터를 분리하고 코드의 다른 부분간에 명확한 분리 경계를 만들기 위해 열심히 노력해 왔습니다. 프로젝트가 특정 크기에 도달하면 프로그래밍의 편의성이 향상되지 않습니다. "함수 Y에서 변수 X에 액세스 할 수 없습니다."
이것이 OO 개념이 도입 된 이유이며 이것이 매우 강력한 이유입니다. 데이터 를 보는 코드가 적을수록 다음 기능을 추가 할 때 무언가를 깨뜨릴 가능성이 적기 때문에 데이터를 자신에게서 숨길 수 있으며 의도적으로 데이터를 원할 수도 있습니다. 이것이 캡슐화 및 OO 프로그래밍 개념의 주요 목적입니다. 이를 통해 시스템 / 서브 시스템을 훨씬 더 세분화 된 상자로 나눌 수 있습니다. 전체 프로젝트의 규모에 관계없이 주어진 변수 세트는 50-200 줄의 코드로만 액세스 할 수 있습니다. OO 프로그래밍에는 훨씬 더 많은 것이 있지만 본질적으로 C ++은 데이터 / 기능을 개인, 보호 또는 공용으로 선언하는 옵션을 제공하는 이유입니다.
OO에서 두 번째로 큰 아이디어는 추상화 계층의 개념입니다. 절차 적 언어에도 추상화가있을 수 있지만 C에서는 프로그래머가 이러한 레이어를 만들기 위해 의식적인 노력을 기울여야하지만 C ++에서는 클래스를 선언 할 때 추상화 레이어를 자동으로 만듭니다 (이 추상화 여부에 관계없이 여전히 사용자의 몫임) 값을 추가하거나 제거합니다). 추상화 계층에 대해 더 많이 읽고 연구해야하며 더 많은 질문이 있으면이 포럼에서 그에 대한 답변을 기뻐할 것입니다.