SlideShare a Scribd company logo
1 of 15
Download to read offline
Choi Seung Yeon
Chapter 1
 Item 1
 Item 2
 Item 3
 Item 4
Item 1 : C++은 언어들의 연합체!
1. C (절차지향) : C를 기본적으로 제공
2. C++ (객체지향) : 클래스, 캡슐화, 상속, 다형성, 가상함수(동적 바인딩)
3. Template C++ : Template Metaprogramming이란 새로운 패러다임.
4. STL : 자료구조와 알고리즘 등이 얽힌 Template Library
C++ 프로그래밍의 핵심은 C++의 어떤 부분을 사용하느냐 이다.
Item 2 : #define 남발은 금물!
[ 매크로대신 상수를 쓰자. ]
#define ASPECT_RATIO 1.653 보다는
const double AspectRatio = 1.653; 을 쓰자.
컴파일러는 #define으로 정의한 값을 기계적으로 정의한 값으로 치환한 후 컴
파일을 시작한다. 따라서 다음과 같은 문제가 있다.
- 디버깅 중에 ASPECT_RATIO가 어떤 값인지 알 수 없다.
- 등장 횟수만큼 목적 코드안에 들어가므로 코드 크기가 커진다.
Item 2 : #define 남발은 금물!
[ 클래스 상수(클래스 멤버를 상수로 정의)는 static으로 정의한다! ]
만약 클래스 상수의 사본 개수가 한 개를 넘지 못하게 하고 싶다면 static
멤버로 만들어야 한다. 이 클래스 상수의 구현은 선언과 정의로 나뉜다.
header에서 선언되고, source에서 정의된다.
하지만 사실은 정의를 하지 않고, header에서의 선언만으로 사용이 가능해야
하나 많은 컴파일러들이 이를 받아들이지 않는다. (VS 17은 된다)
그 경우에는 enum hack을 사용해서 문제를 해결할 수 있다. 이 enum
hack의 장점은 상당히 많지만, 논외임으로 생략한다. 알고 싶으면 책 참고.
Item 2 : #define 남발은 금물!
[ 클래스 상수(클래스 멤버를 상수로 정의)는 static으로 정의한다! ]
Item 2 : #define 남발은 금물!
[ 매크로 함수는 Template 인라인 함수로! ]
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
매크로 함수는 전처리기의 기계적 치환때문에 문제를 많이 일으킨다. 따라서, 매크로 함수의
일반화 장점과 안정성까지 완벽히 취할 수 있는 템플릿 인라인 함수를 사용하면 좋다.
template<typename T>
inline void callWithMax(const T& a, const T& b)
{
f( a > b ? a : b);
}
Item 3 : const를 사랑해라!
[ const는 프로그램의 안정성을 높여준다 ]
const를 사용해 많은 오류를 잡아낼 수 있다.
[ 포인터 const 규칙 ]
const가 * 왼편에 있으면 포인터가 가리키는 대상이
상수이지만, 그 반대는 포인터 자체가 상수이다.
Item 3 : const를 사랑해라!
[ 함수에서의 const는 가장 강력하다 ]
애초에 함수 반환 값을 const로 설정하면, 안정성이나 효율을 포기하지 않고도 예기치 못한 버그
를 방지할 수 있다.
만약 const가 없었다면, a*b의 결과로 나오는
임시객체에 c를 대입하는 경우가 발생한다.
Item 3 : const를 사랑해라!
[ 상수 멤버 함수 ]
상수 객체에 대해 호출될 함수이다. 이 함수는 2가지 중요점을 가진다.
- 인터페이스를 보기 좋게 만든다. 즉, 변경할 수 없는 함수가 어떤 것인지 알려준다.
- 상수 객체를 사용할 수 있다. Reference-to-const가 가능하여 성능을 높인다. (const T&)
가지는 특징은 다음과 같다.
- Reference-to-const에서 호출이 가능하다.
- 상수 멤버 함수이냐 아니냐로 오버로딩이 가능하다.
- 멤버 변수의 값을 바꾸지 않는다.
Item 3 : const를 사랑해라!
[ 상수성 ]
- 비트수준(물리적) 상수성
어떤 멤버 함수가 그 객체의 어떤 데이터 멤버도 수정하지 않아야만, const임을 인정한다.
즉, 그 객체를 구성하는 비트들 중 어떤 것도 바꾸면 안된다.
- 논리적 상수성
값이 바뀌어도 그것을 사용자가 알 수 없으며, 논리적으로 옳다면 const임을 인정한다.
mutable 키워드로 상수 객체에서도 수정가능한 멤버를 생성할 수 있다.
Item 4 : 객체는 반드시 초기화부터!
[ 정의되지 않은 동작 ]
초기화 되지 않은 변수는 정의되지 않은 동작을 발생시킨다. 따라서 무조건 초기화부터!
[ class 생성자 : 대입과 초기화를 구별하자 ]
많은 개발자들이 생성자에서 대입을 하는 경우가 많다. 이는 개운한 방법이 아니다.
초기화되고 있는 것이 아니라, 대입되고 있는 것이다.
따라서, Member Initializer를 이용하여 초기화하는 것이 좋다.
만약 기본 생성자로 초기화 하고 싶은 경우에도, Member Initializer를 이용하도록 하자!
Item 4 : 객체는 반드시 초기화부터!
[ 초기화는 base class 부터 ]
초기화 순서는 다음과 같다.
1. Base class 초기화
2. Class member value 초기화 : 변수가 선언된 순서대로
Member Initializer의 순서는 영향이 없다.
Item 4 : 객체는 반드시 초기화부터!
[ 비 지역 정적 객체 ]
Static 객체 란 자신이 생성된 시점부터 프로그램이 끝날 때까지 살아 있는 객체이다.
즉, 스택 객체 및 힙 기반 객체는 애초에 Static 객체가 될 수 없다. 그 종류는 다음과 같다.
- 전역객체
- 네임스페이스 내의 전역 객체
- 클래스 안 static 객체
- 함수 안 static 객체 ( 함수에 대해 지역성을 가지므로, 이 객체만 지역 정적 객체이다 )
- 파일 유효범위 안 static 객체
Item 4 : 객체는 반드시 초기화부터!
[ 비 지역 정적 객체 ]
문제는 서로 다른 번역 단위에 정의된 비 지역 정적 객체들 사이의 상대적인 초기화 순서는 정해져
있지 않다는 것이다.
이 문제는 싱글톤 패턴으로 해결할 수 있다.
비 지역 정적 객체를 하나씩 맡는 함수를 준비하고, 이 안에 객체를 넣는 것이다.
함수 속에서도 이들은 정적 객체로 선언하고, 그 함수에서는 이들에 대한 참조자를 반환한다.
즉, 비 지역 정적객체를 직접 참조하는 것이 아닌 함수 호출(지역 정적 객체)로 대신하는 것이다.

More Related Content

What's hot

More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터Dong Chan Shin
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Dong Chan Shin
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2세빈 정
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디quxn6
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2Injae Lee
 
Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식TonyCms
 
Effective cpp
Effective cppEffective cpp
Effective cppTonyCms
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디quxn6
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디quxn6
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8문익 장
 
[Swift] Generics
[Swift] Generics[Swift] Generics
[Swift] GenericsBill Kim
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1연우 김
 
Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나병걸 윤
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Hyun Sung Yoon
 

What's hot (19)

5 6 1
5 6 15 6 1
5 6 1
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
MEC++ 1, 2
MEC++ 1, 2MEC++ 1, 2
MEC++ 1, 2
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
 
Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식
 
Effective cpp
Effective cppEffective cpp
Effective cpp
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
MEC++ 3,4
MEC++ 3,4MEC++ 3,4
MEC++ 3,4
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8
 
[Swift] Generics
[Swift] Generics[Swift] Generics
[Swift] Generics
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1
 
Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)
 

Similar to Effective C++ Chapter 1 Summary

Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장 Shin heemin
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2성연 김
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4성연 김
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++KyeongWon Koo
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차Injae Lee
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6Injae Lee
 
Effective STL 1~4장 정리
Effective STL 1~4장 정리Effective STL 1~4장 정리
Effective STL 1~4장 정리Shin heemin
 
More effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptMore effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptInjae Lee
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2문익 장
 
Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4문익 장
 
C++ Template/STL study
C++ Template/STL studyC++ Template/STL study
C++ Template/STL studySeo Dong-yu
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinDong Chan Shin
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 

Similar to Effective C++ Chapter 1 Summary (20)

Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
Effective STL 1~4장 정리
Effective STL 1~4장 정리Effective STL 1~4장 정리
Effective STL 1~4장 정리
 
More effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptMore effective c++ 챕터3~4ppt
More effective c++ 챕터3~4ppt
 
1 2 1
1 2 11 2 1
1 2 1
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2
 
Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4
 
C++ Template/STL study
C++ Template/STL studyC++ Template/STL study
C++ Template/STL study
 
C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 

Effective C++ Chapter 1 Summary

  • 2.  Item 1  Item 2  Item 3  Item 4
  • 3. Item 1 : C++은 언어들의 연합체! 1. C (절차지향) : C를 기본적으로 제공 2. C++ (객체지향) : 클래스, 캡슐화, 상속, 다형성, 가상함수(동적 바인딩) 3. Template C++ : Template Metaprogramming이란 새로운 패러다임. 4. STL : 자료구조와 알고리즘 등이 얽힌 Template Library C++ 프로그래밍의 핵심은 C++의 어떤 부분을 사용하느냐 이다.
  • 4. Item 2 : #define 남발은 금물! [ 매크로대신 상수를 쓰자. ] #define ASPECT_RATIO 1.653 보다는 const double AspectRatio = 1.653; 을 쓰자. 컴파일러는 #define으로 정의한 값을 기계적으로 정의한 값으로 치환한 후 컴 파일을 시작한다. 따라서 다음과 같은 문제가 있다. - 디버깅 중에 ASPECT_RATIO가 어떤 값인지 알 수 없다. - 등장 횟수만큼 목적 코드안에 들어가므로 코드 크기가 커진다.
  • 5. Item 2 : #define 남발은 금물! [ 클래스 상수(클래스 멤버를 상수로 정의)는 static으로 정의한다! ] 만약 클래스 상수의 사본 개수가 한 개를 넘지 못하게 하고 싶다면 static 멤버로 만들어야 한다. 이 클래스 상수의 구현은 선언과 정의로 나뉜다. header에서 선언되고, source에서 정의된다. 하지만 사실은 정의를 하지 않고, header에서의 선언만으로 사용이 가능해야 하나 많은 컴파일러들이 이를 받아들이지 않는다. (VS 17은 된다) 그 경우에는 enum hack을 사용해서 문제를 해결할 수 있다. 이 enum hack의 장점은 상당히 많지만, 논외임으로 생략한다. 알고 싶으면 책 참고.
  • 6. Item 2 : #define 남발은 금물! [ 클래스 상수(클래스 멤버를 상수로 정의)는 static으로 정의한다! ]
  • 7. Item 2 : #define 남발은 금물! [ 매크로 함수는 Template 인라인 함수로! ] #define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b)) 매크로 함수는 전처리기의 기계적 치환때문에 문제를 많이 일으킨다. 따라서, 매크로 함수의 일반화 장점과 안정성까지 완벽히 취할 수 있는 템플릿 인라인 함수를 사용하면 좋다. template<typename T> inline void callWithMax(const T& a, const T& b) { f( a > b ? a : b); }
  • 8. Item 3 : const를 사랑해라! [ const는 프로그램의 안정성을 높여준다 ] const를 사용해 많은 오류를 잡아낼 수 있다. [ 포인터 const 규칙 ] const가 * 왼편에 있으면 포인터가 가리키는 대상이 상수이지만, 그 반대는 포인터 자체가 상수이다.
  • 9. Item 3 : const를 사랑해라! [ 함수에서의 const는 가장 강력하다 ] 애초에 함수 반환 값을 const로 설정하면, 안정성이나 효율을 포기하지 않고도 예기치 못한 버그 를 방지할 수 있다. 만약 const가 없었다면, a*b의 결과로 나오는 임시객체에 c를 대입하는 경우가 발생한다.
  • 10. Item 3 : const를 사랑해라! [ 상수 멤버 함수 ] 상수 객체에 대해 호출될 함수이다. 이 함수는 2가지 중요점을 가진다. - 인터페이스를 보기 좋게 만든다. 즉, 변경할 수 없는 함수가 어떤 것인지 알려준다. - 상수 객체를 사용할 수 있다. Reference-to-const가 가능하여 성능을 높인다. (const T&) 가지는 특징은 다음과 같다. - Reference-to-const에서 호출이 가능하다. - 상수 멤버 함수이냐 아니냐로 오버로딩이 가능하다. - 멤버 변수의 값을 바꾸지 않는다.
  • 11. Item 3 : const를 사랑해라! [ 상수성 ] - 비트수준(물리적) 상수성 어떤 멤버 함수가 그 객체의 어떤 데이터 멤버도 수정하지 않아야만, const임을 인정한다. 즉, 그 객체를 구성하는 비트들 중 어떤 것도 바꾸면 안된다. - 논리적 상수성 값이 바뀌어도 그것을 사용자가 알 수 없으며, 논리적으로 옳다면 const임을 인정한다. mutable 키워드로 상수 객체에서도 수정가능한 멤버를 생성할 수 있다.
  • 12. Item 4 : 객체는 반드시 초기화부터! [ 정의되지 않은 동작 ] 초기화 되지 않은 변수는 정의되지 않은 동작을 발생시킨다. 따라서 무조건 초기화부터! [ class 생성자 : 대입과 초기화를 구별하자 ] 많은 개발자들이 생성자에서 대입을 하는 경우가 많다. 이는 개운한 방법이 아니다. 초기화되고 있는 것이 아니라, 대입되고 있는 것이다. 따라서, Member Initializer를 이용하여 초기화하는 것이 좋다. 만약 기본 생성자로 초기화 하고 싶은 경우에도, Member Initializer를 이용하도록 하자!
  • 13. Item 4 : 객체는 반드시 초기화부터! [ 초기화는 base class 부터 ] 초기화 순서는 다음과 같다. 1. Base class 초기화 2. Class member value 초기화 : 변수가 선언된 순서대로 Member Initializer의 순서는 영향이 없다.
  • 14. Item 4 : 객체는 반드시 초기화부터! [ 비 지역 정적 객체 ] Static 객체 란 자신이 생성된 시점부터 프로그램이 끝날 때까지 살아 있는 객체이다. 즉, 스택 객체 및 힙 기반 객체는 애초에 Static 객체가 될 수 없다. 그 종류는 다음과 같다. - 전역객체 - 네임스페이스 내의 전역 객체 - 클래스 안 static 객체 - 함수 안 static 객체 ( 함수에 대해 지역성을 가지므로, 이 객체만 지역 정적 객체이다 ) - 파일 유효범위 안 static 객체
  • 15. Item 4 : 객체는 반드시 초기화부터! [ 비 지역 정적 객체 ] 문제는 서로 다른 번역 단위에 정의된 비 지역 정적 객체들 사이의 상대적인 초기화 순서는 정해져 있지 않다는 것이다. 이 문제는 싱글톤 패턴으로 해결할 수 있다. 비 지역 정적 객체를 하나씩 맡는 함수를 준비하고, 이 안에 객체를 넣는 것이다. 함수 속에서도 이들은 정적 객체로 선언하고, 그 함수에서는 이들에 대한 참조자를 반환한다. 즉, 비 지역 정적객체를 직접 참조하는 것이 아닌 함수 호출(지역 정적 객체)로 대신하는 것이다.