4.2.객체
4.2.1.객체 변수 선언
OOP의 가장 핵심적인 클래스(객체)는 구조체가 확장된 것.
선언 방법은 C의 구조체 선언문에서 struct를 class로 바꾸면 되며, public이나 private와 같은 액세스 지정자도 추가 가능. 또한, 함수까지 포함할 수 있다.
예:
//People 클래스 선언
class People{
private:
int age;
char* name;
double height;
public;
void set_People{int _Age, char* _name, double _height};//함수(behavior)도 포함 가능
void show_People();
};
4.2.2.객체 생성 및 초기화
ㄱ.JAVA
JAVA에서는 객체를 New 연산자로 선언하고 생성한다.
Class 타입 변수명 = new 생성자 ();
new:new 연산자를 통해 객체를 저장할 메모리를 할당한다. 곧이어 생성자를 호출하여 객체를 초기화한다. 생성자가 종료되면 new 연산자는 생성된 객체에 접근할 수 있도록 식별자를 반환한다.
ㄴ.C++
1)new를 사용하지 않는(메모리를 동적으로 할당받지 않는)객체 생성
ex) Student kim;
2)new연산자를 사용한 동적할당
클래스이름 *객체이름; //객체 포인터 선언
객체이름 = new 클래스이름; //new연산자로 객체를 위한 메모리 동적할당
객체이름 = new 클래스이름(매개변수 리스트); //new 연산자에 의해 생성자가 자동으로 호출됨
3)생성자를 통한 멤버변수 초기화
ex)
class Student{
public:
Student(); //기본 생성자
Student(const int s1, const int s2); //생성자 오버로딩
private:
int score[2], sum;
double average;
};
//기본 생성자
Student::Student(){
score[0]=0;
score[1]=0;
sum=0;
average=0;
};
//생성자 오버로딩
Student::Student(const int s1, const int s2):sum(2),average(2){
score[0] = s1;
score[1] = s2;
}
4.2.3.객체 소멸
객체가 소멸할 때 자동으로 소멸자 함수를 실행한다. 따로 선언하지 않아도 자동으로 동작한다.
객체의 소멸 순서는 소멸자 호출-> 메모리 반환 순서로 객체가 소멸됨.
JAVA의 경우 레퍼런스가 참조하지 않는 객체는 가비지 컬렉션의 대상이 되어 자동으로 정리함
4.2.4.객체 사용 - 멤버변수접근 및 메소드 호출
인스턴스 이름과 .연산자를 사용해서 멤버변수접근, 메소드 호출을 한다.
class Number{
public:
int number;
int getNumber();
};
이라는 클래스가 있을 때에,
Number number; //인스턴스 생성
number.number = 1; //멤버변수접근
std::cout<<number.getnumber(); //메소드호출
4.3.1.패키지(in JAVA)
패키지(package):클래스의 묶음으로서 하나의 디렉토리이다. 패키지 안에 하위패키지를 만드는것도 가능하다. 클래스는 일반적으로 퍼블릭클래스로 존재하며, 패키지명(.하위패키지명).자바파일(=퍼블릭클래스명)순서로 실행한다.
->퍼블릭클래스: 하나의 자바파일에 여러개의 클래스를 작성하는 경우 설정된 하나의 대표 클래스. 'public 자바파일명'과 동일하며 존재하지 않을 수도 있음.
4.3.2.네임스페이스(in C++)
네임스페이스 또는 이름공간은 개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다. 각각의 이름공간에서는 같은 변수나 함수 이름을 사용할 수 없지만, 영역이 다르면 변수나 함수명이 같을 수도 있다.
ex)
#include <iostream>
using std::cout;
using std::endl;
namespace Box1{
int boxSide = 4;
}
namespace Box2{
int boxSide = 12;
}
int main () {
cout << Box1::boxSide << endl; //output 4
cout << Box2::boxSide << endl; //output 12
return 0;
}
4.4.템플릿(in C++)
제너릭 프로그래밍(Generic Programming): 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식.
템플릿(template): 프로그래밍 언어의 한 기능으로, 함수와 클래스가 제너릭 형과 동작할 수 있게 도와준다. 함수나 클래스가 개별적으로 다시 작성하지 않고도 각기 다른 수많은 자료형에서 동작할 수 있게 한다.
-템플릿은 C++에서 다중상속과 연산자 오버로딩과 결합할 때 유용하다.
-템플릿의 종류에는 함수 템플릿, 클래스 템플릿, 변수 템플릿이 있다.
4.4.1템플릿 선언
형태는 아래와 같다.
template <class Type>
template <typename Type>
두 표현 모두 같은 의미와 행동을 하도록 되어있다. class대신 typename을 사용해도 되고, 그 반대도 성립한다.
4.4.2.템플릿 사용
ㄱ.함수 템플릿
여러 다른 자료형을 템플릿 인자로 받아, 함수 내부에서 활용할 수 있도록 한 것.
ex)
template <typename Type>//typename 대신 class를 대입하여도 된다.
Type max(Type a, Type b) {
return a>b ? a : b;
}
->컴파일러가 전달되는 인자의 자료형을 보고 Type의 타입을 유추한다. 컴파일 과정 중 해당 함수가 어떤 자료형으로 호출이 될지 결정이 될 때 실제 함수가 생성이 된다.
ㄴ.클래스 템플릿
사용법은 함수 템플릿이랑 동일하나, 클래스 템플릿에서는 자료형정보(<int>, <double>등)을 생략하면 안된다.
ex)
template <typename type>
class student{
private:
typenaeme data;
public:
void showInfo(){
cout << data << endl;
}
};
int main(){
data<int> data1(10);
data1.showInfo();
}
'학위공부 > 독학사 요점정리' 카테고리의 다른 글
[독학사/컴공/객체지향프로그래밍]9.인터페이스 상속과 다형성 (0) | 2020.06.30 |
---|---|
[독학사/컴공/객체지향프로그래밍]8.상속 (0) | 2020.06.30 |
[독학사/컴공/객체지향프로그래밍]6.클래스와 객체 (0) | 2020.06.29 |
[독학사/컴공/객체지향프로그래밍]5.연산자, 수식, 문장 (0) | 2020.06.29 |
[독학사/컴공/객체지향프로그래밍]4.변수선언 (0) | 2020.06.29 |