수업 ë‚´ìš© ¶
2004ë…„ ìž�ë°” ì¤‘ê°„ê³ ì‚¬ 3번 ë¬¸ì œë¡œ ì¶œì œ
오버ë�¼ì�´ë”© ¶
기반 í�´ëž˜ìФì—� ì�´ë¯¸ 존재하는 함수를 파ìƒ� í�´ëž˜ìФì—�서 다시 ì„ ì–¸í•˜ê³ , 구현하는 것ì�„ 함수를 ìž¬ì •ì�˜(Overriding)í•œë‹¤ê³ í•œë‹¤. 기반 í�´ëž˜ìФì—� ì�´ë¯¸ 존재하는 함수를 파ìƒ� í�´ëž˜ìФì—�서 ìž¬ì •ì�˜ 하면, 파ìƒ� í�´ëž˜ìФì—�서는 기반 í�´ëž˜ìФì—�서 ì •ì�˜ë�œ 함수가 무시ë�˜ê³ , 파ìƒ� í�´ëž˜ìФì—� 새로 ì •ì�˜ë�œ 함수가 ë�™ìž‘하게 ë�œë‹¤.
예를 들어 Peopleí�´ëž˜ìФì—� move(int aX, int aY){this.position.x += aX;this.position.y += aY;}ë�¼ëŠ” 함수가 있다. ê·¸ë¦¬ê³ Peopleí�´ëž˜ìŠ¤ë¥¼ ìƒ�ì†� ë°›ì�€ Studentì�´ë�¼ëŠ” í�´ëž˜ìŠ¤ê°€ 있다. ê·¼ë�° 'í•™ìƒ�'ì�€ 좀 ë©�ì²í•´ì„œ 반대로 움ì§�ì�¸ë‹¤. ê·¸ë ‡ë‹¤ë©´ ìƒ�ì†�ë°›ì�€ move함수를 ìž¬ì •ì�˜ 해줘야한다. move(int aX, int aY){this.position.x -= aX;this.position.y -= aY;}
예를 들어 Peopleí�´ëž˜ìФì—� move(int aX, int aY){this.position.x += aX;this.position.y += aY;}ë�¼ëŠ” 함수가 있다. ê·¸ë¦¬ê³ Peopleí�´ëž˜ìŠ¤ë¥¼ ìƒ�ì†� ë°›ì�€ Studentì�´ë�¼ëŠ” í�´ëž˜ìŠ¤ê°€ 있다. ê·¼ë�° 'í•™ìƒ�'ì�€ 좀 ë©�ì²í•´ì„œ 반대로 움ì§�ì�¸ë‹¤. ê·¸ë ‡ë‹¤ë©´ ìƒ�ì†�ë°›ì�€ move함수를 ìž¬ì •ì�˜ 해줘야한다. move(int aX, int aY){this.position.x -= aX;this.position.y -= aY;}
~cpp People people;//초기 위치(100, 100) people.move(10,10);//ì�´ë�™ 후 위치(110, 110) Student student;//초기 위치(100, 100) student.move(10,10);//ì�´ë�™ 후 위치(90, 90)함수를 ìž¬ì •ì�˜ í• ë•ŒëŠ” 기반 í�´ëž˜ìФì—� ë§Œë“¤ì–´ì ¸ 있는 함수와 파ìƒ� í�´ëž˜ìФì—�서 ìž¬ì •ì�˜í•œ 함수ì�˜ 함수명과 매개변수ì�˜ 타입ì�´ ì™„ì „ížˆ 같아서 서로 êµ¬ë³„í• ìˆ˜ 없어야 한다. 만약, ìž¬ì •ì�˜ í•˜ë ¤ê³ í•¨ìˆ˜ë¥¼ 만들었는ë�° ì�´ê²ƒì�´ 기반 í�´ëž˜ìФì—� 있는 함수와 매개변수ì�˜ 타입ì�´ 조금ì�´ë�¼ë�„ 다르면, ì�´ê²ƒì�€ ìž¬ì •ì�˜ê°€ 아니ë�¼ 오버로딩으로 간주ë�œë‹¤.
오버로딩 ¶
오버로딩ì�´ëž€ 하나ì�˜ 함수명ì—� 비슷한 기능ì�„ 하면서 넘겨 받는 매개변수가 서로 다른 함수를 ë‘�ê°œ ì�´ìƒ� ì •ì�˜í•˜ëŠ” 것ì�„ ë§�한다.
위ì—�서 ë§�한 Peopleí�´ëž˜ìФì�˜ move함수를 예를 ë“¤ì–´ë³´ê² ë‹¤. 위ì�˜ move함수는 ì •ìˆ˜í˜• ì�¸ìž�를 매개변수로 받아들ì�¸ë‹¤. 만약 people.move(1.1, 2.13)ë�¼ëŠ” ëª…ë ¹ì–´ë¥¼ 실행한다면 매개변수ì�˜ 타입ì�´ 다르다는 ì—�러가 ë°œìƒ�í• ê²ƒì�´ë‹¤. ë�”블 형ì�˜ ì�¸ìž�를 받아들ì�´ê¸° 위해 move함수를 Overloading한다. move(double aX, double aY){this.position.x += (int)aX;this.position.y += (int)aY;} ë‘� 함수 다 ìœ íš¨í•œ 함수로 사용ë�œë‹¤. ë‘� 함수 중 ì–´ë–¤ 함수가 호출ë� 것ì�¸ì§€ëŠ” 매개변수 ê°’ì—� ì�˜í•´ì„œ ê²°ì •ë�œë‹¤. 즉 오버로딩 ë�œ 함수들ì�€ 반드시 매개변수ì�˜ 타입ì�´ 달ë�¼ 서로 구별ë� 수 있어야 한다.
위ì—�서 ë§�한 Peopleí�´ëž˜ìФì�˜ move함수를 예를 ë“¤ì–´ë³´ê² ë‹¤. 위ì�˜ move함수는 ì •ìˆ˜í˜• ì�¸ìž�를 매개변수로 받아들ì�¸ë‹¤. 만약 people.move(1.1, 2.13)ë�¼ëŠ” ëª…ë ¹ì–´ë¥¼ 실행한다면 매개변수ì�˜ 타입ì�´ 다르다는 ì—�러가 ë°œìƒ�í• ê²ƒì�´ë‹¤. ë�”블 형ì�˜ ì�¸ìž�를 받아들ì�´ê¸° 위해 move함수를 Overloading한다. move(double aX, double aY){this.position.x += (int)aX;this.position.y += (int)aY;} ë‘� 함수 다 ìœ íš¨í•œ 함수로 사용ë�œë‹¤. ë‘� 함수 중 ì–´ë–¤ 함수가 호출ë� 것ì�¸ì§€ëŠ” 매개변수 ê°’ì—� ì�˜í•´ì„œ ê²°ì •ë�œë‹¤. 즉 오버로딩 ë�œ 함수들ì�€ 반드시 매개변수ì�˜ 타입ì�´ 달ë�¼ 서로 구별ë� 수 있어야 한다.
~cpp People people;//초기 위치(100, 100) people.move(10,10);//�� 후 위치(110, 110) people.move(5.1,11.8);//Overloading� 함수 호출, �� 후 위치(115, 121)
ì‚¬ì „ì � ì�˜ë¯¸ ¶
Overridingê³¼ Overloadingì�€ 비슷하게 ìƒ�겼기 때문ì—� 혼ë�™í•˜ê¸° 쉽다. Overloadingì�€ '너무 ë§Žì�´ 싣다', 'ê³¼ì �하다'ë�¼ëŠ” 뜻으로 ë�˜ì–´ìžˆê³ , Overridingì�€ '무시하다', '짓밟다'ë�¼ê³ í•´ì„�ë�œë‹¤. ì‚¬ì „ì � ì�˜ë¯¸ë¥¼ 기억해둔다면 ë‘� 개가 혼ë�™ë� 때 ë�„움ì�´ ë� 것ì�´ë‹¤.










