클래스(Class)
객체의 타입(Object Type)이다.
EX) 'Bob'은 객체이나, 'Employee'는 객체의 타입, 즉 클래스 이다.
클래스란?
유사한 객체들이 갖는 공통된 데이터
함수들을 정의한 객체의 기본 규격(Specification)
유사한 객체들의 타입을 정의
인스턴스(Instance)
어떤 클래스에서 생성된 객체 혹은 한 클래스에 속하는 각각의 객체
한 클래스에 속한 모든 객체들은 같은 종류의 데이터와 함수들을 가진다.
생성된 각 객체는 클래스에서 정의된 변수들에 대한 메모리를 할당 받는다.
생성자(Constructor)
클래스와 이름이 같은 멤버함수
객체를 초기화해준다.
내부(내포)포인터 - this
c++에서는 객체를 선언하여 사용하면 자동으로 객체와 그 객체를 가리키는 포인터가
함께 잡히게 되는데 이때 이 객체의 포인터를 this라 한다.
'this'포인터는 주로 연산자 overloading시 사용한다.
'this'포인터는 객체의 각 멤버함수로 내포되어 보내지는 포인터
"객체 자기자신을 가리키는 포인터"
상속(Inheritance)
하나의 클래스를 여러 서브클래스들로 세분하거나 유사한 클래스들을 군으로 묶어서 하나의
슈퍼 클래스로 정의하는 과정을 소프트웨어적으로 구현한 장치
기존의 클래스 위에 필요한 데이터와 함수들을 추가하여 새로운 클래스를 만드는 경제적인 방법
재사용성 증대
다중상속(Multiple Inheritance)
한 클래스가 여러 개의 슈퍼클래스를 가지는 경우
하나의 기본계층을 여러 개의 class로 상속하는 것도 가능하다.
이름 충돌(Name conflict)
슈퍼클래스들 간의 같은 이름의 데이터나 함수가 있는 경우
하위 클래스의 기능이 어떤 상위클래스로부터 상속 받았는지 알 수 없기 때문에 이름 충돌을 발생 시킬 수 있다.
범위를 정함으로써 다중상속으로 인한 이름 충돌을 해결 할 수 있다.
추상클래스(Abstract Class)
서브클래스들의 공통된 특성(property)을 슈퍼클래스로 추출하여 묘사하기 위한 목적으로만 사용되는 클래스
객체를 생성할 목적을 가지고 있지 않으며, 객체를 생성할 수도 없다.
다형성(Polymorphism)
복수의 클래스가 하나의 메시지에 대해 각 클래스가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
compile time polymorphism
- 함수, 연산자의 overloading(다중정의)
run time polymorphism
- 가상함수를 이용한 함수의 overriding(재정의)
다중정의(Overloading)
c++에서는 한 함수가 다른 전달인자(parameter) 형들을 위해서 여러 번 정의될 수 있다.
parameter 수가 다른 함수의 오버로딩
- 함수 오버로딩시 항상 전달인자의 개수가 같아야 하는 것은 아님
- 필요에 따라 전달인자의 개수가 같지 않게 정의할 수 있음
재정의(overriding)
파생클래스를 정의할 때, 기존의 기반 클래스에 포함되어 있는 멤버함수들 중에서 하나를 선택하여
새로운 내용으로 정의할 수 있다는 것을 의미
함수 오버라이딩은 클래스를 사용한 객체지향프로그래밍에 있어서, 각 모듈을 캡슐화 하면서
동일한 함수에 새로운 기능을 추가하거나 프로그램 특성에 맞게 함수를 재구성할 때 매우 유용
제너릭클래스(Generic class)
어떤 데이터 타입을 사용할 지 명시하지 않은 상태에서 정의된 변수와 함수들을 가지고 있는 클래스
한번 정의한 후에 같은 계열의 여러 클래스를 생성하는데 목적
데이터 타입만 다르고 다른 특성은 유사한 클래스들을 정의하는데 유용하게 사용된다.
한번 정의해 놓고 모든 종류의 리스트를 생성할 수가 있어 매우 경제적이며 코드의 크기가 최적화되고
유지보수도 집중적으로 할 수가 있다.
"핵심 개념 요약"
'Software Engineering' 카테고리의 다른 글
애자일 개발 기법 (0) | 2019.04.17 |
---|---|
Agile software development (0) | 2019.04.17 |
Software process (0) | 2019.04.17 |
객체지향 (0) | 2019.04.17 |
소프트웨어공학 (0) | 2019.04.17 |