• 검색 결과가 없습니다.

이 장에서 다룰 내용 가상함수 개요 1 순수 가상함수 2 순수 가상함수 2

N/A
N/A
Protected

Academic year: 2021

Share "이 장에서 다룰 내용 가상함수 개요 1 순수 가상함수 2 순수 가상함수 2"

Copied!
29
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

가 상 함 수 가 상 함 수 가 상 함 수 가 상 함 수 가상함수를 통해 다형성을 맛보자 .

(2)

이 장에서 다룰 내용 가상함수 개요 1 순수 가상함수 2 순수 가상함수 2

(3)

01_ 가상함수  가상함수  부모 클래스에서 정의되고 자식 클래스에서 재정의된 멤버함수  동적 바인딩이 일어남 .  가상함수의 기본형태와 사용 예

virtual 반환되는_데이터형함수명( 인자...)

[기본 형태 ]

class Animal { public: Animal(){}; virtual void Move() { cout << "Animal Move\n"; }; };

[사용 예]

(4)

[기본예제 12 - 1] 가상함수의 사용 - 1 0 1 # in c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 c la s s A n im a l 0 4 { 0 5 0 6 p u b lic : 0 7 A n im a l( ){ }; 0 8 0 8 0 9 v ir tu a l vo id M o ve () 1 0 { 1 1 c o u t < < " A n im a l M o ve \ n "; 1 2 } ; 1 3 1 4 } ; 1 5

가상함수를가상함수를가상함수를가상함수를선언했다선언했다선언했다선언했다....

(5)

[기본예제 12 - 1] 가상함수의 사용 - 2 1 6 c la s s B ir d : p u b lic A n im a l 1 7 { 1 8 1 9 p u b lic : 2 0 B ir d () {}; 2 1 vo id M o ve () 2 2 { 2 3 c o u t < < " C a ll M o ve o f B ir d c la s s .. .. . B ir d M o ve \ n ";

가상함수를가상함수를가상함수를가상함수를재정의재정의재정의재정의한다한다한다한다....

2 3 c o u t < < " C a ll M o ve o f B ir d c la s s .. .. . B ir d M o ve \ n "; 2 4 }; 2 5 2 6 }; 2 7 2 8 vo id m a in () 2 9 { 3 0 A n im a l* b ir d = n e w B ir d () ; 3 1 b ir d - > M o ve () ; 3 2 }

(6)

[기본예제 12 - 2] 가상함수의 사용 2 - 1

01 #include<iostream> 02 using namespace std; 03 class Unit 04 { 05 06 public: 07 int x,y; 08 Unit(int i,int j) 09 { 10 x = i;10 x = i; 11 y = j; 12 } 13 14 virtual void Move() 15 { 16 cout << "Executing Move..." << endl; 17 } 18 19 }; 20

부모부모부모부모클래스의클래스의클래스의클래스의MoveMoveMoveMove함수를함수를함수를함수를가상함수로가상함수로가상함수로가상함수로선언한다선언한다선언한다선언한다....

(7)

[기본예제 12 - 2] 가상함수의 사용 2 - 2

21 class Zergling : public Unit 22 { 23 24 public: 25 Zergling(int x, int y) : Unit(x,y) {} 26 27 void Move() 28 { 29 cout << "Zergling Moving..." << endl; 30 } 31 32 }; 33 부모부모부모부모클래스의클래스의클래스의클래스의MoveMoveMoveMove함수를함수를함수를함수를재정의한다재정의한다재정의한다재정의한다....33 34 class Mutalisk : public Unit 35 { 36 37 public: 38 Mutalisk(int x, int y) : Unit(x,y) {} 39 40 void Move() 41 { 42 cout << "Mutalisk Moving..." << endl; 43 } 44 45 }; 46

부모부모부모부모클래스의클래스의클래스의클래스의MoveMoveMoveMove함수를함수를함수를함수를재정의한다재정의한다재정의한다재정의한다....

(8)

[기본예제 12 - 2] 가상함수의 사용 2 - 3

47 int main(int argc, char* argv[ ]) 48 { 49Unit *pUnit; 50Unit BaseUnit(10,10); 51Zergling oUnit1(1,2); 52Mutalisk oUnit2(2,3); 53 54 55pUnit=&BaseUnit; 56pUnit->Move();

UnitUnitUnitUnit형형형형포인터포인터포인터포인터변수변수변수변수pUnitpUnitpUnitpUnit에에에에부모부모부모부모클래스의클래스의클래스의클래스의주소를주소를주소를주소를 할당한다할당한다할당한다할당한다.... 56pUnit->Move(); 57 58 59pUnit=&oUnit1; 60pUnit->Move(); 61 62pUnit=&oUnit2; 63pUnit->Move(); 64 65return 0; 66 }

pUnitpUnitpUnitpUnit에에에에ZerglingZerglingZerglingZergling형형형형클래스를클래스를클래스를클래스를할당한다할당한다할당한다할당한다. pUnitpUnitpUnitpUnit에에에에MutaliskMutaliskMutaliskMutalisk형형형형클래스를클래스를클래스를클래스를할당한다할당한다할당한다할당한다.

(9)

02_ 가상함수  가상함수의 실행구조  선언과 사용법이 기존 함수와 비슷  실행시 가상함수 연결을 위해 가상함수 테이블 생성  각 객체들은 테이블을 가리키는 숨겨진 포인터를 가짐

(10)

[기본예제 12 - 4] 가상 소멸자의 사용 - 1 0 1 # in c lu d e < io s tr e a m > 0 2 # in c lu d e < c s tr in g > 0 3 u s in g n a m e s p a c e s td ; 0 4 c la s s B a s e C la s s 0 5 { 0 6 0 7 p ri va te : 0 8 0 9 c h a r* m C la s s N a m e ;

클래스명을클래스명을클래스명을클래스명을저장할저장할저장할저장할문자열문자열문자열문자열변수다변수다변수다변수다....

0 9 c h a r* m C la s s N a m e ; 1 0 1 1 p u b lic : 1 2 1 3 B a s e C la s s () 1 4 { 1 5 c o u t < < " B a s e C la s s i s c re a te d .. .\ n "; 1 6 m C la s s N a m e = N U L L ; 1 7 } 1 8

클래스명을클래스명을클래스명을클래스명을저장할저장할저장할저장할문자열문자열문자열문자열변수다변수다변수다변수다.... BaseClassBaseClassBaseClassBaseClass 클래스의클래스의클래스의클래스의기본기본기본기본생성자다생성자다생성자다생성자다.... 호출호출호출호출여부를여부를여부를여부를확인하기확인하기확인하기확인하기위한위한위한위한출력문이다출력문이다출력문이다출력문이다....

(11)

[기본예제 12 - 4] 가상 소멸자의 사용 - 2 1 9 ~ B a s e C la s s () 2 0 { 2 1 2 2 c o u t < < " B a s e C la s s i s d e s tr o ye d .. .\ n "; 2 3 i f( m C la s s N a m e ! = N U L L ) 2 4 d e le te m C la s s N a m e ; 2 5 } 2 6

잘못된잘못된잘못된잘못된메모리메모리메모리메모리접근을접근을접근을접근을막기막기막기막기위해위해위해위해체크한다체크한다체크한다체크한다....

호출호출호출호출여부를여부를여부를여부를확인하기확인하기확인하기확인하기위한위한위한위한출력출력출력출력문이다문이다문이다문이다.... 할당했던할당했던할당했던할당했던메모리를메모리를메모리를메모리를해제한다해제한다해제한다해제한다. . . .

virtual virtual virtual virtual 키워드의키워드의키워드의키워드의유무에유무에유무에유무에따라따라따라따라결과가결과가결과가결과가달라진다달라진다달라진다달라진다....

2 6 2 7 p u b lic : 2 8 vi rt u a l vo id U s e it () 2 9 { 3 0 m C la s s N a m e = n e w c h a r[2 0 ]; 3 1 s tr c p y( m C la s s N a m e , "B A S E _C L A S S S ") ; 3 2 c o u t < < " C la s s N a m e i s " < < m C la s s N a m e < < e n d l; 3 3 } 3 4 }; 3 5

19191919자의자의자의자의문자를문자를문자를문자를저장할저장할저장할저장할공간을공간을공간을공간을할당한다할당한다할당한다할당한다....

(12)

[기본예제 12 - 4] 가상 소멸자의 사용 - 3

36 class UsingClass : public BaseClass 37 { 38 39 private: 40 char* mAlias; 41 42 public: 43 UsingClass() 44 { 45 cout << "UsingClass is created...\n";

클래스의클래스의클래스의클래스의별명을별명을별명을별명을저장할저장할저장할저장할문자열문자열문자열문자열변수다변수다변수다변수다 45 cout << "UsingClass is created...\n"; 46 mAlias = NULL; 47 } 48 49 ~UsingClass() 50 { 51 cout << "UsingClass is destroyed...\n"; 52 if (mAlias != NULL) 53 delete mAlias; 54 } 55

(13)

[기본예제 12 - 4] 가상 소멸자의 사용 - 4 5 6 p u b lic : 5 7 vo id U s e it () 5 8 { 5 9 B a s e C la s s :: U s e it () ; 6 0 m A lia s = n e w c h a r[1 0 ]; 6 1 s tr c p y( m A lia s , "D E L T A ") ; 6 2 c o u t < < " A lia s i s " < < m A lia s < < e n d l; 6 3 } 6 4 };

부모부모부모부모클래스의클래스의클래스의클래스의UseitUseitUseitUseit함수를함수를함수를함수를호출한다호출한다호출한다호출한다....

6 4 }; 6 5 6 6 vo id m a in () 6 7 { 6 8 B a s e C la s s * b c = n e w U s in g C la s s () ; 6 9 7 0 b c - > U s e it () ; 7 1 7 2 d e le te b c ; 7 3 }

BassClassBassClassBassClassBassClass형형형형포인터포인터포인터포인터변수에변수에변수에변수에UsingClassUsingClassUsingClassUsingClass 객체를객체를객체를객체를할당한다할당한다할당한다할당한다.... UseitUseitUseitUseit 함수를함수를함수를함수를호출한다호출한다호출한다호출한다.... 할당했던할당했던할당했던할당했던객체를객체를객체를객체를해제한다해제한다해제한다해제한다....

(14)

02_ 순수가상함수



순수 가상함수

함수의몸체(body)가없고선언만있음 함수를0으로설정해서선언 자식클래스는반드시재정의해야함 

추상 기초 클래스

하나이상의순수가상함수를가진클래스를말함 직접객체를생성할수없음 

순수 가상함수의 기본형태와 사용 예

virtual 반환되는_데이터형함수명( 인자...) = 0;

[기본 형태 ]

class BaseCalculator { public: virtual int Add(int, int) = 0; virtual int Sub(int, int) = 0; virtual int Multi(int, int) = 0; virtual float Divide(int, int) = 0; };

[사용 예]

(15)

[기본예제 12 - 5] 추상 기초 클래스의 사용 - 1

01 #include<iostream> 02 using namespace std; 03 class Unit 04 { 05 06 public: 07 08 int x,y; 09

움직일움직일움직일움직일좌표를좌표를좌표를좌표를저장할저장할저장할저장할변수다변수다변수다변수다.... 09 10 Unit(int i,int j) 11 { 12 x = i; 13 y = j; 14 } 15 16 virtual void Move() = 0; 17 18 }; 19

생성자다생성자다생성자다생성자다. . . . 하지만하지만하지만하지만파생파생파생파생클래스를클래스를클래스를클래스를통해서만통해서만통해서만통해서만호출된다호출된다호출된다호출된다.... 순수순수순수순수가상함수를가상함수를가상함수를가상함수를선언한다선언한다선언한다선언한다....

(16)

[기본예제 12 - 5] 추상 기초 클래스의 사용 - 2 2 0 c la s s Z e rg lin g : p u b lic U n it 2 1 { 2 2 2 3 p u b lic : 2 4 Z e rg lin g (i n t x, i n t y) 2 5 : U n it (x ,y ) 2 6 { }; 2 7 2 8 v o id M o ve () 2 9 { 3 0 c o u t < < " Z e rg lin g i s M o vi n g t o ( " < < x < < " , " < < y < < " )" < < e n d l;

순수순수순수순수가상함수를가상함수를가상함수를가상함수를재정의한다재정의한다재정의한다재정의한다....

3 1 } 3 2 3 3 } ; 3 4 3 5 c la s s M u ta lis k : p u b lic U n it 3 6 { 3 7 3 8 p u b lic : 3 9 M u ta lis k( in t x, i n t y) 4 0 : U n it (x ,y ) 4 1 { }; 4 2

(17)

[기본예제 12 - 5] 추상 기초 클래스의 사용 - 3

43 void Move() 44 { 45 cout << "Mutalisk is Moving to (" << x << ", " << y << ")" << endl; 46 } 47 48 }; 49 50 int main(int argc, char* argv[ ]) 51 { 52

순수순수순수순수가상함수를가상함수를가상함수를가상함수를재정의한다재정의한다재정의한다재정의한다.... 52 53 Unit *pUnit; 54 Zergling oUnit1(1,2); 55 Mutalisk oUnit2(2,3); 56 57 pUnit=&oUnit1; 58 pUnit->Move(); 59 pUnit=&oUnit2; 60 pUnit->Move(); 61 62 return 0; 63 }

(18)

예제모음 _23 확장이 용이한 도형의 넓이 구하기 요 구 사 항 요 구 사 항 요 구 사 항 요 구 사 항

도형들(삼각형, 사각형, 원)넓이를구하는클래스를작성한다. 추후에다른도형들을추가할있도록확장성을고려해야한다. 도형들의반지름, 가로, 높이는정수로한정한다.

실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과

(19)

예제모음 _23 소스 - 1 0 1 # in c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 c la s s F ig u re 0 4 { 0 5 p ro te c te d : 0 6 in t w id th ; 0 7 in t h e ig h t;

도형들의도형들의도형들의도형들의기본기본기본기본공통공통공통공통클래스를클래스를클래스를클래스를선언한다선언한다선언한다선언한다....

0 7 in t h e ig h t; 0 8 0 9 p u b lic : 1 0 F ig u re (i n t a g W id th , in t a g H e ig h t) 1 1 : w id th (a g W id th ), h e ig h t( a g H e ig h t) { }; 1 2 vi rt u a l vo id C a lc u la te () = 0 ; 1 3 1 4 } ; 1 5

CCCCalculatealculatealculatealculate메소드의메소드의메소드의메소드의구현을구현을구현을구현을강제한다강제한다강제한다강제한다....

(20)

예제모음 _23 소스 - 2

16 class Circle : public Figure 17 { 18 19 public: 20Circle(int radius) 21: Figure(radius, 0) {} 22 23void Calculate() 24{ 25cout << "Circle : radius = " << width << " => " << width * width * 3.14 << endl; 26} 27 }; 28

도형들의도형들의도형들의도형들의기본기본기본기본공통공통공통공통클래스를클래스를클래스를클래스를선언한다선언한다선언한다선언한다.... 28 29 class Square : public Figure // Rectangle 이맞다 30 { 31 32 public: 33Square(int agWidth, int agHeight) 34: Figure(agWidth, agHeight) {} 35 36void Calculate() 37{ 38cout << "Squre : (width, height) = (" << width << ", " << height << ") => " << width * height << endl; 39 } 40 41 };

순수순수순수순수가상함수가상함수가상함수가상함수CalculateCalculateCalculateCalculate를를를를재정의한다재정의한다재정의한다재정의한다....

(21)

예제모음 _23 소스 - 3 4 2 4 3 c la s s T ri a n g le : p u b lic F ig u re 4 4 { 4 5 4 6 p u b lic : 4 7 T ri a n g le (i n t a g W id th , in t a g H e ig h t) 4 8 : F ig u re (a g W id th , a g H e ig h t) { } 4 9 5 0 v o id C a lc u la te () 5 1 { 5 2 c o u t < < " T ri a n g le : ( w id th , h e ig h t) = ( " < < w id th < < " , " < < h e ig h t < < " ) = > " < < w id th

순수순수순수순수가상함수가상함수가상함수가상함수CalculateCalculateCalculateCalculate를를를를재정의한다재정의한다재정의한다재정의한다....

* h e ig h t / 2 < < e n d l; 5 3 } 5 4 5 5 } ; 5 6 5 7 5 8 v o id m a in () 5 9 { 6 0 F ig u re * fi g [3 ] = { n e w C ir c le (5 ), n e w S q u a re (2 , 5 ), n e w T ri a n g le (4 , 5 ) }; 6 1 6 2 f o r (i n t i = 0 ; i < 3 ; i+ + ) 6 3 f ig [i ]- > C a lc u la te () ; 6 4 }

순차적으로순차적으로순차적으로순차적으로각각각각도형의도형의도형의도형의넓이를넓이를넓이를넓이를계산한다계산한다계산한다계산한다....

(22)

예제모음 _ 2 4 추상 클래스를 이용한 + , - 계산기 만들기 요 구 사 항 요 구 사 항 요 구 사 항 요 구 사 항

연산을위한순수가상함수를선언한다. +/-연산을위해추상클래스의연산을상속받는클래스를정의한다. 사용할있는연산을결정하고, 수행하는전반을관리하는클래스를정의한다.

실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과

(23)

예제모음 _24 소스 - 1 0 0 1 # in c lu d e < io s tr e a m > 0 0 2 # in c lu d e < m a p > 0 0 3 0 0 4 u s in g n a m e s p a c e s td ; 0 0 5 0 0 6 c la s s C o m m a n d 0 0 7 { 0 0 8 0 0 9 p u b lic : 0 1 0 v ir tu a l vo id I n vo ke (i n t* , in t) = 0 ; 0 1 1

mapmapmapmap에에에에대해서는대해서는대해서는대해서는STLSTLSTLSTL을을을을다루는다루는다루는다루는장에서장에서장에서장에서학습하기로학습하기로학습하기로학습하기로하고하고하고하고,,,, 간단하게간단하게간단하게간단하게keykeykeykey값을값을값을값을이용해서이용해서이용해서이용해서값을값을값을값을저장하는저장하는저장하는저장하는저장소라는저장소라는저장소라는저장소라는 정도만정도만정도만정도만이해하자이해하자이해하자이해하자.... 연산을연산을연산을연산을위한위한위한위한순수순수순수순수가상함수를가상함수를가상함수를가상함수를선언한다선언한다선언한다선언한다....

0 1 2 } ; 0 1 3 0 1 4 c la s s C m d P lu s : p u b lic C o m m a n d 0 1 5 { 0 1 6 0 1 7 p ri va te : 0 1 8 C m d P lu s () { }; 0 1 9 0 2 0 v o id I n vo ke (i n t* a g N u m 1 , in t a g N u m 2 ) 0 2 1 { 0 2 2 * a g N u m 1 + = a g N u m 2 ; 0 2 3 } ; 0 2 4

++++ 연산을연산을연산을연산을위해위해위해위해, , , , 추상추상추상추상클래스클래스클래스클래스연산을연산을연산을연산을상속받아상속받아상속받아상속받아내용을내용을내용을내용을 구현한구현한구현한구현한클래스다클래스다클래스다클래스다....

(24)

예제모음 _24 소스 - 2

025 friend class CmdManager; 026 027 }; 028 029 class CmdMinus : public Command 030 { 031 032 private: 033 CmdMinus() {};----연산을연산을연산을연산을위해위해위해위해, , , , 추상추상추상추상클래스클래스클래스클래스연산을연산을연산을연산을상속받아상속받아상속받아상속받아내용을내용을내용을내용을033 CmdMinus() {}; 034 035 void Invoke(int* agNum1, int agNum2) 036 { 037 *agNum1 -= agNum2; 038 }; 039 040 friend class CmdManager; 041 042 }; 043

----연산을연산을연산을연산을위해위해위해위해, , , , 추상추상추상추상클래스클래스클래스클래스연산을연산을연산을연산을상속받아상속받아상속받아상속받아내용을내용을내용을내용을 구현한구현한구현한구현한클래스다클래스다클래스다클래스다....

(25)

예제모음 _24 소스 - 3

044 class CmdManager 045 { 046 047 private: 048 static CmdManager* cm; 049 int mAnswer; 050 map<char, Command*> mArrayofCmd; 051 052 private: 053 void Init() 054 { 055 mAnswer = 0; 056 AddCmd();

사용할사용할사용할사용할수수수수있는있는있는있는연산을연산을연산을연산을결정하고결정하고결정하고결정하고, , , , 또한또한또한또한수행하는수행하는수행하는수행하는전반을전반을전반을전반을 관리하는관리하는관리하는관리하는클래스다클래스다클래스다클래스다. 056 AddCmd(); 057 } 058 059 void AddCmd() 060 { 061 mArrayofCmd['+'] = new CmdPlus(); 062 mArrayofCmd['-'] = new CmdMinus(); 063 }; 064 065 public: 066 static CmdManager* getInstance() 067 { 068 if ( cm == NULL) 단단단단하나의하나의하나의하나의관리관리관리관리클래스를클래스를클래스를클래스를생성하기생성하기생성하기생성하기위한위한위한위한코드다코드다코드다코드다....

(26)

예제모음 _24 소스 - 4

069 { 070 CmdManager* instanceOfCM = new CmdManager(); 071 instanceOfCM->Init(); 072 073 return instanceOfCM; 074 }; 075 076 return cm; 077 }; 078 079 static void destroyInstance() 080 { 081 if ( cm != NULL)081 if ( cm != NULL) 082 delete cm; 083 }; 084 085 void Invoke(int agNum, char agOperator) 086 { 087 mArrayofCmd[agOperator]->Invoke(&mAnswer, agNum); 088 }; 089 090 int getAnswer() 091 { 092 return mAnswer; 093 };

저장된저장된저장된저장된명령명령명령명령중에중에중에중에해당해당해당해당명령을명령을명령을명령을수행한다수행한다수행한다수행한다....

(27)

예제모음 _24 소스 - 5 0 9 4 0 9 5 }; 0 9 6 0 9 7 C m d M a n a g e r* C m d M a n a g e r: :c m = N U L L ; 0 9 8 0 9 9 vo id m a in () 1 0 0 { 1 0 1 C m d M a n a g e r* c m = C m d M a n a g e r: :g e tI n s ta n c e () ; 1 0 1 C m d M a n a g e r* c m = C m d M a n a g e r: :g e tI n s ta n c e () ; 1 0 2 1 0 3 c m - > In vo ke (5 , '+ ') ; 1 0 4 c m - > In vo ke (3 , '+ ') ; 1 0 5 c m - > In vo ke (2 , '- ') ; 1 0 6 1 0 7 c o u t < < " A n s w e r = " < < c m - > g e tA n s w e r( ) < < e n d l; 1 0 8 1 0 9 C m d M a n a g e r: :d e s tr o yI n s ta n c e () ; 1 1 0 }

실제실제실제실제계산을계산을계산을계산을수행한다수행한다수행한다수행한다....

(28)

가상함수가상함수

가상함수(virtual function)는실제로실행될함수가 실행시간(runtime)에결정되는함수므로,그만큼 자유도가높고, 동적일수있으나, 코드를이해하기가 어렵고, 일반함수에비해좀더많은자원을소모한다.

요약 가상함수의가상함수의 사용사용

가상함수를정의하기위해서는부모클래스에서virtual 키워드를함수앞에선언해야하지만,자식클래스에서 다시정의할때에는virtual 키워드를또다시사용할다시정의할때에는virtual 키워드를또다시사용할 필요는없다. 그리고가상함수를통하여 ‘다형성(polymorphism)’을실현할수있는데, 이 다형성을사용하기위해서는일반적인함수호출보다는 포인터를통해서호출되어야제값을발휘한다.

순수순수 가상함수가상함수

순수가상함수는함수의몸체(body)가없으므로, 반드시 파생클래스에서재정의가필요하다.아울러순수 가상함수를가지고있는클래스를추상기초클래스라고 하며추상기초클래스를이용하여,인터페이스를정의할 수있다. .

(29)

w w w .t h e m e g a lle ry .c o m IT C o o kB o o k fo r B e g in n e r, C ++ IT C o o kB o o k fo r B e g in n e r, C ++ IT C o o kB o o k fo r B e g in n e r, C ++ IT C o o kB o o k fo r B e g in n e r, C ++ 기 초 기 초 기 초 기 초 12121212 장장장장 끝끝끝끝

참조

관련 문서

약국은 당초 수집 목적과 합리적으로 관련된 범위에서 정보주체에게 불이익이 발생하는지 여부, 암호화 등 안전성 확보에 필요한 조치를 하였는지 여부 등을

(Taekwondo, Weight Lifting Players) (90 min × 6 days/week) Warming

여섯째,내현적 자기애와 사회불안 간의 관계에서 매개변인인 자기개념 명료성의 매 개효과 유의성을 검증하기 위해 변인 간 모델별 Sobe lt e s t ( 절대값&gt;1.. 001

[r]

자료형태 &lt;physicalDescription&gt;&lt;form&gt; 필수 디지털 품질 &lt;physicalDescription&gt;&lt;reformattingQuality&gt; 필수

캐나다정부간행물목록(Weekly checklist of Canadian government publications) 에 수록된 자료 중 Folder자료, 인구센서스, 전화번호 자료 등을 제외한

[r]

회원국의 영토밖에서 다른 회원국의 , 영토내에서 회원국의 서비스 소비자에게