별거아닌 질문이긴한데 궁금해서 올립니다.
제가 배운적이 없어서..
opencv언어를 c++로 알고 있었습니다.
프로그래밍을 처음 배울 때 주로 하는 것은 Hello World!라는 문구를 화면에 출력하는 것입니다.
보통 처음 C를 접하고 C++을 접하게 되는데, 이때도 마찬가지로 화면에 Hello World를 출력하기위해
몇가지 코딩을 익히면서 C와는 다른 차이점 4가지를 확인 할 수 있습니다.
1. 입출력함수가 포함되는 헤더파일이 c에서는 stdio.h이지만, C++에서는 iostream.h이다.
2. 출력함수가 C에서는 printf지만, C++에서는 cout이다.
3. 입력함수가 C에서는 scanf지만, C++에서는 cin이다.
4. 파일확장자가 C에서는 .C이지만, C++에서는 .CPP이다.
(더불어 조금 더 공부하며 5~7번과 같은 차이도 확인 할 수 있습니다.)
5. C는 절차지향 언어지만, C++는 객체 지향 언어이다.
6. C에서는 없던 Class/Object 개념, 연산자 중복, 가상함수등의 기능이 추가되었다.
7. C에서 변수(데이터 저장 공간)선언은 항상 코딩 앞쪽에 해 주어야 했지만 C++에서는 함수 안에서 변수선언을 하는 지역변수와 더불어 함수 외부에서 선언되어 파일 내 모든 함수에서도 공통으로 사용할 수 있는 전역변수도 선언가능하다.
기존에 있던 C는 절차지향언이입니다. 즉 순서에 입각해서 프로그래밍을 주욱하게 됩니다.
하지만 컴퓨터의 발전과 더불어 소프트웨어의 용량도 커지게 되고 또 복잡도 마져 증가하게 되었습니다.
이제는 절차식으로 코딩을 하다가는 너무 방대한 코딩의 양 때문에 오류가 발생한다면 수정하기도 힘들어졌습니다.
즉 유지보수가 너무 힘들게 된거죠. 이런 비 효율성을 개선하고자 모듈화란 이론이 나오게 되었습니다.
예를 들어 선풍기를 기존의 C방식으로 조립을 하게되면 모든 부품하나하나 주욱 한번에 설계하는 것인 반면,
모듈화로 조립을 하게 되면 날개, 뚜껑, 버튼, 모터등등으로 각각을 "기능별"로 나누고, 필요한 것을 가지고 와서
붙이기만 하면 됩니다. 이러면 고장이 난다면 고장난 부분만 수정하면되고 또 유지보수도 훨씬 편하게 될 것입니다.
이런방식이 초기에는 모듈화로불렸고 더 나아가 지금은 "객체지향"이라고 불립니다.
선풍기 각각의 부품처럼 실제하는 각각을 객체로 정의합니다. 제가 지금 사용하는 맥북프로도 객체가 될 수 있고,
제가 좋아하는 수박바도 객체가 될 수 있습니다. 즉 우리가 어떤 대상을 추상화할 수 있는것이 객체입니다.
그리고 이런 비슷한 객체들을 모아 놓은것이 클래스입니다. 삼성노트북, 엘쥐노트북, 애플노트북, 도시바노트북, 소니노트북
각각의 객체라 볼 수 있고 이 들의 특징을 모아 놓은 것이 바로 "클래스"입니다.
캡슐화 :
클래스 구현에 대한 세부적인 내용은 사용자에게 캡슐화되어 있어 사용자에게는 감춰진 형태로 존재합니다. 예를들어 특정 대출
을 Loan 클래스의 객체로서 생각해봅니다. 그럼 이자율, 대출액, 대출 기간이 데이터 속성이 되고, 매월 납입금과 전체 납입금을
계산하는 것은 함수가 됩니다. 자동차를 한 대 구입한다고 했을 때 이자율, 대출액, 대출 기간을 갖는 클래스를 실체화하여 대출
객체를 생성하고 대출에 대한 매월 납입금과 전체 남입금을 계산하는 함수를 사용 할 수 있습니다. 하지만 Loan 클래스의 사용자
는 이들 함수가 어떻게 구현되는지 알필요가 없다는 것이 캡슐화입니다.
상속 :
말 뜻 그대로 위에서 아래로 상속을 받는다는 뜻 입니다. 미리 정의된 클래스를 상속받아서 다른 클래스를 생성할 수 있습니다.
새로운 클래스를 정의 할 필요없이 기존의 개발자가 미리 정의해놓은 개발과정이나 라이브러리를 가지고 와서 사용할 수 있는 것
으로 시간과 돈을 줄일 수 있습니다. 이때문에 모듈의 재상용성과 코드의 간결성을 준다는 장점을 가집니다.
다형성 :
같은 객체지만 조건에 따라 다르게 작용하는것입니다. 예를들어 계산기(객체)에서 합계를 구한다(메쏘드)고 합니다. 입력란에
정수를 적거나, 소수, 분수를 적으면 합계를 구하는 공식은 같지만 결과는 다르게 나옵니다. 이는 모두 합계를 구하는 메쏘드를
호출하지만 넘겨주는 메시지가 다르다는 것입니다.
원의 넓이를 구하는 것을 클래스로 선언한 예입니다.
Class Circle // 클래스선언 { public: double radius; //데이터 필드 Circle() //서클 객체 생성 { radius = 1; } Circle(double newRadius) //서클 객체 생성 { radius = newRadius; }
double getarea() // 함수정의 { return radius *radius *3.14159; ] }; |