Search
Duplicate

1장. 프로그래밍과 프로그래밍 언어

생성일
2022/03/25 02:14
태그
C++

프로그래밍과 프로그래밍 언어

프로그래밍 언어

기계어 (Machine Language)
0, 1의 이진수로 구성된 언어이다
컴퓨터의 CPU는 본질적으로 기계어만 처리가 가능하다
어셈블리어
기걔어의 명령을 ADD, SUB, MOVE 등과 같은 상징적인 니모닉 기호로 일대일 대응시킨 언어이다
고급언어
사람이 이해하기 쉽고 복잡한 작업, 자료구조, 알고리즘을 표현하기 위해 고안된 언어
Pascal, Basic, C/C++, JAVA, C#
컴파일러
고급언어로 작성된 프로그램을 기계어 코드로 변환

C++ 언어

표준

1998년 미국 표준원 (ANSI)
C++ 언어에 대한 표준 설정
ISO/IEC 14882 문서에 작성됨
표준에 의해 작성된 C++ 프로그램
모든 플랫폼, 모든 표준 C++ 컴파일러에 의해 컴파일
동일한 실행 결과 보장
운영체제와 컴파일러의 종류에 관계없는 높은 호환성

C++ 설계 목적

C언어의 문법 체계 계승
소스 레벨 호환성
기존에 작성된 C 프로그램을 그대로 가져다 사용
링크 레벨 호환성
C 목적 파일과 라이브러리를 C++ 프로그램에서 링크
객체 지향 개념 도입
캡슐화, 상속, 다형성
소프트웨어의 재사용을 통해 생산성이 향상
복잡하고 큰 규모의 소프트웨어의 작성, 관리, 유지보수가 용이하다
엄격한 타입 체크
실행 시간 오류의 가능성을 줄임
디버깅이 편리하다
실행 시간의 효율성 저하를 최소화
실행 시간을 저하시키는 요소와 해결
작은 크기의 멤버 함수 잦은 호출 가능성 → 인라인 함수로 실행 시간 저하 해소

C언어에 추가한 기능

함수 중복 (Function Overloading)
매개변수의 개수나 타입이 다른 동일한 이름의 함수들을 선언
디폴트 매개변수 (Default Parameter)
매개변수에 디폴트 값이 전달되도록 함수를 선언
참조와 참조변수 (Reference)
하나의 변수에 별명을 사용하는 참조변수 도입
참조에 의한 호출 (Call-by-Reference)
함수 호출 시 참조 전달
new / delete 연산자
동적 메모리 할당/해제를 위해 new와 delete 연산자를 도입
연산자 재정의
기존 C++ 연산자에 새로운 연산 정의
제네릭 함수와 클래스
데이터 타입에 의존하지 않고, 일반화시킨 함수나 클래스 작성이 가능하다

C++ 객체 지향 특성

캡슐화 (Encapsulation)

캡슐화
데이터를 캡슐로 싸서 외부의 접근으로부터 보호한다
C++ 에서 클래스 (Class 키워드)로 캡슐 표현
클래스와 객체
클래스 : 객체를 만드는 틀
객체 : 클래스라는 틀에서 생겨난 실체
객체 (Object), 실체(Instance) 는 같은 뜻

상속성 (Inheritance)

객체지향 상속
자식이 부모의 유전자를 물려 받는 것과 유사
C++ 상속
객체가 자식 클래스의 멤버와 부모 클래스에 선언된 모양 그대로 멤버들을 가지고 탄생

다형성 (Polymorphism)

다형성
하나의 기능이 경우에 따라 다르게 보이거나 다르게 작동하는 현상
연산자 중복, 함수 중복, 함수 재정의 (Overriding)

C++ 에서 객체 지향을 도입한 목적

1.
소프트웨어의 생산성 향상
소프트웨어의 생명주기 단축 문제 해결 필요
기 작성된 코드의 재사용 필요
C++ 클래스 상속 및 객체 재사용으로 해결
2.
실세계에 대한 쉬운 모델링
물체 혹은 객체의 상호작용에 대한 묘사가 필요
실세계는 객체로 구성된 세계
객체를 중심으로 하는 객체 지향 언어가 적합
객체지향언어 - 객체들을 정의하고, 객체들의 상호 관계, 상호작용으로 구현

C++ 과 제네릭 프로그래밍

제네릭 함수와 제네릭 클래스

제네릭 함수 (Generic Function)
동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반화 시킨 함수
제네릭 클래스 (Generic Class)
동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반화 시킨 클래스
template 키워드로 선언
탬플릿 함수 혹은 템플릿 클래스라고도 부른다
Java, c# 등 다른 언어에도 동일한 개념이 있다

제네릭 프로그래밍 (Generic Programming)

제네릭 함수와 제네릭 클래스를 활용하여 프로그램을 작성하는 새로운 프로그래밍 패러다임
점점 중요성이 높아지고 있음

C++ 언어의 아킬레스

C++ 언어는 C언어와의 호환성을 추구한다
장점 : 기존에 개발된 C프로그램 코드를 활용할 수 있다
단점 : 캡슐화의 원칙이 무너진다
C++에서 전역변수와 전역함수를 사용할 수 밖에 없다
부작용 발생 염려

링킹 (Linking)

목적 파일끼리 합쳐 실행 파일을 만드는 과정
목적 파일은 바로 실행할 수 없음
목적 파일과 C++ 표준 라이브러리의 함수를 연결, 실행 파일을 만드는 과정

프로그램 실행과 디버깅

실행 파일은 독립적으로 바로 실행이 가능하다
실행 중에 발생하는 오류
원하는 결과가 나오지 않거나 실행 중에 프로그램의 비정상 종료
디버깅
실행 중에 발생한 오류를 찾는 과정
디버거
디버깅을 도와주는 프로그램
소스 레벨 디버깅
C++ 소스를 한 라인씩 실행하고, 변수 값의 변화를 보면서 오류 발견
비주얼 스튜디오는 소스 레벨 디버깅을 지원한다

C++ 표준 라이브러리

C++ 표준 라이브러리는 3개의 그룹으로 구분한다
C 라이브러리
기존 C 표준 라이브러리를 수용, C++에서 사용할 수 있게 한 함수들
이름이 c로 시작하는 헤더 파일에 선언됨
C++ 입출력 라이브러리
콘솔 및 파일 입출력을 위한 라이브러리
C++ STL 라이브러리
제네릭 프로그래밍을 지원하기 위한 템플릿 라이브러리