본문 바로가기

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

[독학사/컴공/객체지향프로그래밍]6.클래스와 객체

반응형

4.클래스와 객체

4.1.1.멤버변수 및 메소드 선언

클래스

-객체의 설계도(클래스는 실체가 아님)

-멤버 변수와 메소드 선언

객체

-클래스의 틀로 생성되어 하나의 클래스로 여러개의 객체를 생성 가능함

-메모리에 생성되어 실체(instance)라고함멤버변수와 메소드로 구성됨.

-각각의 객체는 별도의 메모리에 생성됨

클래스 선언(멤버변수 및 메소드 선언)

class 클래스명{

 멤버 변수 선언;

public: //접근 권한 지정

 메소드(원형선언;

};

-멤버변수는 선언시 초기화할 수 없음

-메소드는 주로 원형 형태로 선언함

 

 

4.1.2.클래스용 멤버변수 및 메소드 선언

클래스변수

-클래스 내에서 static을 붙여서 선언하는 변수로한번 선언되면 해당 클래스의 모든 인스턴스가 같은 저장공간을 가리킨다.

예제

public class test{

 static int hanno=1;

 public static void main(string[] args) {

test ex1 = new test();

test ex2 = new test();

system.out.println(ex1.hanno);

ex2.hanno=2;

system.out.println(ex1.hanno);

}

}

출력

1

2

->클래스변수인 hanno, test클래스로 생성된 모든 인스턴스에서 같은 저장장소를 가리킴으로, ex2인스턴스에서 변수 hanno를 변경하면 ex1인스턴스의 hanno변수도 변경된다.

 

 

4.1.3.생성자 및 소멸자

생성자는 객체를 생성할 때 자동적으로 호출되는 함수로 클래스와 같은 이름의 형태를 띤 함수이며리턴형이 없으며 리턴 하지도 않는 특징을 가지고 있다생성자는 객체의 생성과 동시에 초기화를 해주기 위해서 필요하다.

 

 

.생성자(ctor)

객체의 초기화를 담당하는 메서드를 가리킨다.

-인스턴스를 생성해주는 역할을 하는 특수한 메소드이다.

-반환값이 없어서 RETURN도 사용하지 않고 반환 값 타입을 메소드 정의에 포함시키지도 않는다.

-클래스에는 반드시 생성자가 존재해야 한다.

-인스턴스 변수의 초기화가 목적이다.

-클래스 이름과 동일한 이름을 가진 메소드이다.

 

 

.소멸자

개체가 소멸(할당이 해제)될 때 사용되는 생성자 함수의 역함수.

-객체가 소멸될 때 자동으로 발생하는 메서드.

-클래스 이름 앞에 물결표 ( ~ )를 사용하여 함수를 클래스의 소멸자로 지정함.

-클래스 'String'의 소멸자는 '~String()'

 

 

사용방법

클래스명 참조변수 = new 클래스명(초기화 변수)

: Person p1 = new Person(22, "한국인노동자");

 

 

4.1.4.접근 제한 - private, protected, public

[class의 경우]

public: 모든 패키지에서 이 클래스 참조 가능

protected: 자신을 포함하는 클래스에서 상속받은 클래스에서도 참조가능 

private: 자신을 포함한 클래스에서만 참조가능

 

 

[메소드의 경우]

public: 이 클래스 밖에서도 이 메소드 참조 가능

protected: 상속받은 클래스와 이 클래스내에서만 참조 가능

private:이 클래스내에서만 참조가능

 

 

Private << protected << public

 

 

4.1.5.this, super(in JAVA), friend(in C++) 키워드

.this

클래스 내부에 자동 선언되는 클래스 포인터선언된 객체의 주소를 저장하고 있으며 클래스 내부에서만 사용할 수 있다.

-상수 포인터로 변경이 불가능하다.

-클래스 내부에서도 사용 불가능한 경우가 있다.(: static 멤버함수 내부)

-this();는 생성자 호출을 의미한다.

:

class Number

{

private:

 int val = 0;

public:

 void add(int val)

 {

this->val += val;

}

}

위에서 val은 add함수의 지역변수인 val을 가리키고, this->val은 Number 클래스의 멤버변수 val을 가리킨다.

 

 

.super ( in java )

자신을 가리키는 키워드가 this라면부모를 가리키는 키워드는 super이다.

-자식클래스인 B에서 부모클래스 A의 메소드를 부를 일이 생겼다고 할 때, super.set(); 같은 식으로 이용한다

-super()는 부모의 생성자를 의미한다.

 

 

.friend ( in c++ )

지정된 해당 함수 혹은 클래스에 대해 자신의 private나 protected멤버를 public권한으로 접근할 수 있도록 해주는 키워드.

-객체사용이 편해지지만객체의 캡슐화를 무너뜨림.

 

 

4.1.6.멤버함수 오버로드 (overloading)

클래스 내부에 동일한 이름의 메서드 여러개를 정의하는 것.

-함수명은 같아야 한다.

-파라미터 타입과 개수는 서로 달라야 한다.

-리턴타입은 관계없다.

-메서드의 이름 낭비를 방지하고같은 메서드에 여러 종류의 매개변수를 받을 수 있다:

 

 

class student{

 

 

  void search(int number){

    system.out.println("번호:"+number);

  }

  void search(string name){

    system.out.println("이름:"+name);

  }

  void search(string name, int price){

    system.out.println("번호:"+number);

    system.out.println("이름:"+name);

  }

 

 

}

[출처] [독학사/컴공/객체지향프로그래밍]1.객체지향의 기본적 개념|작성자 한국인노동자

 

 

모호함

함수가 오버로드되었을 때컴파일러가 구분할 수 없는 모호함이 발생한다면 컴파일 에러가 발생한다.

-max(int, int)와 max(int&, int&) -> 문맥 상으로 두개의 함수 구분이 불가능하다.

-int Pirnt(); char Print(); -> 리턴형으로는 두 함수의 구분이 불가능하다.(파라미터 타입으로 구분해야한다.)

 

 

4.1.7.연산자 오버로드(in C++)

http://blog.eairship.kr/177

 

 

4.1.8.정적 초기화 블록(in JAVA)

인스턴스화에 상관없이 딱 한번 호출되는 절차적인 코드들로 이루어진 블럭.

-생성자와 관계없이 메모리 로딩 시점에 우선 실행된다.

 

 

class hanno{

 static {

for(int i=0; i<1000; i++) {

 a = i;

}

}

}

 

 

반응형