Study/study

ν•¨μˆ˜ μ˜€λ²„λ‘œλ“œ(overload)

μœ€μ •_ 2024. 11. 14. 15:35

ν•¨μˆ˜ μ˜€λ²„λ‘œλ“œ κ°œλ…μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

 

ν•¨μˆ˜ μ˜€λ²„λ‘œλ“œ(overload)

  • 같은 μ΄λ¦„μ˜ ν•¨μˆ˜λ₯Ό μ—¬λŸ¬ 개 μ •μ˜ν•  수 μžˆλŠ” κ°œλ…
  • 각 ν•¨μˆ˜κ°€ μž…λ ₯λ°›λŠ” νŒŒλΌλ―Έν„°μ˜ κ°œμˆ˜λ‚˜ νƒ€μž…μ„ λ‹€λ₯΄κ²Œ ν•΄μ•Όν•œλ‹€.
  • ν•¨μˆ˜ 이름이 같아도 μž…λ ₯λ˜λŠ” νŒŒλΌλ―Έν„°μ˜ κ°œμˆ˜λ‚˜ νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ λ‹€λ₯Έ ν•¨μˆ˜λ‘œ μΈμ‹λ˜μ–΄ ν˜ΈμΆœλœλ‹€.
  • C++, C#, Java, Swiftμ—μ„œλŠ” μ˜€λ²„λ‘œλ”©μ„ μ§€μ›ν•˜κ³ , C, Python, JavaScript, Ruby λ“±μ—μ„œλŠ” μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • μ–Έμ–΄λ§ˆλ‹€ μ˜€λ²„λ‘œλ“œ κ΅¬ν˜„ λ°©μ‹κ³Ό μ œμ•½ μ‚¬ν•­μ€ λ‹€λ₯Ό μˆ˜ μžˆλ‹€.

 

 

C++μ—μ„œμ˜ ν•¨μˆ˜ μ˜€λ²„λ‘œλ“œ

  • ν•¨μˆ˜ 이름은 κ°™μ§€λ§Œ νŒŒλΌλ―Έν„°μ˜ νƒ€μž…μ΄λ‚˜ 개수λ₯Ό λ‹€λ₯΄κ²Œ ν•˜μ—¬ μ—¬λŸ¬ 개의 ν•¨μˆ˜λ₯Ό μ •μ˜ν•  수 μžˆλ‹€.
  • λ°˜ν™˜ κ°’μ˜ νƒ€μž…λ§Œ λ‹€λ₯΄κ²Œ μ •μ˜ν•˜λ©΄ μ˜€λ²„λ‘œλ“œν•  수 μ—†κ³ , νŒŒλΌλ―Έν„°κΉŒμ§€ λ‹€λ₯΄κ²Œ ν•΄μ•Ό ν•œλ‹€.

 

C++ μ˜€λ²„λ‘œλ”© μ˜ˆμ‹œ1: νŒŒλΌλ―Έν„° κ°œμˆ˜κ°€ λ‹€λ₯Έ 경우

#include <iostream>
using namespace std;

int func(){
	return 10;
}

int func(int x){
	return x * 2;
}


int main() {
    cout << "0 parm function: " << func() << endl;		10
    cout << "1 parm function: " << func(5) << endl;		10
    return 0;
}

 

C++ μ˜€λ²„λ‘œλ”© μ˜ˆμ‹œ2: νŒŒλΌλ―Έν„° νƒ€μž…μ΄ λ‹€λ₯Έ 경우

#include <iostream>
using namespace std;

int func(int x){
	return x * 2;
}

double func(double x){
	return x * 2.0;
}


int main() {
    cout << "int parm function: " << func(5) << endl;		10
    cout << "double parm function: " << func(5.0) << endl;	10.0
    return 0;
}

 

 

 

 

였λ₯˜ 및 ν•΄κ²° μ˜ˆμ‹œ

 

λΉŒλ“œ 도쀑에 'λ°˜ν™˜ ν˜•μ‹μœΌλ‘œλ§Œ κ΅¬λΆ„λ˜λŠ” ν•¨μˆ˜λ₯Ό μ˜€λ²„λ‘œλ“œν•  수 μ—†μŠ΅λ‹ˆλ‹€.' 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

κ΄€λ ¨ 였λ₯˜ 및 κ²½κ³ λ“€

 

ν•΄λ‹Ή 였λ₯˜κ°€ WinSock2.h νŒŒμΌμ—μ„œ λ°œμƒν•˜λŠ”λ°, μ—¬κΈ°μ—λŠ” μ—¬λŸ¬ μ΄μœ κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. winsock.hμ™€μ˜ 좩돌
    - μ„œλ‘œ λ‹€λ₯Έ μ†ŒμΌ“ APIλ₯Ό μ •μ˜ν•˜κ³  μžˆμ–΄ λ™μ‹œμ— 포함(include)ν•˜λ©΄ 좩돌이 λ°œμƒν•  수 있음

  2. λ‹€λ₯Έ λΌμ΄λΈŒλŸ¬λ¦¬μ™€μ˜ 좩돌
    - winsock2.h와 λ‹€λ₯Έ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μ™€ 좩돌이 λ°œμƒν•  수 있음

  3. #define _CRT_SECURE_NO_WARNINGSμ™€μ˜ 좩돌
    - ν•΄λ‹Ή λ§€ν¬λ‘œκ°€ winsock2.hμ—μ„œ μ •μ˜ν•˜λŠ” ν•¨μˆ˜λ“€κ³Ό 좩돌이 λ°œμƒν•  수 있음

 

 

μ €λŠ” OpenSSL λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν•¨κ»˜ μ‚¬μš©ν•΄μ„œ λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ•„λž˜ μ½”λ“œμ²˜λŸΌ winsock2.hλŠ” OpenSSL보닀 λ¨Όμ € includeν•˜λ©΄ ν•΄κ²°λ©λ‹ˆλ‹€. 

#include <winsock2.h>
#include <ws2tcpip.h>
#include <openssl/evp.h>
#include <openssl/rand.h>

 

 

헀더 파일이 ν¬ν•¨λ˜λŠ” μˆœμ„œμ— 따라 맀크둜 μ •μ˜μ™€ ν•¨μˆ˜ 선언이 영ν–₯을 λ°›μŠ΅λ‹ˆλ‹€. 컴파일 μ‹œ λ°œμƒν•˜λŠ” 맀크둜 좩돌과 관련이 μžˆμŠ΅λ‹ˆλ‹€. winsock2.h 헀더 νŒŒμΌμ—μ„œλŠ” μœˆλ„μš° μ†ŒμΌ“ APIλ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ”λ° OpenSSL도 자체적으둜 μ†ŒμΌ“ κ΄€λ ¨ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ½”λ“œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ–΄ 일뢀 맀크둜 이름이 μΆ©λŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. (ex. accept(), bind(), select() ...) winsocks2.hλŠ” Windows ν™˜κ²½μ—μ„œ 기본적으둜 제곡되고 OpenSSLλŠ” μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ―€λ‘œ 기본적으둜 μ œκ³΅λ˜λŠ” 헀더 νŒŒμΌμ„ λ¨Όμ € 포함(include)ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.