본문 바로가기

학위공부/독학사 요점정리

[독학사/컴공/객체지향프로그래밍]7.객체

반응형

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();

}

 

 

반응형